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微服务实例及引发的“血案”的更多相关文章

  1. consul客户端配置微服务实例名称和ID

    consul客户端必须配置微服务实例名称和ID,微服务启动的时候需要将名称和ID注册到注册中心,后续微服务之间调用也需要用到. 名称可以通过以下两种方式配置,优先级从高到低.两个都不配置则默认服务名称 ...

  2. 微服务实战(二):使用API Gateway--转

    原文地址:http://dockone.io/article/482 [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用的理想选 ...

  3. 微服务实战(二):使用API Gateway

    微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服务架构的进程间通信 微服务实战(四):服务发现的可行方案以及实践案例 微服务实践(五) ...

  4. 【SpringCloud微服务实战学习系列】服务治理Spring Cloud Eureka

    Spring Cloud Eureka是Spring Cloud Netflix微服务中的一部分,它基于NetFlix Sureka做了二次封装,主要负责完成微服务架构中的服务治理功能. 一.服务治理 ...

  5. 微服务实战-使用API Gateway

    当你决定将应用作为一组微服务时,需要决定应用客户端如何与微服务交互.在单体式程序中,通常只有一组冗余的或者负载均衡的服务提供点.在微服务架构中,每一个微服务暴露一组细粒度的服务提供点.在本篇文章中,我 ...

  6. SpringCloud微服务实战——第三章服务治理

    Spring Cloud Eureka 服务治理 是微服务架构中最核心最基本的模块.用于实现各个微服务实例的自动化注册与发现. 服务注册: 在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中 ...

  7. 微服务实战(二):使用API Gateway - DockOne.io

    原文:微服务实战(二):使用API Gateway - DockOne.io [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用 ...

  8. 一个无锁消息队列引发的血案(六)——RingQueue(中) 休眠的艺术 [续]

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  9. 一个无锁消息队列引发的血案(五)——RingQueue(中) 休眠的艺术

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

随机推荐

  1. 旺财速啃H5框架之Bootstrap(五)

    在上一篇<<旺财速啃H5框架之Bootstrap(四)>>做了基本的框架,<<旺财速啃H5框架之Bootstrap(二)>>篇里也大体认识了bootst ...

  2. 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟内存泄漏say byebye

    一.写在前面 对于C++来说,内存泄漏就是new出来的对象没有delete,俗称野指针:而对于java来说,就是new出来的Object放在Heap上无法被GC回收:而这里就把我之前的一篇内存泄漏的总 ...

  3. 【趣事】用 JavaScript 对抗 DDOS 攻击 (下)

    上一篇:http://www.cnblogs.com/index-html/p/js-network-firewall.html 对抗 v2 之前的那些奇技淫巧,纯属娱乐而已,并不能撑多久. 但简单. ...

  4. Log4net - 规则简介

    参考页面: http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html http://www.yuanjiaocheng.net/entity/ ...

  5. springmvc的拦截器

    什么是拦截器                                                         java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...

  6. Linux下高cpu解决方案

    昨天搞定了一个十万火急的issue,客户抱怨产品升级后系统会变慢和CPU使用率相当高,客户脾气很大,声称不尽快解决这个问题就退货,弄得我们 R&D压力很大,解决这个issue的任务分给了我,客 ...

  7. 高级渲染技巧和代码示例 GPU Pro 7

    下载代码示例 移动设备正呈现着像素越来越高,屏幕尺寸越来越小的发展趋势. 由于像素着色的能耗非常大,因此 DPI 的增加以及移动设备固有的功耗受限环境为降低像素着色成本带来了巨大的压力. MSAA 有 ...

  8. linux下mono,powershell安装教程

    1简介 简单来说pash就是bash+powershell 2官网 https://github.com/Pash-Project/Pash 3下载fedora20---lxde桌面---32位版. ...

  9. jexus5.8.2 linux x64专业版 配置https

    一.环境 1.jexus版本:Jexus/5.8.2.8 Linux专业版 内置mono版本:Mono/4.6.2.7 2.操作系统:centOs7 jexus独立版由于是免安装版并且内置mono,所 ...

  10. Lesson 24 It could be worse

    Text I entered the hotel manager's office and sat down. I had just lost £50 and I felt very upset. ' ...