併發與高併發(二十)高併發 應用拆分思路

2022-02-25 12:06:43 字數 2015 閱讀 4749

這一章節我們將講解高併發解決方案中的應用拆分思路,也可以稱之為系統拆分。單個伺服器再優化,它的處理都是有上限的,因此我們採用擴容、快取、訊息佇列等對程式進行優化,這些手段都可行,但還不是全部。隨著專案的需求要求越來越多,應用自然會跟著越來越大,因此呢,架構師設計出了特別容易擴充套件的方案,從整體將乙個應用拆分成多個應用。當然應用也不是隨便拆的,需要根據專案的實情,一般大家會根據應用的功能模組(比如從乙個大的交易系統中拆分出訂單系統和產品系統等等)。

1.拆分圖

圖中我們對**中心進行了又一次拆分(定時任務、流程處理)。

這樣拆分完其實不止是光有好處,其實也是有弊端的:

乙個應用被拆分成多個,它必然會帶來管理上的複雜性,之前管理好乙個應用就可以了,拆分完可能是十幾個或者幾十個,管理成本必然提高,這就帶來伺服器的成本隨之提高。另外,應用多列,勢必會帶來網路的開銷,任何子應用互相間的呼叫必然需要網路開銷。

(1)介紹:dubbo是阿里巴巴公司開源的乙個高效能優秀的服務框架,使得應用可通過高效能的 rpc 實現服務的輸出和輸入功能,可以和 spring框架無縫整合。

(2)結構圖

解釋:consumer:服務消費者

provider:服務提供者

container:服務容器

消費者(consumer)要使用服務提供者(provider)的服務,要通過invoke方法(紅色實線箭頭sync是同步的意思)。呼叫的時候,服務提供者(provider)的位置相對於消費者(consumer)是透明的。同乙個consumer呼叫兩次provider的相同服務,對應的provider是不一定的(就是provider的位置是不確定的)。

我們說乙個完整的流程:首先,provider的start方法啟動,呼叫registry的register方法(通常我們選擇註冊到zookeeper上)。而消費者consumer通過subscribe方法來訂閱服務,如果沒有訂閱到自己想獲得的服務,它會不斷的嘗試訂閱。新的服務如果註冊到了registry註冊中心,註冊中心會通過notify方法通知到消費者。monitor在這裡是乙個監控的角色,圖中紅色虛線代表的是consumer和provider是通過非同步的方式傳送訊息給monitor。monitor在整個架構中是可選的,使用monitor的話需要配置,如果不配置或者出問題,它會掛掉,但不影響服務的呼叫。比如以上的**系統中consumer就是拆分後剩下的部分,而provider就是拆分的子應用。

(1)介紹:spring cloud是一系列框架的有序集合。它利用spring boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等,都可以用spring boot的開發風格做到一鍵啟動和部署。spring cloud並沒有重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過spring boot風格進行再封裝遮蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包。

(2)結構圖

(3)我們通過更加實際的例子理解一下spring cloud的具體特徵。

官方理解是它是一些獨立的服務共同組成整個系統,每個服務有獨立的業務開發,他們是分布式管理的,非常強調隔離性;是按照業務而不是技術來劃分元件的,它是有生命的產品而不是專案;自動化運維;具有高度的容錯性;可以快速的演化和迭代。

微服務通常是從重寫乙個模組開始的,要想把整個特別大的應用重寫,是由很大的風險的,也不一定有這個必要。我們向微服務遷移的時候,通常從耦合度最低的模組開始,對擴充套件性要求最高的模組開始,把他們乙個乙個剝離出來。

圖中的api gateway並不是為了重用**,而是減少客戶端和服務間的往來。微服務通常是直接面對客戶的。

(4)要想實際使用微服務,我們需要解決四個問題

高併發與高可用

事發事中 事後高併發 增加處理人手 事前 副本 隔離 配額 提前預案 探知 事發 監控 報警 事中 降級 回滾 應急預案,fail 系列 事後 覆盤 思考 技改 fail 系列 當出現下游呼叫失敗時,我們一般有幾種處理方式 failretry,即失敗重試,需要配合退避時間,否則馬上重試不一定會有效果...

高併發 高併發測試筆記

問 高併發測試 一般你們用什麼工具來模擬 10萬級別的客戶端併發?在普通的電腦上可以模擬嗎 10萬併發需要至少10萬的套接字,套接字在核心中占用記憶體100000 6k 2 1g記憶體,系統需要能夠開啟10w個fd。一般的系統能夠能模擬 問 預設每個程序只能開1024個fd,修改後最大可以10w,那...

高併發 高可用

高併發 提高系統併發能力的方法主要有兩種 前者垂直擴充套件可以通過提公升單機硬體效能,或者提公升單機架構效能,來提高併發性,但單機效能總是有極限的,網際網路分布式架構設計高併發終極解決方案還是後者 水平擴充套件。網際網路分層架構中,各層次水平擴充套件的實踐又有所不同 1 反向 層可以通過 dns輪詢...