dubbo 學習筆記

服務接口
<dubbo:reference/>消費接口
<dubbo:consumer/>消費者
<dubbo:provider/>提供者




----------集羣容錯模式-------------


屬性:cluster 缺省 failover
作用:性能調優
可選:failover/failfast/failsafe/failback/forking
1\failover 失敗自動切換,出現失敗,重試其他服務器, 通常用於讀操作,可通過retries="2" 
來設置重試次數(不含第一次)
<dubbo:service cluster="failover" retries="2" />
或<dubbo:reference cluster="failover"/>


<!-- 可以指定到某個方法 -->
<dubbo:reference>
<dubbo:method retries="2" />
</dubbo:reference>


2\failfast 快速失敗,只發起一次調用,通常用於非冪等的寫操作
<dubbo:service cluster="failfast" />
或<dubbo:reference cluster="failfast"/>


3\failsafe 失敗安全 出現異常時,直接忽略,通常用於寫入審計日誌等操作
<dubbo:service cluster="failsafe" />
或<dubbo:reference cluster="failsafe"/>


4\failback 失敗自動恢復,後臺記錄失敗請求,定時重發,通常用於消息通知操作
<dubbo:service cluster="failback"/>
或<dubbo:reference cluster="failback"/>


5\forking 並行調用多個服務,只要一個成功即可返回,通常用於實時性要求較高的讀操作,
但需要浪費更多的服務器資源,可以通過forks="2"來設置最大並行數
<dubbo:service cluster="forking"/>
或<dubbo:reference cluster="forking"/>






-------------- 負載均衡策略 --------------
可自行擴展負載均衡策略
<dubbo:reference loadbalance="roundrobin" />
<dubbo:service loadbalance="ramdom" />


<dubbo:service>
<dubbo:method loadbalance="ramdom" />
</dubbo:service>


1\Random LoadBalance
隨機,按權重設置隨機概率
在一個截面上碰撞的概率高,但調用量越大分佈越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重
2\RoundRobin LoadBalance
輪詢,按公約後的權重設置輪詢比率
存在慢的提供者累計請求的問題,比如:第二胎機器很慢,但沒掛,當請求調到第二臺時就卡在那裏,久而久之,所有請求都卡在第二臺
3\LeastActive LoadBalance
最少活躍調用數,相同活躍數的隨機,活躍數指調用前後計數差
使慢的提供者收到更少的請求,因爲越慢的提供者的調用前後計數差越大
4\ConsistentHash LoadBalance
一致性Hash,相同參數的請求總是發到同一提供者
當某一臺提供者掛時,原本發往該提供者的請求,基於虛擬節點,平攤到其他提供者,不會引起劇烈波動
缺省只對第一個參數Hash,如果要修改,請配置<dubbo:parameter key="hash.arguments" value="0.1" />
缺省用160份虛擬節點,如果要修改,請配置<dubbo:parameter key="hash.nodes" value="320" />


-------------- dubbo線程模型 ----------------
Dispatcher 
all 所有消息都派發到線程池,包括請求,響應,連接事件,斷開事件,心跳等
direct 所有消息都不派發到線程池,全部在io線程上直接執行
message 只有請求響應消息派發到線程池,其他連接斷開事件,心跳等消息,直接在io線程上執行
execution 只請求消息派發到線程池,不含響應,響應和其他連接斷開事件,心跳等消息,直接在io線程上執行
connection 在IO線程上,將連接斷開事件放入隊列,有序逐個執行,其他消息派發到線程池

ThreadPool
fixed 固定大小線程池 啓動時建立線程,不關閉,一直持有(缺省)
cached 緩存線程池,空閒一分鐘自動刪除,需要時重建
limited 可伸縮線程池,但池中的線程數只會增長不會收縮(爲避免收縮時突然來了大流量引起的性能問題)

配置如下
<dubbo:protocal name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />
<dubbo:provider name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />






-------------- linux 線程模型 性能優化 -------------
linux 默認普通用戶 1024個線程
vi /etc/security/limits.d/90-nproc.conf
unlimited 不限制
儘量不要用root用戶來部署應用程序,避免資源耗盡後無法登陸操作系統
普通用戶的線程數限制值要看可用物理內存容量來配置
計算方式
限制值 = 物理內存量 / 128k
查看物理內存
cat /proc/meminfo |grep MemTotal




------------  直連提供者 開發/測試環境 ----------------------
1\如果是線上需求需要點對點,可以在<dubbo:reference>中配置url指向提供者,將繞過註冊中心,多個地址逗號隔開,配置如下
<dubbo:reference id="xxxserivce" interface="xx.xx.xxxserivce" url="" />
2\在JVM啓動參數中加入-D參數映射服務地址,如:
java -Dcom.alibaba.xxx.xxService=dubbo://localhost:20890
3\如果服務較多,也可以用文件映射 (2.0)以上版本自動加載${user.home}/dubbo-resolve.properties文件,不需要配置
java -Ddubbo-resolve.file=xxx.properties
映射文件內容 key爲服務名 url爲服務提供者url
com.xx.xxxserivce=dubbo://localhost:20880


---------------- 只訂閱 ----------------
可以讓服務提供者開發方,只訂閱服務(開發的服務可能依賴其他服務) 而不註冊正在開發的服務,通過直連測試正在開發的服務


禁用註冊配置:
<dubbo:registry address="10.20.135.10:9090" register="false" />
或者
<dubbo:registry address="10.20.135.10:9090?register=false" />


--------------- 只註冊 --------------
可以讓服務提供方,只註冊服務到另一個註冊中心,而不從另一註冊中心訂閱服務


禁用訂閱配置:
<dubbo:registry id="aregistry" address="10.20.153.10:28080" />
<dubbo:registry id="bregistry" address="10.20.153.10:28080" subscribe="false" />
或者
<dubbo:registry id="aregistry" address="10.20.153.10:28080" />
<dubbo:registry id="bregistry" address="10.20.153.10:28080?subscribe=false" />
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章