-
1 # 未來相對論
-
2 # IT人社
對於這個問題,先來了解下高訪問量、高併發單定義及場景:我們可以直接的理解成一個伺服器(TCP 服務程式的地址)它從理論上能接受多 少個併發連線,也就是併發的連結個數,同時請求同一伺服器上的服務,比如同時請求百度的搜尋,一個聊天室內即時訊息 的同時推送等? 什麼是百萬級的併發亮,比如現今流行的滴滴打車,每天接單量均超過百萬,司機發單,接單,系統要進行 輸入、輸出、推送、儲存,併發量甚至讓千萬。
系統在高併發量下執行需消耗計算機大量的系統資源,如CPU、記憶體,如果並非請求或訪問超出了伺服器的承受能力的話,輕 則導致伺服器拋棄一部分請求,重則導致伺服器資源耗盡, DOWN機,甚至使整個應該系統癱瘓。所以針對高併發量進行系統設計,其系統架構設計就是重中之重。
筆者認為設計架構主要可以從下面兩個方面來考慮著手:
一,服務體系硬環境最佳化
1,運營的伺服器
如果是對於支援百萬級使用者併發訪問的WEB服務開發設計而言,可以給單個PC伺服器可以配置兩個到四個高效能獨立的4 核CPU,安裝高新能的網絡卡。
如果單臺伺服器還是無法承載大量訪問所帶來的壓力,所以可以採用伺服器叢集技術,用N臺伺服器進行分流,對於每次 訪問採取負載均衡策略,被分配到不同的伺服器來處理請求。
2, 負載均衡的硬體
一種是透過硬體來實現,直接在伺服器和外部網路間安裝負載均衡硬體裝置,常見硬體有F5,NetScaler、Radware和 Array等商用的負載均衡器,效能上優於軟體方式,但是它們是成本昂貴。
二,服務體系軟環境環境最佳化
1,負載均衡的軟體
負載均衡也可以透過軟體來實現,常見的軟體有LVS、Nginx、Apache等,它們都是具有基於Linux系統並且開源的負載均 衡策略,都支援使用者請求的多CPU並行處理、靜態頁面臨時檔案系統儲存、記憶體資料庫支援等技術。
2,系統開發上的最佳化
程式碼程式設計上的最佳化,對於應用系統進行前端最佳化外,效能上還要從磁碟IO、資料庫訪問、業務演算法等方面進行最佳化。比如 對大資料的實現檢索最佳化。
3,伺服器安全性配置
採用採用使用者態協議棧,加入DDos攻擊的防禦,系統要做安全隔離,因為前端節點都是直接和使用者互動,需要從系統軟配 置上防範各種惡意攻擊。
對於技術方案,在此,筆者也只能做個介紹性的引入,如要做詳細設計,眾所周知那是要出成冊才能成方案。
筆者最後推薦樓主也採用阿里巴巴旗下的阿里雲體系,拿來用之,目前國內市場,伺服器生態鏈以阿里系做的最好,可以去深挖。
回覆列表
首先要結合具體的業務場景,不根據業務就雲設計就是在耍流氓。
業務場景首先你要確定你所架構的系統服務於什麼業務。假如我們現在是一個小創業公司,註冊使用者就20萬,每天活躍使用者就1萬,每天單表資料量就1000,然後高峰期每秒鐘併發請求最多就10。但是你要考慮到後面註冊使用者數達到了2000萬!每天活躍使用者數100萬!每天單表新增資料量達到50萬條!高峰期每秒請求量達到1萬。
靜態資源大寬頻、CDN、快取(頁面快取、物件快取),WEB伺服器快取等N級分散式快取,Redis、Memcached快取叢集。
動態資源計算:多組伺服器,負載均衡等技術控制流量。
儲存:儲存這裡就比較麻煩,按照KV儲存簡單的資源,然後在計算部分進行整合。真的沒辦法做KV的,採用跨庫索引來做。單機儲存數量要合理,不能太多。還有就是事務性的問題,解決方案就是BASE思想或者採用日誌方式。
縱向拆分、水平擴充套件系統按照模組功能縱向拆分,再水平擴充套件,抽象服務層利用各種中介軟體完善,最佳化JVM應用伺服器。
訊息中介軟體用mq解決穩定性。將耗時比較長或者耗費資源的請求排隊,非同步處理,減輕伺服器壓力增加穩定性
資料庫關係型、非關係型資料庫上最牛比SSD硬碟,分庫分表,讀寫分離,讀的流量多時還要增加從庫提高IO效能。每秒1萬請求到5臺數據庫上,每臺數據庫就承載每秒2000的請求,相應的壓力也就會減少。
SQL語句避免跨表查詢,最佳化好儲存過程,此時注意儲存過程利用好了是把利劍,利用不好就成為了累贅。
負載均衡負載均衡由多種實現方式,一種是在硬體上的,常用軟體由F5、NetScaler、Radware和Array等商用的,但是價格較昂貴。另外一種就是軟體的,常見的軟體有LVS、Nginx、Apache等,它們是基於Linux系統並且開源的負載均衡策略。
簡單架構圖結語系統架構中需要注意的點太多,具體業務也不盡相同。實現方案也有多種,此處只提供一個思路。