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
一、测试环境(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 |
一、dubbo provider 经过统一 registry 注册中心能够很方便实现Cluster部署,平滑增长或者减小机器实现负载均衡,consumer 和 provider 之间经过注册中心实现调用地址的隔离。本文经过不一样端口配置多个Provider注册发布服务,配置参照上述表格。redis
二、在服务消费方 Consumer 相关代码中循环执行远程 IGoodsManager.LoadGoods()方法调用,因为默认使用轮询方式进行负载,从下图能够看出远程服务对象会在三个Provider之间进行自动切换,spring
三、dubbo 支持轮询、随机(推荐)、最少并发等软负载均衡方式,同时支持设置每台Provider机器的负载权重,例如性能较低的机器可使用较低的权重提供服务。负载方式和权重配置能够在开发时的Spring配置文件中指定,也能够在服务部署后运行时经过 admin 工具(后续介绍)进行动态配置,若是调用远程发布服务失败能够指定次数retry,除非全部的Provider都同时宕机,registry都能找到并分配可用的服务给消费方,从而实现服务的高可用。缓存
一、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治理。并发
一、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" />
dubbo 框架覆盖了RPC调用相关的方方面面,属于一套完整的SOA解决方案,基于以上整合环境,参照 User Guide 能够快速实现分布式服务和流动计算架构。
当当网开源了基于dubbo 框架扩展的 dubbox,主要支持了REST风格远程调用(HTTP + JSON/XML)和序列化方面等内容,开源地址:https://github.com/dangdangdotcom/dubbox
京东开源的基于dubbo的调用跟踪系统 JD-Hydra,开源地址:https://github.com/odenny/hydra
关于dubbo各协议、序列化方式等PRC调用相关的性能测试,请期待后续博文。