隨著網絡流量爆發(fā)式增長,幾百人維護一個項目將是一個可怕的噩夢,業(yè)務拆分勢在必行。拆分的業(yè)務形成一個個獨立的系統(tǒng),系統(tǒng)間的協(xié)調又變成了一個棘手的問題,所以維護這些系統(tǒng)間協(xié)調關系的分布式環(huán)境組件將發(fā)揮至關重要的作用! ∮捎诓鸱趾蟮南到y(tǒng)部署于不同機器的不同集群之中,系統(tǒng)間的協(xié)作要靠通信來解決,所以分布式環(huán)境組件必須解決數據流的問題。根據不同的場景,數據流又分構建于遠程調用框架(如RMI、Hessian、ICE、JNDI實現等)之上的即時調用數據流,構建于消息中間件之上的異步消息(持久或非持久)數據流,構建于數據拆分組件(分庫分表、讀寫分離等)之上的存儲數據流,構建于集群系統(tǒng)控制(集群動態(tài)、配置推送,如PubSubHubBub)的集群協(xié)調數據流,以及構建于監(jiān)控系統(tǒng)之上的日志及控制數據流。在這些數據流的傳輸過程中需要有負載均衡和容錯的支持,這些數據流總的來說又分為業(yè)務數據流和控制數據流,業(yè)務數據流傳輸業(yè)務數據,控制數據流可以將一個個小的集群系統(tǒng)連接成一個大的集群系統(tǒng),并使這個集群系統(tǒng)的運行狀態(tài)直觀的展示于眼前,同時還可以向這個集群系統(tǒng)發(fā)送控制指令直接干預它。
通信服務框架提供系統(tǒng)間即時的同步和異步調用,需要具備負載均衡和容錯的機制,解決的是一個業(yè)務集群調用另一個業(yè)務集群的問題,根據不同的集群方案,業(yè)務集群內部各臺機器內部的狀態(tài)又分為可共享和不可共享兩種,一般不建議集群內部直接通過通信來共享內部狀態(tài),最好通過集中式緩存或DB來共享狀態(tài)。
消息中間件提供異步的持久和非持久消息的發(fā)布和訂閱,持久消息理論上應當具備絕對的可靠性。此系統(tǒng)解決的是將網站業(yè)務流程中非核心的業(yè)務流程剝離出來,使用異步消息的形式將業(yè)務解耦,提高主業(yè)務流程的響應速度,同時解決的另一個問題是通過可靠的存儲和傳輸,保證多個業(yè)務系統(tǒng)數據的最終一致。
分布式數據層提供分庫分表、讀寫分離、Sql監(jiān)控以及容災容錯的功能。這個組件不僅僅可以解決數據的拆分、讀寫分離問題,還可以解決數據的多寫,多個Slave讀取的負載均衡及容錯,多機房的容災,數據庫異常的告警等多種功能,如果單獨部署服務的話還可以控制數據庫連接數。
中轉樞紐提供服務的發(fā)布和調用關系以及消息的發(fā)布和訂閱關系,連接通信服務框架和消息中間件的各個客戶端和服務端,感知一個個業(yè)務集群中的每臺機器及服務,組成一個大的集群,協(xié)調這個大集群中服務的對應關系。如果這個樞紐對業(yè)務開放的話還可以推送業(yè)務配置信息。
監(jiān)控中心提供對前面四個組件各種數據的收集和分析,實時展示整個大集群各個集群和服務目前的運行狀況和相互間的協(xié)調關系,并進行各種橫向和縱向的對比為決策提供依據,并可以向集群內的機器或服務發(fā)出控制指令,直接干預集群間的協(xié)調關系。如果對業(yè)務開放的話還可以監(jiān)控業(yè)務數據和進行業(yè)務控制干預。
先寫這么多了,后續(xù)將會寫業(yè)務和數據拆分方面的,以及通信框架、消息中間件、分布式數據層、中轉樞紐和監(jiān)控中心的具體實現