摘要:集群擴展當有多個服務提供方時,將多個服務提供方組織成一個集群,并偽裝成一個提供方。目錄服務的頭部注釋中,引用做了一個介紹。路由規則負責從多個中按路由規則選出子集,比如按照讀寫分離應用隔離等。若處理完畢則計數器減。
1. Cluster-集群擴展
當有多個服務提供方時,將多個服務提供方組織成一個集群,并偽裝成一個提供方。已知的實現如下,
1-1. FailoverCluster(默認的)失敗轉移,當出現失敗,重試其它服務器,通常用于讀操作,但重試會帶來更長延遲。
1-2. AvailableCluster獲取可用的調用。遍歷所有Invokers判斷Invoker.isAvalible,只要一個有為true直接調用返回,不管成不成功。
1-3. BroadcastCluster挨個調用集群中所有的providers,通常用于通知所有的服務提供者更新某些資源,例如緩存、日志。
1-4. FailbackCluster失敗自動恢復,后臺記錄失敗請求,定時重發,通常用于消息通知操作。
1-5. FailfastCluster快速失敗,只發起一次調用,失敗立即報錯,通常用于非冪等性的寫操作。
1-6. ForkingCluster并行調用,只要一個成功即返回,通常用于實時性要求較高的操作,但需要浪費更多服務資源。
1-7. MergeableCluster按組合并返回結果,比如菜單服務,接口一樣,但有多種實現,用group區分,現在消費者需從每種group中調用一次返回結果,合并結果返回,這樣就可以實現聚合菜單項。
2. Directory-目錄服務Directory.java的頭部注釋中,引用http://en.wikipedia.org/wiki/... service做了一個介紹。directory service有點陌生,但是name service應該比較熟悉吧,就是命名服務。 每一個name service都映射了網絡中的一種資源。
這里面一個Directory就代表一個provider提供的List
Cluster將Directory中的多個Invoker偽裝成一個Invoker,對上層透明,偽裝過程包含了容錯邏輯,調用失敗后,重試另一個。
注冊目錄服務,它的Invoker集合是從注冊中心獲取的,比如消費方要調用某遠程服務,會向注冊中心訂閱這個服務的所有服務提供方,訂閱時和服務提供方數據有變動時,會回調消費方的回調接口并傳入服務的所有提供方的url地址,然后將urls地址轉為為invokers,也就是refer遠程服務。
2-2. StaticDirectory靜態目錄服務, 它的所有Invoker通過構造函數傳入。
3. Router-路由規則Router 負責從多個Invoker中按路由規則選出子集,比如按照讀寫分離、應用隔離等。
4. LoadBalance-負載均衡LoadBalance 負責從多個Invoker中選出具體的一個用于本次調用,選的過程包含了負載均衡算法,調用失敗后,需要重選。
4-1. RandomLoadBalance(默認的)隨機,按權重設置隨機概率。
在一個截面上碰撞的概率高,但調用量越大分布越均勻,而且按概率使用權重后也比較均勻,有利于動態調整提供者權重。
輪循,按公約后的權重設置輪循比率。
存在慢的提供者累積請求問題,比如:第二臺機器很慢,但沒掛,當請求調到第二臺時就卡在那,久而久之,所有請求都卡在調到第二臺上。
最少活躍調用數,相同活躍數的隨機,活躍數指調用前后計數差,使慢的機器收到更少。
例如,每個服務維護一個活躍數計數器。當A機器開始處理請求,該計數器加1,此時A還未處理完成。若處理完畢則計數器減1。而B機器接受到請求后很快處理完畢。那么A,B的活躍數分別是1,0。當又產生了一個新的請求,則選擇B機器去執行(B活躍數最小),這樣使慢的機器A收到少的請求。
一致性Hash,相同參數的請求總是發到同一提供者。
當某一臺提供者掛時,原本發往該提供者的請求,基于虛擬節點,平攤到其它提供者,不會引起劇烈變動。
算法參見:http://en.wikipedia.org/wiki/...。
缺省只對第一個參數Hash,如果要修改,請配置
缺省用160份虛擬節點,如果要修改,請配置
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71571.html
摘要:英文全名為,也叫遠程過程調用,其實就是一個計算機通信協議,它是一種通過網絡從遠程計算機程序上請求服務而不需要了解底層網絡技術的協議。 Hello,Dubbo 你好,dubbo,初次見面,我想和你交個朋友。 Dubbo你到底是什么? 先給出一套官方的說法:Apache Dubbo是一款高性能、輕量級基于Java的RPC開源框架。 那么什么是RPC? 文檔地址:http://dubbo.a...
摘要:目前首個測試版是針對環境的,社區宣稱在未來幾個月內會為虛擬機和等其他環境增加支持。查看下在上的更新時間,截止年月日所有項目均更新于小時內。核心項目最近更新于一個月乃至數月前。所有項目均更新于分鐘內。目前對比來看,則顯得稍遜下來。 showImg(https://segmentfault.com/img/remote/1460000010953149); 在 Kubernetes 容器云...
摘要:架構中有兩個主要角色服務提供者和服務使用者。服務提供者在啟動時,向注冊中心注冊自己提供的服務。負載平衡旨在優化資源使用,最大化吞吐量,最小化響應時間,并避免任何單個資源的過載。 本文來自于我的個人主頁:Apache Dubbo,轉載請保留鏈接 ;) 在2011年10月27日,阿里巴巴開源了自己的SOA服務化治理方案的核心框架Dubbo,服務治理和SOA的設計理念開始逐漸在國內軟件行業中...
摘要:服務提供者代碼上面這個類會被封裝成為一個實例,并新生成一個實例。這樣當網絡通訊層收到一個請求后,會找到對應的實例,并調用它所對應的實例,從而真正調用了服務提供者的代碼。 這次源碼解析借鑒《肥朝》前輩的dubbo源碼解析,進行源碼學習。總結起來就是先總體,后局部.也就是先把需要注意的概念先拋出來,把整體架構圖先畫出來.讓讀者拿著地圖跟著我的腳步,并且每一步我都提醒,現在我們在哪,我們下一...
摘要:服務自動注冊與發現,不再需要寫死服務提供方地址,注冊中心基于接口名查詢服務提供者的地址,并且能夠平滑添加或刪除服務提供者。調用關系說明服務容器負責啟動,加載,運行服務提供者。服務提供者在啟動時,向注冊中心注冊自己提供的服務。 上一篇我們介紹《構建dubbo分布式平臺-maven構建ant-utils工具包的構建》,從今天開始,我們進入分布式服務項目的核心教程,真正使用dubbo實現分布...
閱讀 2671·2023-04-25 18:10
閱讀 1606·2019-08-30 15:53
閱讀 2788·2019-08-30 13:10
閱讀 3216·2019-08-29 18:40
閱讀 1128·2019-08-23 18:31
閱讀 1201·2019-08-23 16:49
閱讀 3400·2019-08-23 16:07
閱讀 877·2019-08-23 15:27