More about dubbo
一、前言
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 在负载均衡、服务管理、服务监控等方面的内容,部署结构如下图:

二、集成环境
1、测试环境(OS:Linux CentOS 6.5,CPU:2 Core,Memory:4G)
2、部署配置
| 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 |
三、服务负载均衡(Load Balance)
1、dubbo provider 通过统一 registry 注册中心可以很方便实现Cluster部署,平滑增加或者减少机器实现负载均衡,consumer 和 provider 之间通过注册中心实现调用地址的隔离。本文通过不同端口配置多个Provider注册发布服务,配置参照上述表格。
2、在服务消费方 Consumer 相关代码中循环执行远程 IGoodsManager.LoadGoods()方法调用,由于默认使用轮询方式进行负载,从下图可以看出远程服务对象会在三个Provider之间进行自动切换,

3、dubbo 支持轮询、随机(推荐)、最少并发等软负载均衡方式,同时支持设置每台Provider机器的负载权重,例如性能较低的机器可以使用较低的权重提供服务。负载方式和权重配置可以在开发时的Spring配置文件中指定,也可以在服务部署后运行时通过 admin 工具(后续介绍)进行动态配置,如果调用远程发布服务失败可以指定次数retry,除非所有的Provider都同时宕机,registry都能找到并分配可用的服务给消费方,从而实现服务的高可用。
- 随机,按权重设置随机概率。
- 轮循,按公约后的权重设置轮循比率。
- 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
- 一致性Hash,相同参数的请求总是发到同一提供者,另外提供了 sticky粘滞连接相关配置。

四、服务管理(Admin)
1、dubbo-admin 通过可视化的配置实现 负载均衡、权重调整、路由规则、服务降级、访问控制等SOA治理功能,很遗憾,阿里并没有完全开源 dubbo-admin,开源部分属内部裁剪版本。部署方式如下。
2、从源码编译 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
3、配置成功后可以通过 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

4、通过以上工具可以很直观的进行服务的SOA治理。
五、服务监控(Monitor)
1、dubbo monitor 主要用于监控 dubbo服务、注册中心、服务提供者、服务消费方等工作状态、依赖关系等,支持JFreeChart图形统计报表的形式展示服务负载情况,dubbo monitor不支持负载,但单点故障不会影响RPC的运行,通过 dubbo monitor 可以清晰的看到服务的访问记录、成功次数、失败次数等。
2、从源码编译 dubbo-simple\dubbo-monitor-simple\target 目录找到 dubbo-monitor-simple-2.5.3-assembly.tar 并部署解压到测试Linux服务器。
3、修改 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
4、启动 monitor 服务,如果启动失败可以通过查看log目录下的日志信息来排查错误,正常启动的截图如下:

5、通过 http://10.129.221.64:8081/ 地址可以访问到 dubbo monitor 页面,如下图:

6、注意:如果要启用 dubbo monitor 的监控功能需要在provider开发的spring配置xml文件里面增加以下标签,标识启用monitor,否则provider 并不会向 registry 服务器汇报服务统计信息,在dubbo monitor中也只能监视到服务,并不能显示相关统计信息。
<dubbo:monitor protocol="registry" />
六、至此,关于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
七、性能测试
关于dubbo各协议、序列化方式等PRC调用相关的性能测试,请期待后续博文。
八、向开源工作者和组织致敬,感谢对开源事业作出的任何贡献
More about dubbo的更多相关文章
- 用dubbo时遇到的一个序列化的坑
首先,这是标题党,问题并不是出现在序列化上,这是报错的一部分: Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to s ...
- dubbo服务提供与消费
一.前言 项目中用到了Dubbo,临时抱大腿,学习了dubbo的简单实用方法.现在就来总结一下dubbo如何提供服务,如何消费服务,并做了一个简单的demo作为参考. 二.Dubbo是什么 Dubbo ...
- 分布式学习系列【dubbo入门实践】
分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...
- Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题
现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...
- Dubbo 备注
Dubbo是阿里开源的一款服务治理中间件,主要包含如下节点: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. ...
- Dubbo学习小记
前言 周一入职的新公司,到了公司第一件事自然是要熟悉新公司使用的各种技术,搭建本地的环境. 熟悉新公司技术的过程中,首先就是Maven,这个前面已经写过文章了,然后就是Dubbo----公司的服务都是 ...
- Running Dubbo On Spring Boot
Dubbo(http://dubbo.io/) 是阿里的开源的一款分布式服务框架.而Spring Boot则是Spring社区这两年致力于打造的简化Java配置的微服务框架. 利用他们各自优势,配置到 ...
- 【转】Dubbo使用例子并且和Spring集成使用
一.编写客户端和服务器端共用接口类1.登录接口类public interface LoginService { public User login(String name, String psw ...
- 基于SOA分布式架构的dubbo框架基础学习篇
以需求用例为基,抽象接口,Case&Coding两条线并行,服务(M)&消费(VC)分离,单元.接口.功能.集成四层质量管理,自动化集成.测试.交付全程支持. 3个大阶段(需求分析阶段 ...
- dubbo连接zookeeper注册中心因为断网导致线程无限等待问题【转】
最近维护的系统切换了网络环境,由联通换成了电信网络,因为某些过滤规则导致系统连不上zookeeper服务器(应用系统机器在深圳,网络为电信线路,zookeeper服务器在北京,网络为联通线路),因为我 ...
随机推荐
- bootstrap的select2校验及不影响原来的格式
<style> .has-error .select2-choice, .has-error .select2-choices, .has-error.simple .select2-ch ...
- windows下如何对mysql进行整裤备份
通常情况下备份一个数据库,直接单裤备份即可,更完善一点的会要求做到定时单裤备份.然而很多时候又由于裤实例是在太多,这样会导致备份非常耗时,因而有时候需要对整个数据库应用进行备份.那么在windows下 ...
- BestCoder17 1001.Chessboard(hdu 5100) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5100 题目意思:有一个 n * n 的棋盘,需要用 k * 1 的瓷砖去覆盖,问最大覆盖面积是多少. ...
- CentOS6.5安装MySql5.5
最近在CentOS上安装MySql,本来以为yum安装会很简单,但是却花了自己不少时间,所以决定和大家分享下. 首先,安装MySql源! 下载地址:http://dev.mysql.com/downl ...
- HDU 4310 Hero (贪心算法)
A - Hero Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- 6个朋友(codevs 2832)
2832 6个朋友 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有这么一种说法:认识6个人,你就认识全世 ...
- LINUX调优
一.Linux系统调优及安全设置 系统安装安全最小化原则说明 ◆安装linux系统最小化,即选包最小化,yum安装软件最小化. ◆开机自启动程序服务最小化,即无用的服务不开启. ◆操作命令最小化原则, ...
- .hpp与.h的区别
本文转载http://blog.csdn.net/liuzhanchen1987/article/details/7270005,在此感谢 hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定 ...
- 原始套接字(SOCK_RAW)
本文转载:http://www.cnblogs.com/duzouzhe/archive/2009/06/19/1506699.html,在此感谢 原始套接字(SOCK_RAW). 应用原始套接字,我 ...
- 配置无线网络的时候会提示“Enter Password for Default Keyring to Unlock”
密钥管理软件Seahorse有关,这个时候我们打开c配置一下就可以解决. 命令行下运行seahorse或依次点击菜单“应用程序→附件→密码和加密密钥”, 在login一行中右键选择更改密码,然后什么都 ...