分布式服務框架(一)


一、RPC

  RPC(Remote Process Call),即遠程服務調用,被廣泛地應用在很多企業應用中,是早期主要的服務治理方案,其流程較為簡單,客戶端consumer攜帶參數發送RPC請求到服務提供方provider,provider根據參數路由到具體函數,方法,並將執行獲得的結果返回,至此一次RPC調用完成。

  

  隨着業務的發展,大數據時代的到來,服務提供方的壓力也日益增大,單機應用的處理能力無論在軟件,硬件上都受到限制,provider也不可能一直無限擴容,即使擴容,也存在着很多問題,即服務的路由,和Consumer的負載均衡問題。因此,分布式服務架構應運而生,RPC發展到一定階段思考的變革,成為了分布式服務,雲計算的計算機基礎。

二、SOA

  由於簡單的RPC調用已經不能隨着時代發展滿足需求,因此復雜的業務邏輯對於分布式應用架構體系的需求愈發強烈,業務希望自己的服務是分布式部署的,請求是分流的,對數據的操作是能讀寫分離的,同時能屏蔽許多復雜需要自己編寫的底層服務,借助已有的公共服務,去快速的構建自己的應用,降低人力開發維護的成本和提高應用交付的效率,基因此,基於分布式服務思想的SOA(Service-Oriented Architecture)成了新的受追捧的架構。常見的SOA服務調用流程圖如下: 

  

三、業界服務治理方案

  業界的互聯網巨頭公司,都有屬於自己的分布式服務框架,如阿里巴巴的Dubbo,HSF,騰訊的Tars,京東的JSF,新浪的Motan,都已經是業界非常成熟的解決方案,其中開源的Dubbo和Motan受到了廣大開發者的研究對象。

  縱觀這些服務框架,設計的基本思路都如上圖,無非涉及provider發布注冊,consumer訂閱,調用發起,負載均衡,服務分流和監控等模塊,並在此基礎上增加了很多玩法,形成了各具特色的分布式服務框架設計,下面就Dubbo,JSF,Motan的設計做下簡單的介紹。

  (1)Dubbo:下圖是Dubbo在服務治理方面的架構設計

  初始化階段:部署在Container的Provider啟動后向服務中心Registry發布並注冊自己的服務,客戶端Consumer初始化時即向Registry訂閱自己想要的服務,同時Registry對Consumer保持着一個長連接,當訂閱的服務新增或減少節點時,會及時通知到客戶端更新(此過程是異步進行的,不會影響Consumer的主流程),如此一來,客戶端Consumer便有了Provider的所有實時信息,便可以發起服務調用了。

  invoke階段:客戶端Consumer從獲得的所有Provider列表中通過負載均衡等策略選出最適合調用的服務提供者Provider並發起同步調用。

  Monitor階段:Consumer和Provider通過異步的方式向監控中心上報自己的需要被監控的數據。

  

  (2)JSF:下圖是JSF在服務治理方面的架構設計

  初始化階段:Provider啟動后向服務注冊中心發布注冊自己的服務

  invoke階段:與Dubbo不同的是,JSF的注冊中心不向Consumer推送Provider實時數據,而是在發起調用時Consumer向注冊中心詢問並獲得對應的Provider,然后組織匹配JSF協議的報文發起調用。

  Monitor階段:Provider定期向監控中心發送性能統計數據,同時Provider還會上報事件給事件中心。

  

  (3)Motan:Motan是有名的輕量級服務框架,代碼質量很高,下圖是Motan在服務治理方面的架構設計

  Motan的服務治理設計與Dubbo十分的相似,都是Provider發布注冊,Consumer訂閱與接受推送,之后發起調用。

  

四、分布式服務框架主要模塊名詞釋義

  無論是那種SOA的架構設計,都離不開幾個模塊的功能,即Provider,Consumer,Registry,Gateway,負載均衡,服務分流,監控等,通過上述所講,應該對這些功能模塊有了初步的認識,下面就這些名詞再作下介紹

    (1)Provider:服務提供者,無論是業務服務,還是一個系統中公用的SAAS,都屬於Provider

  (2)Consumer:即發起調用的客戶端

  (3)Registry:服務注冊中心,是分布式服務系統中的一個重要組成模塊,管理Provider的Manager,在實際的運行環境中,服務注冊中心Registry被動通知或Consumer主動詢問,在Provider有節點宕機或新增節點時,客戶端也可實時感知到,從而避免了某個Provider被無限調用或是無限閑置

  (4)Gateway:網關也是分布式服務框架中不可或缺的部分,每種系統與框架都有自己的一套協議,當異構系統互相調用時,網關的作用即顯現出來,Gateway接受各種外部HTTP請求,完成相應的權限校驗,報文適配,路由轉發到對應的Provider,再將Provider返回的結果傳遞給異構系統的Consumer,完成異構系統的互相調用

  (5)負載均衡,服務分流:Consumer從Registry獲得具體的Provider列表后,如何選取合適的Provider,取決與一定的負載均衡算法,常見的算法有輪詢法,隨機法,源地址哈希,加權輪詢,加權隨機等

  (6)監控:接收來自Consumer和Provider異步上報的性能監控數據,對有風險的節點發出告警


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM