Apache Dubbo學習筆記

RPC

  • 解釋:遠程方法調用
  • 影響RPC框架性能的兩個因素:
    • 能否在多個服務器之間建立連接(通信)
    • 序列化和反序列化的速度(序列化)

Dubbo簡介

  • 高性能JAVA RPC框架

特性

  • 面向接口代理的高性能RPC調用
  • 智能負載均衡
  • 服務自動註冊與發現
  • 高度可拓展能力
  • 運行期流量調度
    • 灰度發佈:++漸進式發佈++
  • 可視化的服務治理和運維

Dubbo設計架構

mark

  1. 對象
    • 服務提供者:Provider
    • 註冊中心:Registry,即zookeeper
    • 服務消費者:consumer

實現

  1. 添加Dubbo依賴
        <!--dubbo-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>
        <!--zookeeper的客戶端-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
    

Dubbo與SpringBoot整合

  1. 添加依賴
    <!--針對spring boot在2.0版本之上-->
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>
  1. 使用的註解

    • @Service (com.alibaba.dubbo.config.annotation.Service):暴露服務
    • @Reference:遠程引用這個service
  2. 其他和之前一樣配置即可

Duboo配置dubbo.properties

  1. dubbo配置問價的類型
    mark
    • JVM 啓動 -D 參數優先,這樣可以使用戶在部署和啓動時進行參數重寫,比如在啓動時需改變協議的端口。
    • XML 次之,如果在 XML 中有配置,則 dubbo.properties 中的相應配置項無效。
    • Properties 最後,相當於缺省值,只有 XML 沒有配置時,dubbo.properties 的相應配置項纔會生效,通常用於共享公共配置,比如應用名。
    • -D > XML > properties

Dubbo配置超時和配置覆蓋

  1. 配置超時設置: 添加timeout屬性

timeout的默認值是1000,單位:毫秒

<dubbo:reference interface="com.lhc.provider.service.UserService" id="userService" check="false" timeout="5000"/>
  • 方法級 > 接口級 > 全局配置
  • 如果級別一樣,消費方優先於提供方

Dubbo配置重試次數

retries屬性表示重試次數,不包含第一次調用,0表示不重試。增加操作不做重試操作,*表示隨機調用

<dubbo:reference interface="com.lhc.provider.service.UserService" id="userService" check="false" timeout="5000" retries="5"/>

Dubbo與SpringBoot整合的三種方式

  1. 使用@Service暴露服務,主類上使用@EnableDubbo註解
  2. 添加xml配置文件,在主類上使用@ImportResource("classpaht:provider.xml")加載配置文件
  3. 使用JAVA代碼將每一個組件手動添加到容器中

Dubbo高可用 ZooKeeper宕機與Dubbozhilian

  • 現象: zookeeper註冊中心宕機,還可以消費dubbo暴露服務

  • 原因:

    • 監控中心宕機不影響使用,只是丟失部分採樣數據
    • 數據庫宕機後,註冊中心仍能通過緩存提供服務列表查詢,但不能註冊新服務
    • 註冊中心對等集羣,任意一臺宕機後,將自動切換到另一臺
    • 註冊中心全部宕機後,服務提供者和服務消費者仍能通過本地緩存通訊
    • 提供者無狀態,任意一臺宕機後,不影響使用
    • 提供者全部宕機後,消費者應用給將無法使用,並無限次重連等待提供者恢復
  • 如何使用Dubbo直連:

@Service
public class OrderServiceImpl implements OrderService{

    @Reference(url = "127.0.0.1:20880")  // 使用url屬性,並賦予提供者的地址,實現dubbo直連
    private UserService userService;

    @Override
    public List<UserAddress> initOrder(String userId) {
        List<UserAddress> list = userService.getUserAddressList("1");
        return list;
    }
}

Dubbo高可用 負載均衡機制

在集羣負載均衡時,Dubbo 提供了多種均衡策略,缺省爲 random 隨機調用

  1. Dubbo中四種負載均衡機制
    • Random LoadBalance : 隨機,按權重設置隨機概率
    • RoundRobin LoadBalance :輪詢,按公約後的權重設置輪詢比率。
    • LeastActive LoadBalance : 最少活躍調用數,相同活躍數的隨機,活躍數指調用前後計數差。
    • ConsistentHash LoadBalance : 一致性 Hash,相同參數的請求總是發到同一提供者

Dubbo負載均衡機制配置

Dubbo高可用 服務降級

看文檔

demo下載鏈接:https://share.weiyun.com/54L7ZuE

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章