设为首页 收藏本站
查看: 1014|回复: 0

[经验分享] More about dubbo

[复制链接]

尚未签到

发表于 2017-2-28 08:29:01 | 显示全部楼层 |阅读模式
一、前言
    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 在负载均衡、服务管理、服务监控等方面的内容,部署结构如下图:
    
     DSC0000.png

二、集成环境
    1、测试环境(OS:Linux CentOS 6.5,CPU:2 Core,Memory:4G)
    2、部署配置

RoleNameIP_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之间进行自动切换,
DSC0001.png

    3、dubbo 支持轮询、随机(推荐)、最少并发等软负载均衡方式,同时支持设置每台Provider机器的负载权重,例如性能较低的机器可以使用较低的权重提供服务。负载方式和权重配置可以在开发时的Spring配置文件中指定,也可以在服务部署后运行时通过 admin 工具(后续介绍)进行动态配置,如果调用远程发布服务失败可以指定次数retry,除非所有的Provider都同时宕机,registry都能找到并分配可用的服务给消费方,从而实现服务的高可用。


  • 随机,按权重设置随机概率。
  • 轮循,按公约后的权重设置轮循比率。
  • 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
  • 一致性Hash,相同参数的请求总是发到同一提供者,另外提供了 sticky粘滞连接相关配置。
DSC0002.png


四、服务管理(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
     DSC0003.png
    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目录下的日志信息来排查错误,正常启动的截图如下:
     DSC0004.png
    5、通过 http://10.129.221.64:8081/ 地址可以访问到 dubbo monitor 页面,如下图:
     DSC0005.png
    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调用相关的性能测试,请期待后续博文。

八、向开源工作者和组织致敬,感谢对开源事业作出的任何贡献

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348159-1-1.html 上篇帖子: 新浪SAE部署 503 JDK版本冲突解决 下篇帖子: !锄作田心有明镜,能辨是非,纵有明末遗恨,也不过沧海一声笑。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表