dubbox微服务实例及引发的“血案”
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。
主要核心部件:
Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.
RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
Registry: 服务目录框架用于服务的注册和服务事件发布和订阅
Dubbo工作原理:

本文将通过实例进行讲解,包括入门以及和springMVC mybatis整合还有管理端的演示
部分大图直接观看不太清晰,请在图片上点击右键,选择新窗口打开

本文中有一个接口是实现了dao,和mybatis整合后进行与数据库的交互,另一个接口如上图演示的是主要想展示的多个服务提供者之间的负载均衡,均雷同,后面会提供具体的下载地址
步骤1: 定义共通接口,接口应该定义在一个单独的maven项目中(jar),这样服务提供者和消费者才能引入

和普通的jar接口一样,不解释
步骤2:实现服务提供者

服务提供者也很简单,就是实现了第一步里面定义的接口,这里很简单,就是打出一句话,以便后面区分消费者到底调用到了哪个服务提供者了。
另外,需要将服务暴露出去,所以配置文件里面的dubbox.xml就很重要了

这里需要注意的是,由于dubbox的服务注册要基于zookeeper,所以需要先启动一个,具体操作可以参考我博客的其他文章或者自行搜索。
为了区分消费者到底调用了哪个服务提供者,所以服务提供者我们至少要部署两套,所以,需要修改上面的端口,另外,实现类里面打印的文字,还是要区分下
步骤3:实现消费者

接口的调用方就很简单了,和标准的springMVC一样,这里我们是整合好了的,直接注入就可以了

这里因为要测试到底调用到了哪个服务提供者,所以我们循环调用1000次,根据打印的文字来进行区分,所以上面红色字体需要修改的地方一定要改
步骤4:启动dubbox-admin, 管理端可以查看到发布的服务以及服务的提供者有那些。(我通过源码编译获取的,稍后我会提供我打好包的下载地址)
a 将duboox-admin.war修改为ROOT.war并放在tomcat webAPp目录下,先删除掉ROOT文件夹, 然后启动

同时,启动后确认下zookeeper地址是否正确,若不正确,停止server,按下图修改好了再启动

步骤5:启动服务提供者1

看见我们的提供的接口了,因为现在还没有启动消费者这边,所以暂时没有消费者,点击任意接口进去看可以看到服务提供者的信息

注意到这里的端口,就是之前dubbo.xml里面配置的
步骤六,启动服务提供者2,如果在启动2的时候报端口被占用,那就是xml中端口没改,仔细检查下
启动后服务列表还是一样的,因为我们两个服务提供者提供的服务接口都一样,就不截图了
但是现在我们每个接口都有两个提供者了,理论上点进任意接口后有两个实现,并且端口还不一样 是不是?

如上图,和我们预期是一样的。
步骤7:启动消费者
启动消费者后我们在admin服务首页看,注意看重点,不要看这里的文字 红色圈起来的

最开始是没有消费者,现在变为了正常了
步骤8:启动消费者,进行测试,看看打印的log吧, 如果不是两个server信息,那就再仔细检查吧

另外可以在admin里面配置负载均衡机制再试试,

