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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分布式服务框架Dubbo使用小结

發布時間:2025/3/12 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式服务框架Dubbo使用小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹:

Dubbo是一個被國內很多互聯網公司廣泛使用的開源分布式服務框架,致力于提供高性能和透明化的RPC遠程服務調用方案,以及SOA

服務治理方案,每天為2,000+個服務提供3,000,000,000+次訪問量支持,并被廣泛應用于阿里巴巴集團的各成員站點。

其核心部分包含:

  • 遠程通訊: 提供對多種基于長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。
  • 集群容錯: 提供基于接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集群支持。
  • 自動發現: 基于注冊中心目錄服務(最常用的是基于zookeeper),使服務消費方能動態的查找服務提供方,使地址透明,使服務 ? ? ? ? ? ? ?提供方可以平滑增加或減少機器。

Dubbo能做什么?

  • 透明化的遠程方法調用,就像調用本地方法一樣調用遠程方法,只需簡單配置,沒有任何API侵入。
  • 軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,降低成本,減少單點。
  • 服務自動注冊與發現,不再需要寫死服務提供方地址,注冊中心基于接口名查詢服務提供者的IP地址,并且能夠平滑添加或刪除服務 ? ? 提供者。

擴展:

dubbox相當于dubbo的擴展,最主要Dubbox增加了如RESTful remoting,Kyro/FST 系列化等額外功能,dubbox和dubbo2.x是兼容的, ? ?沒有改變dubbo的任何已有的功能和配置方式(除了升級了spring之類的版本)。

配置:

服務端接口實現類:

public classDemoServiceImpl implements DemoService {public String sayHello(Stringname) {return "Hello "+ name;} }

服務端spring配置:

<?xml version="1.0" encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!--提供方應用信息,用于計算依賴關系 --><dubbo:applicationname="hello-world-app" /><!--使用multicast廣播注冊中心暴露服務地址--><dubbo:registryprotocal=“zookeeper”address="192.168.152.100:2181,192.168.152.101:2181,192.168.152.102:2181" /><!--用dubbo協議在20880端口暴露服務 --><dubbo:protocolname="dubbo"port="20880" /><!--聲明需要暴露的服務接口 --><dubbo:serviceinterface="com.alibaba.dubbo.demo.DemoService"ref="demoService" /><!--和本地bean一樣實現服務可以改為注解式--><beanid="demoService"class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" /> </beans>

消費端spring配置:

<?xmlversion="1.0" encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!--消費方應用名,用于計算依賴關系,不是匹配條件,不要與提供方一樣 --><dubbo:applicationname="consumer-of-helloworld-app" /><!--使用multicast廣播注冊中心暴露發現服務地址--><dubbo:registryprotocal=“zookeeper”address="192.168.152.100:2181,192.168.152.101:2181,192.168.152.102:2181" /><!--生成遠程服務代理,可以和本地bean一樣使用demoService --><dubbo:referenceid="demoService"interface="com.alibaba.dubbo.demo.DemoService" /> </beans>

服務調用代碼:

public class Consumer{public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = newClassPathXmlApplicationContext(new String[] {"consumer.xml"});context.start();DemoService demoService=(DemoService)context.getBean("demoService");//獲取遠程服務代理String hello =demoService.sayHello("world");//執行遠程方法System.out.println(hello ); //顯示調用結果} }

優勢:

  • Dubbo通過長連接減少握手,通過NIO及線程池在單連接上并發拼包處理消息,通過二進制流壓縮數據,比常規HTTP等短連接協議更快。在阿里巴巴內部,每天支撐2000多個服務,30多億訪問量,最大單機支撐每天近1億訪問量。

健狀性

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

伸縮性

  • 注冊中心為對等集群,可動態增加機器部署實例,所有客戶端將自動發現新的注冊中心
  • 服務提供者無狀態,可動態增加機器部署實例,注冊中心將推送新的服務提供者信息給消費者

升級性

  • 當服務集群規模進一步擴大,帶動IT治理結構進一步升級,需要實現動態部署,進行流動計算,現有分布式服務架構不會帶來阻力

?

管理界面:

?




原理:


節點角色說明:

Provider: 暴露服務的服務提供方。

Consumer: 調用遠程服務的服務消費方。

Registry: 服務注冊與發現的注冊中心。

Monitor: 統計服務的調用次調和調用時間的監控中心。

Container: 服務運行容器。

?

調用關系說明:

0. 服務容器負責啟動,加載,運行服務提供者。

1. 服務提供者在啟動時,向注冊中心注冊自己提供的服務。

2. 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。

3. 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者。

4. 服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。

5. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

?

Dubbo能與Zookeeper做到集群部署,當提供者出現斷電等異常停機時,Zookeeper注冊中心能自動刪除提供者信息,當提供者重啟時,能自動恢復注冊數據,以及訂閱請求

?

經驗:

  • zookeeper安裝的版本和pom文件zookeeper的版本要保持一致,否則會發生找不到服務的錯誤
  • 使用maven-shade-plugin插件打包可以將所有依賴導入jar包,并且也不會出現找不到spring配置,dubbo配置文件的問題,唯一要注意的是要將spring配置文件放到resources/META-INF目錄下
  • 服務端main函數要保持運行有兩種方法:
  • System.in.read(); //為保證服務一直開著,利用輸入流的阻塞來模擬;
  • ?synchronized(Main.class) {

????????while (true) {

????????????????try{

????????????????????????Main.class.wait();

????????????????} catch (InterruptedException e) {

????????????????????????e.printStackTrace();

????????????????}

????????}

}

推薦第二種方法,因為第一種方法在使用nohup命令時無法正常啟動

  • 消費端調用時的pojo一定要實現serializable接口,否則傳不過去,程序卡死,
  • 服務端生成的api一定要放到消費端WEB-INF/lib下,否則web項目會提示找不到方法

?

?

總結

以上是生活随笔為你收集整理的分布式服务框架Dubbo使用小结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。