日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dubbo 常见服务治理策略

發(fā)布時間:2023/12/4 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dubbo 常见服务治理策略 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、Dubbo體系結(jié)構(gòu)

2、Dubbo容錯機(jī)制

Dubbo集群容錯架構(gòu)圖

各節(jié)點關(guān)系:

  • 這里的Invoker是Provider的一個可調(diào)用Service的抽象,Invoker封裝了Provider地址及Service接口信息。
  • Directory代表多個Invoker,可以把它看成List,但與List不同的是,它的值可能是動態(tài)變化的,比如注冊中心推送變更。
  • Cluster將Directory中的多個Invoker偽裝成一個Invoker,對上層透明,偽裝過程包含了容錯邏輯,調(diào)用失敗后,重試另一個。
  • Router負(fù)責(zé)從多個Invoker中按路由規(guī)則選出子集,比如讀寫分離,應(yīng)用隔離等。
  • LoadBalance負(fù)責(zé)從多個Invoker中選出具體的一個用于本次調(diào)用,選的過程包含了負(fù)載均衡算法,調(diào)用失敗后,需要重選。

2.1 集群容錯模式

Failover Cluster
  • 失敗自動切換,當(dāng)出現(xiàn)失敗,重試其它服務(wù)器。(缺省)
  • 通常用于讀操作,但重試會帶來更長延遲。
  • 可通過retries="2"來設(shè)置重試次數(shù)(不含第一次)。
Failfast Cluster
  • 快速失敗,只發(fā)起一次調(diào)用,失敗立即報錯。
  • 通常用于非冪等性的寫操作,比如新增記錄。
Failsafe Cluster
  • 失敗安全,出現(xiàn)異常時,直接忽略。
  • 通常用于寫入審計日志等操作。
Failback Cluster
  • 失敗自動恢復(fù),后臺記錄失敗請求,定時重發(fā)。
  • 通常用于消息通知操作。
Forking Cluster
  • 并行調(diào)用多個服務(wù)器,只要一個成功即返回。
  • 通常用于實時性要求較高的讀操作,但需要浪費更多服務(wù)資源。
  • 可通過forks="2"來設(shè)置最大并行數(shù)。
Broadcast Cluster
  • 廣播調(diào)用所有提供者,逐個調(diào)用,任意一臺報錯則報錯。(2.1.0開始支持)
  • 通常用于通知所有提供者更新緩存或日志等本地資源信息。
<dubbo:service retries="2" /> <dubbo:reference retries="2" /> <!-- 單一方法配置重試次數(shù) --> <dubbo:reference><dubbo:method name="findFoo" retries="2" /> </dubbo:reference><!-- 配置集群容錯模式 --> <dubbo:service cluster="failsafe" /> <dubbo:reference cluster="failsafe" />

3、Dubbo服務(wù)降級

綜述:
Dubbo服務(wù)降級主要包含兩點:屏蔽(mock=force,Dubbo-admin配置)和容錯(mock=fail,Mock)。

使用Dubbo時,可能會遇到以下問題:

1)多個服務(wù)之間可能由于服務(wù)沒有啟動或者網(wǎng)絡(luò)不通,調(diào)用中會出現(xiàn)遠(yuǎn)程調(diào)用失敗;

  • 服務(wù)請求過大,需要停止部分服務(wù)以保證核心業(yè)務(wù)的正常運行;
  • mock=force:return+null 表示消費方對該服務(wù)的方法調(diào)用都直接返回 null值,不發(fā)起遠(yuǎn)程調(diào)用。用來屏蔽不重要服務(wù)不可用時對調(diào)用方的影響。

    還可以改為 mock=fail:return+null 表示消費方對該服務(wù)的方法調(diào)用在失敗后,再返回 null值,不拋異常。用來容忍不重要服務(wù)不穩(wěn)定時對調(diào)用方的影響。

    以上兩個問題可以使用Dubbo的服務(wù)降級來實現(xiàn);
    即:在服務(wù)宕掉或者并發(fā)數(shù)太高導(dǎo)致的RpcException異常時,進(jìn)行友好的處理或者提示,而不是內(nèi)部報錯導(dǎo)致系統(tǒng)不可用。

    查看dubbo的官方文檔,可以發(fā)現(xiàn)有個mock的配置,mock只在出現(xiàn)非業(yè)務(wù)異常(比如超時,網(wǎng)絡(luò)異常等)時執(zhí)行。mock的配置支持兩種,一種為boolean值,默認(rèn)的為false。如果配置為true,則缺省使用mock類名,即類名+Mock后綴;另外一種則是配置返回默認(rèn)字符串,如:”return null”或者"return 123456",可以很簡單的忽略掉異常。

    /**接口定義*/ public interface IUser {public void addUser(User u);public User getUserById(int id);}/**實現(xiàn)類*/ public class UserImpl implements IUser {private static List<User> USER_LIST = new ArrayList<User>();static{for(int i=0;i<10;i++){User u = new User();u.setAddress("address"+i);u.setId(i);u.setName("name"+i);USER_LIST.add(u);}}public void addUser(User u) {USER_LIST.add(u);System.out.println("total:"+USER_LIST.size());}public User getUserById(int id) {for(int i=0;i<USER_LIST.size();i++){if(USER_LIST.get(i).getId() == id){return USER_LIST.get(i);}}return null;} }public class IUserMock implements IUser {@Overridepublic void addUser(User u) {throw new RuntimeException("add user fail!");}@Overridepublic User getUserById(int id) {return null;} } <dubbo:reference id="iUser" interface="com.dubbosample.iface.IUser" timeout="10000" check="false" mock="true"><dubbo:reference id="iUser" interface="com.dubbosample.iface.IUser" timeout="10000" check="false" mock="return null">

    以上配置還可以在dubbo-admin界面中配置

    分別是屏蔽和容錯:

    其中屏蔽只能在dubbo-admin中配置,不能在dubbo配置文件里配置

    屏蔽:force.mock (即:屏蔽請求,直接返回某個值,如上面的字符串,mock=“return 123456”);

    容錯:fail.mock (即:允許請求,在請求失敗的時候,再返回某個值,如:mock=“fail:return 123456”);

    4、Dubbo服務(wù)限流

    Dubbo限流主要依賴Sentinel(哨兵)中間件一起使用

    服務(wù)提供端限流:
    對服務(wù)提供方的限流可分為服務(wù)提供方的自我保護(hù)能力和服務(wù)提供方對服務(wù)消費方的請求分配能力這兩個維度。
    QPS & 定向限流

    服務(wù)消費端限流:
    對服務(wù)提供方的限流可分為對控制并發(fā)線程數(shù),和服務(wù)降級兩個維度。

    詳見:
    https://yq.aliyun.com/articles/624053?utm_content=m_1000013383

    拓展:
    https://blog.csdn.net/world_snow/article/details/79080314

    5、Dubbo負(fù)載均衡

    dubbo有四種負(fù)載均衡的方式:

    1)RandomLoadBalance:加權(quán)隨機(jī)算法(默認(rèn))

    2)LeastActiveLoadBalance:最小活躍負(fù)載均衡

    3)ConsistentHashLoadBalance:一致性hash負(fù)載均衡

    4)RoundRobinLoadBalance:加權(quán)輪詢負(fù)載均衡

    6、Dubbo結(jié)果緩存

    https://dubbo.apache.org/zh-cn/docs/user/quick-start.html

    7、

    總結(jié)

    以上是生活随笔為你收集整理的Dubbo 常见服务治理策略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。