More about dubbo

1、前言

  dubbo 做爲分佈式服務框架支持豐富的配置和擴展方式,其中包括:通信協議、併發控制、多版本服務、結果緩存、泛化引用\實現、回聲測試、上下文信息、事件通知、路由規則(可用於實現讀寫分離)等多方面內容,官方User Guide(http://alibaba.github.io/dubbo-doc-static/Home-zh.htm)中已經包含了很是詳細的解釋和使用說明,再也不重複描述。參照以前的博文《基於開源Dubbo分佈式RPC服務框架的部署整合》(http://www.cnblogs.com/lengfo/p/4245215.html),已經實現了由Zookeeper做爲dubbo註冊中心的RPC簡單調用,基於此,本文主要介紹了 dubbo 在負載均衡、服務管理、服務監控等方面的內容,部署結構以下圖:html

  

  

 

2、集成環境

  一、測試環境(OS:Linux CentOS 6.5,CPU:2 Core,Memory:4G)git

  二、部署配置github

 Role  Name  IP_PORT   Remark
 註冊中心  zookeeper  10.129.221.64:2181  3.4.6,可擴展
 服務提供者  provider_01  10.129.221.64:30001  
 服務提供者  provider_02  10.129.221.64:30002  
 服務提供者  provider_03  10.129.221.64:30003  
 服務管理  dubbo_admin  10.129.221.64:8080  2.5.3,基於 tomcat
 服務監控  dubbo_monitor  10.129.221.64:8081  2.5.3,基於 jetty

 

3、服務負載均衡(Load Balance)

  一、dubbo provider 經過統一 registry 註冊中心能夠很方便實現Cluster部署,平滑增長或者減小機器實現負載均衡,consumer 和 provider 之間經過註冊中心實現調用地址的隔離。本文經過不一樣端口配置多個Provider註冊發佈服務,配置參照上述表格。redis

  二、在服務消費方 Consumer 相關代碼中循環執行遠程 IGoodsManager.LoadGoods()方法調用,因爲默認使用輪詢方式進行負載,從下圖能夠看出遠程服務對象會在三個Provider之間進行自動切換,spring

  

  三、dubbo 支持輪詢、隨機(推薦)、最少併發等軟負載均衡方式,同時支持設置每臺Provider機器的負載權重,例如性能較低的機器可使用較低的權重提供服務。負載方式和權重配置能夠在開發時的Spring配置文件中指定,也能夠在服務部署後運行時經過 admin 工具(後續介紹)進行動態配置,若是調用遠程發佈服務失敗能夠指定次數retry,除非全部的Provider都同時宕機,registry都能找到並分配可用的服務給消費方,從而實現服務的高可用。緩存

  • 隨機,按權重設置隨機機率。
  • 輪循,按公約後的權重設置輪循比率。
  • 最少活躍調用數,相同活躍數的隨機,活躍數指調用先後計數差。
  • 一致性Hash,相同參數的請求老是發到同一提供者,另外提供了 sticky粘滯鏈接相關配置。

  

 

4、服務管理(Admin)

  一、dubbo-admin 經過可視化的配置實現 負載均衡、權重調整、路由規則、服務降級、訪問控制等SOA治理功能,很遺憾,阿里並無徹底開源 dubbo-admin,開源部分屬內部裁剪版本。部署方式以下。tomcat

  二、從源碼編譯 dubbo-admin/target 目錄找到 dubbo-admin-2.5.3.war,部署到 tomcat 服務器(8080端口)並修改 dubbo-admin-2.5.3/WEB-INF/dubbo.properties 文件,指定dubbo registry Zookeeper 地址和登陸root、guest密碼,修改後的文件配置以下:服務器

dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

  三、配置成功後能夠經過 http://10.129.221.64:8080/dubbo-admin-2.5.3/ 地址訪問,並使用帳號root/root登錄到 dubbo後臺管理頁面,關於服務治理如下截取了一張服務提供者頁面,更多截圖參照官方地址:http://alibaba.github.io/dubbo-doc-static/Administrator+Guide-zh.htm#AdministratorGuide-zh-%E7%AE%A1%E7%90%86%E6%8E%A7%E5%88%B6%E5%8F%B0%E5%AE%89%E8%A3%85架構

  

  四、經過以上工具能夠很直觀的進行服務的SOA治理。併發

 

5、服務監控(Monitor)

  一、dubbo monitor 主要用於監控 dubbo服務、註冊中心、服務提供者、服務消費方等工做狀態、依賴關係等,支持JFreeChart圖形統計報表的形式展現服務負載狀況,dubbo monitor不支持負載,但單點故障不會影響RPC的運行,經過 dubbo monitor 能夠清晰的看到服務的訪問記錄、成功次數、失敗次數等。

  二、從源碼編譯 dubbo-simple\dubbo-monitor-simple\target 目錄找到 dubbo-monitor-simple-2.5.3-assembly.tar 並部署解壓到測試Linux服務器。

  三、修改 dubbo monitor 配置文件,修改註冊中心地址指向以前的zookeeper服務器地址,默認爲8080做爲 jetty http訪問端口,本文修改成 jetty.port = 8081 防止和tomcat衝突。mkdir 建立對應目錄用於存放monitor 監控過程當中的日誌、統計信息、圖表相關內容,注意charts目錄必須放在jetty.directory下,不然頁面上訪問不了,同時修改配置文件將directory指向到對應目錄,修改後的配置以下:

dubbo.container=log4j,spring,registry,jetty
dubbo.application.name=simple-monitor
dubbo.application.owner=
#dubbo.registry.address=multicast://224.5.6.7:1234
dubbo.registry.address=zookeeper://localhost:2181
#dubbo.registry.address=redis://127.0.0.1:6379
#dubbo.registry.address=dubbo://127.0.0.1:9090
dubbo.protocol.port=7070
dubbo.jetty.port=8081
dubbo.jetty.directory=monitor
dubbo.charts.directory=${dubbo.jetty.directory}/charts
dubbo.statistics.directory=monitor/statistics
dubbo.log4j.file=logs/dubbo-monitor-simple.log
dubbo.log4j.level=WARN

  四、啓動 monitor 服務,若是啓動失敗能夠經過查看log目錄下的日誌信息來排查錯誤,正常啓動的截圖以下:

  

  五、經過 http://10.129.221.64:8081/ 地址能夠訪問到 dubbo monitor 頁面,以下圖:

  

  六、注意:若是要啓用 dubbo monitor 的監控功能須要在provider開發的spring配置xml文件裏面增長如下標籤,標識啓用monitor,不然provider 並不會向 registry 服務器彙報服務統計信息,在dubbo monitor中也只能監視到服務,並不能顯示相關統計信息。

<dubbo:monitor protocol="registry" />

 

6、至此,關於dubbo的整合配置部署完畢。

  dubbo 框架覆蓋了RPC調用相關的方方面面,屬於一套完整的SOA解決方案,基於以上整合環境,參照 User Guide 能夠快速實現分佈式服務和流動計算架構。

  噹噹網開源了基於dubbo 框架擴展的 dubbox,主要支持了REST風格遠程調用(HTTP + JSON/XML)和序列化方面等內容,開源地址:https://github.com/dangdangdotcom/dubbox

  京東開源的基於dubbo的調用跟蹤系統 JD-Hydra,開源地址:https://github.com/odenny/hydra

 

7、性能測試

  關於dubbo各協議、序列化方式等PRC調用相關的性能測試,請期待後續博文。

 

8、向開源工做者和組織致敬,感謝對開源事業做出的任何貢獻

相關文章
相關標籤/搜索