1、RPC算法
RPC(Remote Process Call),即遠程服務調用,被普遍地應用在不少企業應用中,是早期主要的服務治理方案,其流程較爲簡單,客戶端consumer攜帶參數發送RPC請求到服務提供方provider,provider根據參數路由到具體函數,方法,並將執行得到的結果返回,至此一次RPC調用完成。架構
隨着業務的發展,大數據時代的到來,服務提供方的壓力也日益增大,單機應用的處理能力不管在軟件,硬件上都受到限制,provider也不可能一直無限擴容,即便擴容,也存在着不少問題,即服務的路由,和Consumer的負載均衡問題。所以,分佈式服務架構應運而生,RPC發展到必定階段思考的變革,成爲了分佈式服務,雲計算的計算機基礎。併發
2、SOA負載均衡
因爲簡單的RPC調用已經不能隨着時代發展知足需求,所以複雜的業務邏輯對於分佈式應用架構體系的需求愈發強烈,業務但願本身的服務是分佈式部署的,請求是分流的,對數據的操做是能讀寫分離的,同時能屏蔽許多複雜須要本身編寫的底層服務,藉助已有的公共服務,去快速的構建本身的應用,下降人力開發維護的成本和提升應用交付的效率,基所以,基於分佈式服務思想的SOA(Service-Oriented Architecture)成了新的受追捧的架構。常見的SOA服務調用流程圖以下: 框架
3、業界服務治理方案異步
業界的互聯網巨頭公司,都有屬於本身的分佈式服務框架,如阿里巴巴的Dubbo,HSF,騰訊的Tars,京東的JSF,新浪的Motan,都已是業界很是成熟的解決方案,其中開源的Dubbo和Motan受到了廣大開發者的研究對象。分佈式
縱觀這些服務框架,設計的基本思路都如上圖,無非涉及provider發佈註冊,consumer訂閱,調用發起,負載均衡,服務分流和監控等模塊,並在此基礎上增長了不少玩法,造成了各具特點的分佈式服務框架設計,下面就Dubbo,JSF,Motan的設計作下簡單的介紹。ide
(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訂閱與接受推送,以後發起調用。
4、分佈式服務框架主要模塊名詞釋義
不管是那種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異步上報的性能監控數據,對有風險的節點發出告警