一、Dubbox简介
Dubbox是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化并继续维护,为了与原有的Dubbo区分,顾将其命名为Dubbox。
Dubbox致力于提供高性能和透明化的RPC远程调用方案,以及SOA服务治理方案。简单的说,Dubbox就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有Dubbox这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是远程服务调用的分布式框架,用来解决服务于web层进行完全分离的这么一个功能,而不是跟业务合在一起了。
Dubbox原理图如下:
这个图说明了Dubbox的原理或者说是工作流程图,我们来看这个图,首先上面定点的部分叫Dubbo的注册中心,右侧的小块我们称之为服务的提供方,左侧的部分我们称之为消费方,什么叫服务提供方?什么叫服务消费方呢?web层是消费,service层是提供方,专门提供服务的,也就是说web层是使用服务的,service层是提供服务的,先抛开注册中心不看,先看服务的消费方,如何才能使用这个功能呢?比如说web层的搜索要调用service层的搜索功能,首先得知道service层搜索功能的IP地址,web层怎么能知道它的IP地址呢,以前的WebService是这么个思路,但是现在,Service层的搜索功能有可能在不同的机器上会部署很多份,搭载一个负载均衡,这样一来就能承载更多的服务器压力,那这n多份不能都部署到一个服务器上,如果地址都配置到调用方,那么管理起来就会很麻烦,所以引入这么一个概念,叫注册中心,也就是说这里的服务的调用方不一定非得知道服务的提供方的具体地址,而通过谁来获取呢?通过注册中心,为什么通过注册中心就能获取到呢?
如上图步骤来做进一步的解释:
(1)启动时注册服务地址
启动时会把自己的服务器地址报给注册中心,注册中心就会知道当前服务有哪些服务,而且这些服务分部在哪些IP上,也能非常清楚,注册中心实际上就是一个登记簿,注册中心上就存在了一个地址的注册列表,哪个地址对应哪个服务
(2)启动时订阅服务地址
注册中心不用把地址报给消费方,消费方只需要订阅,它就可以把注册中心的地址拿过来,消费方就知道了所有服务地址,它就知道具体该调哪个服务了
(3)变更时推送服务地址列表
(4)DubboMonitor是一个监控中心,有它没它都一样,通过它可以了解到有哪些服务的消费方和服务的提供方
(注:注册中心相当于一个中介,服务提供方是房东,消费方相当于租房的人,租房的人找不到房东怎么办,就找中介)
节点角色说明
(1)Provider:暴露服务的服务提供方
(2)Consumer:调用远程服务的服务消费方
(3)Registry:服务注册与发展的注册中心
(4)Monitor:统计服务调用次调和调用时间的监控中心
(5)Container:服务运行容器
调用关系说明
0. 服务容器负责启动,加载,运行服务提供者
1. 服务提供者在启动时,向注册中心注册自己提供的服务
2. 服务消费者在启动时,向注册中心订阅自己所需的服务
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者运行调用
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心