一、分布式服務框架其他組成
上一節《分布式服務框架(一)》講述了RPC發展到SOA的過程,常見的SOA服務治理方案,以及分布式系統中常見的專業名詞,這部分其實只是涉及到了一個分布式系統架構的輪廓,真正一個系統的構建,還需要很多模塊互幫互助,協同工作和其他相關平台的搭建。
一個大型,穩健,成熟的分布式系統的背后,往往會涉及眾多支撐運作的系統,我們統稱這部分系統為分布式系統架構中的基礎設施,下面將介紹一些常見甚至必用的基礎設施。
(1)CI/CD平台:即持續集成/持續交付,持續集成是指軟件個人研發的部分向軟件整體部分交付,頻繁進行集成以便更快地發現其中的錯誤,持續交付在持續集成的基礎上,將集成后的代碼部署到更貼近真實運行環境的「類生產環境」(此解釋來自https://blog.csdn.net/eugenelee2096/article/details/73332615)說得這么復雜,無非就是開發代碼過程中持續的提交,然后進行持續的代碼掃描,單元測試,編譯構建,完成如上流水線后迅速的部署到目標環境上允許的過程。
(2)ConfigCenter:即配置中心,為各應用的所有環境提供了一個中心化的外部配置,為服務端和客戶端提供了分布式系統的外部化配置支持。
(3)Web Portal/IDE:集成應用配置,管理平台的統一入口和開發IDE。
(4)Deploy Center:部署中心,所有的服務,無論是公共SAAS服務還是業務服務,開發完成后都需部署到對應的區域和環境上,部署中心提供了發布應用包的平台供開發者進行發包部署操作,或提供接口供CI/CD的接入。
(5)公共SAAS:即整個分布式系統中公用的服務,常見的有權限服務,數據字典,國際化等
(6)服務注冊中心:服務注冊中心,是分布式服務系統中的一個重要組成模塊,管理Provider的Manager,在實際的運行環境中,服務注冊中心Registry被動通知或Consumer主動詢問,在Provider有節點宕機或新增節點時,客戶端也可實時感知到,從而避免了某個Provider被無限調用或是無限閑置
(7)Maven,Git倉庫管理:Maven倉庫用來存儲和管理開發和部署應用過程中所需的JAR或ZIP文件,Git用來存儲開發者代碼,提供了代碼合成,分支管理等功能。
(8)日志中心:服務運行過程中,不可避免的會出現各種問題,如何快速定位並分析清楚這些問題的根因,並提出有效的解決方案,日志在這其中扮演了很重要的角色,日志中心通過收集Consumer或Provider產生的日志,為用戶查詢下載日志提供了可視化平台。
(9)監控中心:接收來自Consumer和Provider異步上報的性能監控數據,對有風險的節點發出告警
(10)事件中心:事件中心是高度可縮放的數據流式處理平台和事件引入服務,可以處理和存儲分布式軟件和設備生成的事件、數據或遙測
二、完整的分布式系統設計
以上所述基礎設施都是分布式系統中重要或不可缺少的部分,怎么將這些基礎設施整合到一起,使整個分布式系統能夠協調運作,下面展示了個人對於這方面的理解。
開發者接入到對應的IDE開發平台,選擇對應的產品(Maven或Gradle)構建工程,通過分支管理等措施的落實,進行代碼的編寫,提交,合並,之后提交CI平台進行代碼檢查,編譯構建,單元測試並部署到部署中心,也可脫離CI進行手動部署。
不管開發者開發的是公共SAAS還是業務服務,都會通過部署中心部署到對應的環境區域,業務服務從配置中心拉取應用配置信息,將服務注冊發布到注冊中心,並可任意調用環境中周邊的公共SAAS服務。
服務在運行過程中,將日志以異步消息的形式上傳到日志中心,此處也可由日志中心進行主動收集。同時將性能等方面的數據上報到監控中心,監控中心發現異常后,會對用戶發出告警。監控中心還包括一個事件上報模塊,收集容器的運行狀況和產生的事件等數據,對服務的運行作出必要的決策。