说说由此引发的"血案":
之前的web项目,为了提高并行处理能力,除了代码优化外,一般都是部署了多套,前端通过nginx等负载均衡机制进行分发。
接触dubbox自己经过思考认为:
提供给web端的Controller层业务逻辑相对简单,占用的处理时间及资源相对较少,主要的处理逻辑在service层以及dao数据交互层
如果将controller层单独分离出来供用户直接访问, service和Dao一同作为服务部署多套,如果处理服务层的机器已经很吃力,则可以动态的增加服务节点来进行分担。
这样 controller层代码就可以减少很多部署资源,主要的在后端service和dao了。
然后“血案”就来了, 我正尝试着将现有项目进行拆分,通过压力测试来验证我的设想。。。。。。
dubbox微服务实例及引发的“血案”的更多相关文章
- consul客户端配置微服务实例名称和ID
consul客户端必须配置微服务实例名称和ID,微服务启动的时候需要将名称和ID注册到注册中心,后续微服务之间调用也需要用到. 名称可以通过以下两种方式配置,优先级从高到低.两个都不配置则默认服务名称 ...
- 微服务实战(二):使用API Gateway--转
原文地址:http://dockone.io/article/482 [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用的理想选 ...
- 微服务实战(二):使用API Gateway
微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服务架构的进程间通信 微服务实战(四):服务发现的可行方案以及实践案例 微服务实践(五) ...
- 【SpringCloud微服务实战学习系列】服务治理Spring Cloud Eureka
Spring Cloud Eureka是Spring Cloud Netflix微服务中的一部分,它基于NetFlix Sureka做了二次封装,主要负责完成微服务架构中的服务治理功能. 一.服务治理 ...
- 微服务实战-使用API Gateway
当你决定将应用作为一组微服务时,需要决定应用客户端如何与微服务交互.在单体式程序中,通常只有一组冗余的或者负载均衡的服务提供点.在微服务架构中,每一个微服务暴露一组细粒度的服务提供点.在本篇文章中,我 ...
- SpringCloud微服务实战——第三章服务治理
Spring Cloud Eureka 服务治理 是微服务架构中最核心最基本的模块.用于实现各个微服务实例的自动化注册与发现. 服务注册: 在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中 ...
- 微服务实战(二):使用API Gateway - DockOne.io
原文:微服务实战(二):使用API Gateway - DockOne.io [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用 ...
- 一个无锁消息队列引发的血案(六)——RingQueue(中) 休眠的艺术 [续]
目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...
- 一个无锁消息队列引发的血案(五)——RingQueue(中) 休眠的艺术
目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...
随机推荐
- 从I/O复用谈epoll为什么高效
上一篇文章中,谈了一些网络编程的基本概念.在现实使用中,用的最多的就是I/O复用了,无非就是select,poll,epoll 很多人提到网络就说epoll,认为epoll效率是最高的.单纯的这么认为 ...
- IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题
你是否遇到过当使用一个涉及到Cookie操作的网站或者管理系统时,IE 6.7.8.9下都跑的好好的,唯独到了IE10.11这些高版本浏览器就不行了?好吧,这个问题码农连续2天内遇到了2次.那么,我们 ...
- scrapy 知乎用户信息爬虫
zhihu_spider 此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧.代码地 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单
系列目录 引言 1.如果不借用Senparc.Weixin SDK自定义菜单,编码起来,工作量是非常之大 2.但是借助SDK似乎一切都是简单得不要不要的 3.自定义菜单无需要建立数据库表 4.自定义菜 ...
- ASP.NET Core 中文文档目录
翻译计划 五月中旬 .NET Core RC2 如期发布,我们遂决定翻译 ASP.NET Core 文档.我们在 何镇汐先生. 悲梦先生. 张仁建先生和 雷欧纳德先生的群中发布了翻译计划招募信息,并召 ...
- jdb调试scala代码的简单介绍
在linux调试C/C++的代码需要通过gdb,调试java代码呢?那就需要用到jdb工具了.关于jdb的用法在网上大家都可以找到相应的文章,但是对scala进行调试的就比较少了.其实调试的大致流程都 ...
- stringstream的基本用法
原帖地址:https://zhidao.baidu.com/question/580048330.htmlstringstream是字符串流.它将流与存储在内存中的string对象绑定起来.在多种数据 ...
- Atitit.研发团队与公司绩效管理的原理概论的attilax总结
Atitit.研发团队与公司绩效管理的原理概论的attilax总结 1. 四个理念 1 1.1. 绩效管理的三个目的.四个环节.五个关键2 1.2. 绩效目标smart2 2. 考核对象2 3. 绩效 ...
- Ubuntu下开启php调试模式,显示报错信息
在Ubuntu下php的缺省设置是不显示错误信息的,如果程序出错会显示“无法处理此请求的错误提示”,这在开发环境下非常不方便. 其实我们只要编辑下apache的配置文件就好 1.我的apache 配置 ...
- liunx 磁盘管理命令记录
Linux磁盘管理好坏管理直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 fdisk:用于磁盘分 ...