Dubbox总结
2018年8月24日
- Dubbox是什么
Dubbox 是一个分布式服务框架,其前身是阿里巴巴的开源项目,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行维护,为了与原有的Dubbo区分,故将其命名为Dubbox。
Dubbox 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbox就是个分布式服务框架,如果没有分布式的需求,其实是不需要用的。
- 为什么要用Dubbox
当网站变大后我们需要拆分应用进行服务化,来提高开发效率,或者是调节网站性能。我们写项目好多都是分布式项目,即便是做后台管理,现在在公司里好多也是使用SOA架构模式,也就是服务层和表现层分离,好处是模块解耦,可以自己做自己的模块。如果进行分布式开发的话,需要模块分离,分离就产生一个问题,怎样提供接口,怎样调用?Dubbo可以发布服务,也给我们提供调用服务的方式,现在好多公司都在用这种方式来做。
- Dubbox作用
1)透明化的远程方法调用,就像调用本地方法一样,只需简单配置,没有任何API侵入
2)软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点
3)服务自动注册与发现,不再需要写死服务提供方的地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者
4)dubbo采用全spring配置方式,只需spring加载dubbo的配置即可,dubbo基于spring的schema扩展进行加载
- 怎样使用Dubbox
Dubbo里边有几个比较关键的点,一个是服务提供者,就是提供服务的一方,还有一个消费者,用来消费所提供的服务接口,还有一个注册中心,就是服务注册到哪里,我们用的是zookeeper,一般是配置到linux服务器上,还有检测器,能检测服务发布和调用,还有一个服务容器,就是tomcat或者其他服务器。
它是这样来执行的,我们写项目时,会在pom文件中配置dubbo和zookeeper,引入依赖的jar包。然后在spring的配置文件中配置自动扫描要发布的服务接口实现类所在的包的全路径,以及服务要发布到注册中心的ip及端口。dubbo这个框架类似于Spring,它会读取配置文件中配置信息,扫描实现类有@service注解的类,把注册的服务(服务全类名,服务地址),注册到zookeeper这个注册中心去。
我们在写表现层项目时候,就在配置文件中配置好zookeeper中心所在服务器的ip端口,配置扫描@controller类包的路径,程序一但启动,dubbo这个框架读取配置文件中服务的信息,扫描@controller类里面有@Refrence注解引入的service类,根据接口名称在zookeeper注册中心订阅服务,zookeeper返回服务地址给服务消费者web层,接着消费者会拿着这个地址去调用服务提供者的接口。
服务层项目会不断的向注册中心发布自己的服务,表现层项目也会不断的到注册中心去查找服务,要是配置的接口不对,或者zookeeper这个注册中心没有启动,那这个项目就运行不起来了。
- Dubbox配置文件的说明
- <dubbo:service/>
用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。服务暴露出去后,可被订阅的服务调用。
-
- <dubbo:reference/>
用于创建一个远程服务代理,一个引用可以指向多个注册中心。用于指明要订阅的服务。
-
- <dubbo:protocol/>
用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。指明消费者消费时使用的通行协议,Dubbo支持的有http,dubbo,redis,memcache,rmi等也可以自行扩展,缺省是dubbo
-
- <dubbo:registry/>
用于配置连接注册中心相关信息,dubbo支持的有多播,单播,redis,或使用Zookeeper。推荐使用Zookeeper
-
- <dubbo:monitor/>
用于配置连接监控中心相关信息
- Dubbox执行流程
节点角色说明:
Container服务容器·
Provider服务提供者
Consumer服务消费者
Registry注册中心
Monitor: 监控中心
·
调用关系说明:
· 0. 服务容器负责启动,加载,运行服务提供者。
· 1. 服务提供者在启动时,向注册中心注册自己提供的服务。
· 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
· 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
· 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,
如果调用失败,再选另一台调用。
· 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计
数据到监控中心。