十分鐘搞定你自己的多圖片/文件伺服器

来源:http://www.cnblogs.com/tdws/archive/2016/12/28/6231308.html
-Advertisement-
Play Games

本文版權歸博客園和作者吳雙本人共同所有,轉載和爬蟲必須在顯要位置註明原文地址,www.cnblogs.com/tdws 寫在前面 圖片/文件伺服器,顧名思義就是存文件唄,有的人用阿裡雲的現有服務,有的把文件Post到文件伺服器,在文件伺服器一端用一個應用程式來接收並保存,方法各不相同。老司機們各種服 ...


本文版權歸博客園作者吳雙本人共同所有,轉載和爬蟲必須在顯要位置註明原文地址,www.cnblogs.com/tdws

 寫在前面 

圖片/文件伺服器,顧名思義就是存文件唄,有的人用阿裡雲的現有服務,有的把文件Post到文件伺服器,在文件伺服器一端用一個應用程式來接收並保存,方法各不相同。老司機們各種伺服器已經玩爛了。在使用圖片/文件多伺服器的幾個問題就在於:

1.web上傳的文件如何post到文件伺服器上及其速度如何,占用帶寬和耗時如何。

2.如何使文件均衡的分佈在各台圖片伺服器上。

3.如何拓展新的圖片伺服器,並保障對已分配的內容影響降到最小。

本篇分享一方面希望有經驗的司機給點意見,另一方面分享給新司機和記錄自己的歷程。

 第一分鐘確定最終目標

1.各文件伺服器不僅提供存儲功能,還要有對外服務能力,以降低各個Web伺服器的帶寬占用和磁碟IO消耗。

2.提供簡便和容易的可橫向拓展能力

3.Async非同步IO保證線程非阻塞,如果對非同步有疑問的,可以非同步這篇文章 http://www.cnblogs.com/tdws/p/6172207.html

4.文件快速到達圖片伺服器

 第三分鐘否定自己

1.否認採取Http Post圖片到圖片伺服器的方式

2.否認採取Hash取模演算法

3.否認使用一致性哈希,避免伺服器橫向拓展後文件移動,即使是少量的

 第五分鐘確定實現方式

1.把文件伺服器磁碟共用出一個文件夾,作為特定用戶間“網路磁碟”,就是說該共用文件夾,只有web伺服器有許可權訪問,你可以參照區域網內如何共用文件夾或者阿裡雲共用文件夾。

2.通過IIS虛擬目錄,將其物理路徑指向網路磁碟。你知道共用文件夾間使用Tcp/Ip協議和Netbios協議通信。

3.配置WebConfig訪問網路磁碟身份(用戶名和密碼)—必須配置哦

4.第一步所共用的文件,在文件伺服器部署在IIS下WebApp中的一個文件下,以便暴露URL路徑。因為你知道IIS除了使用文件讀取的方式,是不可以獲取父級文件夾中的任何內容的。

4.確定根據文件名均勻分配圖片位置的方式—文件尾碼名方式,尾碼名採用"文件名-01"(一號伺服器),尾碼名採用"文件名-02"(二號伺服器),隨機數使用Random來取,隨機數是幾,我們就存在幾號伺服器。經過多次測試100萬次隨機,1,2,3分別得到33W次左右,保障了均衡。在將來拓展的時候,Random隨機數多開啟幾位就行了,不需要文件的移動,也沒有reshash。並且在橫向拓展伺服器數量後,希望保證已有三台伺服器不繼續存儲文件,Random範圍可調。在資料庫或者緩存中我們已經存下了文件名稱,並且其有尾碼名,在為前臺返回圖片URL的時候,只需要根據尾碼名稱,來拼出文件伺服器IP或功能變數名稱。

 第七分鐘按照步驟動手操作

1.部署FileServerApp,其功能是對圖片暴露URL,其實很簡單啦,建立一個Asp.Net空項目,建立出存儲圖片的文件夾。並將該文件夾共用給Web伺服器,細節看最後一節的部署圖。

2.假定你已經實現文件夾共用

