当先锋百科网

首页 1 2 3 4 5 6 7

dubbo介绍

1.  dubbo是什么?

DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

 

简单讲:其实就是一个分布式远程调用服务的框架,在分布式服务框架中,远程服务调用(RPC)只是基石,当应用全面服务化后,服务治理才是关键,这才是Dubbo的一个工作重心。因此Dubbo主要用于服务化,以及SOA治理

 

备注:什么是soa?SOA强调的是一种架构思想,组件化的灵活的开发方式,举例,盖房子,原来是用代码一行行的累积,就像盖房子一块砖头一块砖头的砌墙,一片一片的加瓦。SOA架构的思想就主张不要再一块砖一片瓦的干,一面墙一个屋顶一根梁等等都是人家做好的,拿过来自己搭起来就把房子盖好了,需要每家的房子要求不一样再自己改,墙上开个窗,屋顶搞个烟囱都随你自己搞,自己搞的这部分就是需要你自己做造型砌砖的地方。好处就是开发效率高,系统稳定,实施维护便捷,不管是开发还是维护成本都低廉

      *为什么要采用SOA架构思想,目前企业系统软件存在什么问题?

2.  dubbo能做什么?

透明化的远程方法调用

–就像调用本地方法一样调用远程方法

–只需简单配置,没有任何API侵入。

软负载均衡及容错机制

–可在内网替代F5等硬件负载均衡器

服务自动注册与发现

–不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者

简单讲: 高性能NIO通讯及多协议集成,服务动态寻址与路由软负载均衡与容错,依赖分析与降级等。

备注:为什么说高性能的NIO? NIO的工作原理:是一个线程在不停的循环检测监听到的事件,然后分别作出相应的处理。可是这种方式只适合那种处理过程时间短的情况,如果某一个操作处理的事件太长的话,则会让其他的事件一直处于等待状态,比如发送或者接收一个很大的文件,这样显然是很不合适的。

Ø  多协议

 

dubboHessianHTTPRMIWebServiceThrift、MemcachedRedis

在通信过程中,不同的服务等级一般对应着不同的服务质量,框架默认就是dubbo协议,也是官方推荐使用的协议,官推荐原因如下

dubbo协议是单一长连接, 减少连接握手验证等,从而加快响应速度,官方提供如果每服务每提供者每消费者使用单一长连接,如果数据量较大,可以使用多个连接

使用dubbo协议,一般部署要求消费者要比提供者的个数多,这样才能发挥充分利用提供者的资源

 

Ø  服务动态寻址和路由

   

Ø  软负载均衡与容错

 

Ø  分析与降级

   

3.  dubbo适用于哪些场景?

Ø  当网站变大后,不可避免的需要拆分应用进行服务化,以提高开发效率,调优性能,节省关键竞争资源等。

Ø  当服务越来越多时,服务的URL地址信息就会爆炸式增长,配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。

Ø  当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。

Ø  接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?等等……

在遇到这些问题时,都可以用Dubbo来解决。

4.  为什么选用dubbo?

 

备注:HSF主要是不免费

Spring cloud也是分布式服务框架,而且功能比较完善且在不断更新维护,在国外这个框架也很火热,但是针对目前的情况,要想用SpringCloud就得去深入学习,完全的搞懂每个功能组件的作用,这就要求需要读大量的英文文档,学习成本比较高!

5.  如何使用Dubbo进行开发?

  

  使用dubbo开发项目,分三个包,如上图所示

Ø  Consumer: 应用程序包(war),包中仅含前端静态资源和MVC中的控制层,只负责指挥。

Ø  Provider: 服务程序包(war),包中仅含业务逻辑层和数据层,只负责处理业务逻辑。

Ø  PAI: 主要起到一个桥梁的作用,是将服务端的服务抽出一个公共的接口包,提供给消费者

  代码包结构如下

    

6.  运行模式

Provider: 暴露服务的服务提供方。

Consumer: 调用远程服务的服务消费方。

Registry: 服务注册与发现的注册中心。

Monitor: 统计服务的调用次调和调用时间的监控中心。

Container: 服务运行容器。

7.  Web工程


以独立的应用形式提供远程服务,不依赖web容器,这是比较标准的服务提供形式,有3个子工程:

api

描述:业务域对外提供的服务接口,参数类型

输出:独立jar,例如user-api.jar

core

描述:业务域的模型,包括数据和行为,只关心领域内的数据和模型,不关心外部服务

输出:独立jar,例如user-core.jar,外部业务不能依赖该jar

impl

描述:业务域的远程服务实现,负责服务启动停止,内部业务组装,参数转换

输出:***-assembly.tar.gz,输出是一个压缩包

8.  实际应用模式架构图