<xmp id="isueg"><nav id="isueg"></nav>
  • <dd id="isueg"><nav id="isueg"></nav></dd>
    <xmp id="isueg">
  • <center id="isueg"></center>
    <nav id="isueg"><code id="isueg"></code></nav>
    專注Java教育12年 全國咨詢/投訴熱線:400-8080-105

    首頁 hot資訊 高并發架構詳解

    高并發架構詳解

    更新時間:2021-08-13 11:13 來源:動力節點 瀏覽114次

    高并發架構詳解

    1.什么是高并發

    高并發是互聯網分布式系統架構設計中必須考慮的因素之一,通常意味著系統通過設計可以同時并行處理多個請求。

    一些常用的高并發指標有響應時間(Response time)、吞吐量(throughput)、每秒查詢率QPS(query/Second)、并發用戶數等。

    響應時間:系統響應請求的時間。比如系統處理一個HTTP請求需要200ms,而這200ms就是系統的響應時間。

    吞吐量:單位時間內處理的請求數。

    QPS:每秒響應請求數。在互聯網領域,這個指標并不像吞吐量那么明顯。

    并發用戶數:同時主機正常使用系統功能的用戶數。例如,一個即時通訊系統,在一定程度上在線時,代表了系統的并發用戶數。

    2.如何提升系統的并發能力

    Internet分布式架構設計,提高系統并發能力的方式,主要有兩種方法:縱向擴展(Scale up)和橫向擴展(Scale out)。

    縱向擴展:提升單機處理能力。垂直擴展有兩種方式:

    (1)提升單機硬件的性能,例如:增加32核等CPU核數,升級百萬兆等更好的網卡,升級SSD等更好的硬盤,擴展硬盤容量如2T,系統內存擴展如128G;

    (2)提高單機架構的性能,例如:使用緩存減少IO次數,使用異步增加單服務吞吐量,使用無鎖數據結構減少響應時間;

    在互聯網業務高速發展的初期,如果預算不是問題,強烈建議采用“增強單機硬件性能”的方式來提高系統并發性,因為公司的策略往往是開發業務時鐘,而“提高單機硬件性能”往往是最快的方法。

    無論是提升單機硬件的性能,還是提升單機架構的性能,都存在一個致命的問題:單機的性能總是有限度的。所以互聯網分布式架構設計高并發的終極方案還是橫向擴展。

    橫向擴展:只要增加服務器數量,就可以線性擴展系統性能。橫向擴展是系統架構設計的要求,如何在架構的各個層次進行橫向設計,互聯網公司架構的通用層次擴展實踐是本文的主要內容。

    3.通用互聯網分層架構

    常見的互聯網分布式架構,如上,分為:

    (1)客戶端層:典型的調用者是瀏覽器瀏覽器或移動應用程序

    (2)反向代理層:系統入口,反向代理

    (3)站點應用層:實現核心應用邏輯,返回HTML或JSON

    (4)服務層:如果是服務的實現,就有這一層

    (5)data-cache層:緩存加速Access Storage

    (6)Data-database層:數據庫固化數據存儲

    整個系統各個層次的層次擴展,以及如何執行的不同。

    4.分層橫向擴展架構實踐

    反向代理層的橫向擴展

    反向代理層的橫向擴展是通過“DNS輪詢”實現的:一個域名的dns-server配置了多個解析IP,每個DNS解析請求訪問dns-server,都會輪詢返回這些IP。

    當Nginx成為瓶頸時,只要增加服務器數量,增加新的Nginx服務部署,增加一個外網IP,就可以擴展反向代理層的性能,實現理論上的無限高并發。

    站點層的水平延伸

    站點層的橫向擴展是通過“Nginx”實現的。通過修改nginx.conf,可以設置多個Web后端。

    當Web后端成為瓶頸時,只要增加服務器數量,部署新的Web服務,在Nginx配置新的Web后端,就可以擴展站點層的性能,讓理論上無限的高并發。

    服務層橫向延伸

    服務層的橫向擴展是通過服務連接池實現的。

    當站點層通過rpc-client調用下游服務層Rpc-server時,Rpc-client中的連接池建立到下游服務的多個連接,當服務成為瓶頸時,只要增加服務器數量,新的服務部署后,通過在 Rpc-client 建立新的下游服務連接,可以擴展服務層的性能,實現理論上的無限并發。如果需要優雅地進行服務層自動擴展,這里可能需要配置Heart Service自動發現功能支持。

    數據層的橫向擴展

    在數據量大的情況下,數據層(緩存、數據庫)涉及到數據的橫向擴展,將存儲在一臺服務器上的數據(緩存、數據庫)橫向拆分到不同的服務器上,以達到擴展的目的系統性能。

    互聯網數據層有幾種常見的水平拆分方式,以數據庫為例:

    按范圍水平拆分

    對于每個數據服務,存儲了一系列數據,如上例所示:

    USER0庫,存儲uid范圍1-1kw

    User1庫,存儲uid范圍1kw-2kw

    該計劃的好處是:

    (1)規則簡單,service只判斷UID范圍就可以路由到對應的存儲service;

    (2)良好的數據均衡;

    (3)比較容易擴展,可以隨時添加一個uid[2kw,3kw]數據服務;

    缺點是:

    (1)請求的負載不一定均衡,一般來說,新注冊的用戶會比老用戶更活躍,大范圍的服務請求壓力會更大;

    通過 Hash 水平分割

    對于每個數據庫,將一些數據存儲在一個鍵值的散列中。

    USER0 庫,存儲偶數 UID 數據

    User1 庫,存儲奇數 UID 數據

    該計劃的好處是:

    (1)規則簡單,服務只能通過UID hash路由到對應的存儲服務;

    (2)良好的數據均衡;

    (3)請求的統一性較好;

    缺點是:

    (1)不容易擴展,擴展一個數據服務,hash方法改變,可能需要進行數據遷移;

    需要注意的是,通過水平分割來增強系統性能的方式與主從同步讀寫分離有著根本的區別。

    通過拆分水平擴展數據庫性能:

    (1)每臺服務器存儲的數據量為總量的1/n,所以單機性能也會提升;

    (2)N個服務器數據不相交,服務器上收集的數據是完整的數據集;

    (3)數據拆分到n臺服務器,理論上讀性能擴展了n倍,寫性能已經擴展了N倍(實際上遠遠不止n倍,因為單機數據數量為原來的1 /n);

    通過主從同步讀寫分離擴展數據庫性能:

    (1)每臺服務器存儲的數據量與總量相同;

    (2)N臺服務器數據相同,都是全集;

    (3)理論上讀性能擴大了n倍,寫還是單點,寫性能不變;

    緩存層的水平拆分與數據庫層的水平拆分類似,多采用范圍拆分和哈希的形式,不再展開。

    5.概括

    高并發是互聯網分布式系統架構設計中必須考慮的因素之一,通常意味著系統通過設計可以同時并行處理多個請求。

    提高系統并發能力主要有兩種方式:縱向擴展(Scale up)和橫向擴展(Scale out)。前者縱向擴展可以增加單機硬件的性能,或者提高單機架構的性能來提高并發,但是單機性能總是有限的,互聯網分布式架構設計高并發終極方案還是后者:橫向擴張。

    在互聯網分層架構中,不同層次橫向擴展的做法是不同的:

    (1)反向代理層可以通過“DNS輪詢”的方式橫向擴展;

    (2)站點層可以通過nginx橫向擴展;

    (3)可以通過服務連接池橫向擴展服務層;

    (4)數據庫可以根據數據范圍,或者數據散列的方式進行橫向擴展;

    每層實施橫向擴展后,可以通過增加服務器數量的方式提高系統性能,使理論性能無限。

    以上就是動力節點小編介紹的"什么是消息隊列",希望對大家有幫助,想了解更多可查看Java在線學習。動力節點在線學習教程,針對沒有任何Java基礎的讀者學習,讓你從入門到精通,主要介紹了一些Java基礎的核心知識,讓同學們更好更方便的學習和了解Java編程,感興趣的同學可以關注一下。

    提交申請后,顧問老師會電話與您溝通安排學習

    免費課程推薦 >>
    技術文檔推薦 >>

    返回頂部
    亚洲AV女人的天堂在线观看