3.在IIS站點下新建虛擬目錄,註意物理路徑指向的是網路共用文件夾的網路路徑

4.在Webconfig下  <system.web>增加 <identity impersonate="true" userName="ben" password="yourpwd" /> ,IIS對該虛擬目錄設置身份驗證為 應用程式池標識。

5.使用Server.MapPath可以獲取FileServer2的網路路徑,並使用你的讀寫文件方式對目錄中的文件進行讀寫。

6.寫入文件建議使用Async的方式,非同步IO會在你將IO請求包發給網路驅動或者磁碟驅動後,返回去處理其他事情,在將來的某個時刻,文件寫入成功,狀態機恢復你的上下文並以同步的方式繼續向下執行,能大大提高你Web伺服器的吞吐能力。

 寫在最後的重點

如果還有模糊的地方,看這裡就全明白啦

 

 

 

                                                如果我的點滴分享,對你有點滴幫助,  歡迎點擊下方紅色按鈕關註,我持續輸出分享。也歡迎為你自己,也為我點贊。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 觸發器在之前的項目中, 應用的著實不多, 沒有辦法的時候, 才會去用這個. 因為這個東西在後期並不怎麼好維護, 也容易造成紊亂. 我最近的項目中, 由於資料庫設計(別人設計的)原因, 導致一些最簡單功能, 查詢起來, 都很麻煩和複雜. 牽涉表非常多, 表與表之間又互有部分關係. 我想說, 這是我見過 ...
  • 比如有一個表,我們需要些一個語句像SELECT OtherID, SplitData WHERE SomeID = 'abcdef-.......' , 然後就能返回分割成單獨的行。 原表: | SomeID | OtherID | Data + + + | abcdef-..... | cdef1 ...
  • 第六節 Linux系統基礎優化 標簽(空格分隔):Linux實戰教學筆記 陳思齊 第1章 基礎環境 ![QQ20161227 [email protected] 60.5kB][1] 第2章 使用網易163鏡像做yum源 預設國外的yum源速度很慢,所以換成國內的。 第一步:先備份 mkdir backup ...
  • 我們在 "Linux設備管理(一)_kobject, kset,ktype分析" 一文中介紹了kobject的相關知識,在 "Linux設備管理(二)_從cdev_add說起" 和 "Linux設備管理(三)_匯流排設備的掛接" 舉例介紹了內核中是如何進行設備管理的,併在 "Linux設備管理(四)_ ...
  • 本人在官網下的是這個 CentOS-7-x86_64-DVD-1611.iso ,然後用UltraISO 9.6製作的U盤啟動盤,不過在安裝的時候出現了這個錯誤, 然後也是搜了好久,試了一下,下麵這個方法,是正確可行的.在最後我會解釋原因 第一步: 製作完成之後,將U盤的標簽名字改掉,隨便改成什麼, ...
  • linux許可權位 Linux文件或目錄的許可權位是由9個許可權位來控制,每三位為一組,它們分別是文件屬主許可權、屬組許可權、其他用戶許可權。 r:read可讀許可權,對應數字4; w:write可寫許可權,對應數字2; x:execute執行許可權,對應數字1; -:沒有任何許可權,對應數字0。 #創建一個用戶組 [... ...
  • 前面講到,使用非阻塞方式有許多的缺點。主要是單線程,一直占用CPU資源,其他程式無法執行,造成資源的浪費。只能用於較簡單迴圈的場所。而線程靈活,CPU占用率小,適用於大部分場合。 1.條件變數的使用 條件變數是用來通知共用數據的狀態信息的機制。由於涉及共用數據,所以一般和互斥量配合使用。 1.1創建 ...
  • 一、 前期準備 Ps:工行運營提供開發文檔時,沒有直接提供支付組件ICBCEBankUtil.dll和infosecapi.dll,工行運營說有這個組件在文檔中,但是沒有找到,工行沒有技術提供支持,後來在網上自己找的。 二、 環境搭配 Ps:本人使用的是64位系統,支付組件是放在System64文件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...