html
Dubbox 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbox就是个服务框架,若是没有分布式的需求,实际上是不须要用的,只有在分布式的时候,才有dubbox这样的分布式服务框架的需求,而且本质上是个服务调用的东西,说白了就是个远程服务调用的分布式框架。node
SOA是Service-Oriented Architecture的首字母简称,它是一种支持面向服务的架构样式。从服务、基于服务开发和服务的结果来看,面向服务是一种思考方式。算法
最简单直接的说法就是:dubbo自己是一个程序,在开发中做为jar包供咱们使用,dubbo为咱们作的就是根据服务的url去调用服务(基于rpc协议的调用)。windows
透明化的远程方法调用,就像调用本地方法同样调用远程方法,只需简单配置,没有任何API侵入。
软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,下降成本,减小单点。
服务自动注册与发现,再也不须要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,而且可以平滑添加或删除服务提供者。架构
Dubbo基于RPC(Remote Procedure Call 远程过程调用)协议,服务提供方和服务消费方之间的调用关系:负载均衡
框架
Provider: 暴露服务的服务提供方。分布式
Consumer: 调用远程服务的服务消费方。ide
Registry: 服务注册与发现的注册中心。性能
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册本身提供的服务。
服务消费者在启动时,向注册中心订阅本身所需的服务。
注册中心返回服务提供者地址列表给消费者,若是有变动,注册中心将基于长链接推送变动数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,若是调用失败,再选另外一台调用。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Dubbo 属于 RPC 框架,链接消费者和生产者,注册中心 监控被调用对象的运行状态
Dubbo提供的注册中心有以下几种类型可供选择:
对于注册中心的选择,咱们通常用Zookeeper,那么zookeeper和dubbo的关系是怎么样的
上面这个图若是看不太懂的话,建议看一下 ZooKeeper的数据模型 ,这里简单解释一下:
zookeeper的数据模型跟咱们windows系统下的文件模型类似,都是树形结构的;
windows下的文件系统有文件夹和文件两种,文件夹只是路径,文件才是存储体;
而zookeeper的数据模型也是树结构的,每一个节点叫作znode,每一个znode既能够存储数据也能够当作路径
树形结构的节点都是惟一的,而上面这个图上的绿色圆点都是zookeeper中的一个znode,每一个znode都有本身的路径和本身的值,存储着咱们dubbo注册的service信息,而上面这张图的znode分为4级(root、service、type、url):
dubbo就是经过这一层层的节点找到咱们须要调用的url而后进行调用的。
zookeeper做为dubbo的注册中心的角色使用
咱们把提供者和消费者经过dubbo注册到zookeeper这个注册中内心,zookeeper中存储的是服务的url的列表
经过消费者调用提供者服务的时候,会根据接口的名称类型经过dubbo到zookeeper中找到对应的服务的url列表,zookeeper返回服务提供者地址列表给消费者
消费者从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用(这个调用就是图1 消费者和提供者的调用关系),若是调用失败,再选另外一台调用