前言
本文介紹架構的復雜度來源之一,高性能,
高性能的復雜度主要體現在兩面,一是單機實作高性能帶來的復雜度,一是集群實作高性能帶來的復雜度,
單機的復雜度
單機中最復雜的就是作業系統,作業系統中與性能有關的就是行程和執行緒,
在早期,計算機每執行一個操作前,都需要等待用戶輸入指令,這顯然無比低效,于是,后面有了批處理作業系統,提前將需要執行的指令和資料錄入,形成一個指令清單,這就是我們常說的“任務”,再讓作業系統運行,
不過,CPU的執行速度是很快的,如果發生IO操作,那么CPU就會空閑,于是,為了提高CPU的利用率,出現了行程的概念,一個任務就是一個行程,行程間互不相關,不能相互訪問,并且,作業系統不再將一個行程完全執行完畢,而是給每個行程分配一個執行時間,分時地調度行程來執行,當行程在IO的時候,CPU就可以執行其他行程,從而實作了一個并發的執行,
如果行程間不能通信,就只能等待前一個行程將資料寫進存盤,另一個行程再從存盤中讀取,這樣無疑也是很低效的,于是,后面有了行程通信方式,
多行程讓任務可以并發地處理,但還是存在缺陷,比如,如果想讓一個行程可以執行多個子任務,那么當一個子任務執行時間較長,那么其他任務就會阻塞住,體現在用戶上就是一部分用戶執行其他子任務時卡住,于是,為了解決這個場景,行程下有了執行緒的概念,執行緒共享行程資源,執行緒成為CPU更小的調度單位,在行程中并發調度執行,
單處理機下,多行程只能并發運行,即在一個時間間隔運行,為了實作行程并行執行,后面作業系統有了像對稱多處理器結構,實作了多行程真正并行運行,
集群的復雜度
當單臺服務器擴展到多臺服務器之后,解決復雜度的方式主要有兩種,任務分配和任務拆分,
任務分配
通過任務分配器將用戶的請求任務按指定的分配演算法分配到相應的服務器,每臺服務器有完整的請求處理邏輯,
隨著用戶量增加,首先需要增加服務器,假設原先一臺服務器每秒可以處理5000個請求,增加到兩臺服務器后,理論上每秒可以處理10000個請求,但實際上效果打八折,只能處理8000個請求,

用戶量繼續增加,任務分配器的性能到達瓶頸,需要從單機變成集群方式,

當從單機變成集群后,復雜度就上來了,體現在:
1、不同用戶的請求需要合理地分配到不同的任務分配器,任務分配器又要合理地將請求分配到業務服務器,
2、業務處理器狀態管理和故障管理復雜度都增加,
缺點:
當業務邏輯越來越復雜,單純的任務分配來擴展性能,得到的收益將越來越低,因為單臺服務器的處理性能越來越低,
任務拆分
為了解決任務分配方式下,單臺服務器到達性能瓶頸,可以采用任務拆分的方法,舉例,將一個完整的業務流程拆分成多個處理邏輯,分到多個業務集群中,

優勢在于:
1、單個系統功能簡單越容易實作高性能
2、業務功能解耦,可以針對單個模塊進行擴展,而不影響其他模塊
注意,不是業務拆分的越細越好,業務拆分的太細,可能反而會降低性能,因為太多遠程呼叫需要網路傳輸,將降低回應速率,并且,任務拆分提升的性能也是有限的,需要架構師把控拆分的粒度,讓性能逼近這個極限,
參考
- [1] 從0開始學架構
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/299099.html
標籤:架構設計
