Dubbo分布式架构

Author Avatar
zuoqy 11月 13, 2017
  • 在其它设备中阅读本文章

一、Dubbo详细介绍

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能, 可以和Spring架构无缝集成。

主要核心部件:
a.Remoting:网络通信架构,实现了sync-over-async和request-reeponse消息机制
b.RPC:一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
c.Registry:服务目录架构用于服务的注册和服务事件发布和订阅

Dubbo工作原理

1.Provider:暴露服务方称之为”服务提供者”
2.Consumer:调用远程服务方称之为”服务消费者”
3.Registry:服务注册与发现的中心目录服务称之为”服务注册中心”
4.Monitor:统计服务的调用次调和调用时间的日志服务称之为”服务监控中心”

(一)连通性:

a.注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
b.监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
c.服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销
d.服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销
e.注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
f.注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
g.注册中心和监控中兴全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
h.注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

(二)健壮性:

a.监控中心宕掉不影响使用,只是丢失部分采样数据
b.数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
c.注册中心对等集群,任意一台宕掉后,将自动切换到另一台
d.注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存哦通讯
e.服务提供者无状态,任意一台宕掉后,不影响使用
f.服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

(三)伸缩性

a.注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心
b.服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者

二、使用Dubbo

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.7</version>
</dependency>
dubbo-provider.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"; xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring- beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd";>
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="demo-provider"/>
<!-- 使用zookeeper注册中心暴露服务地址 -->
<!-- 使用multicast广播注册中心暴露服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService"/>
</beans>

dubbo-consumer.xml

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"; xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring- beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd";>

<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="demo-consumer"/>
<!-- 使用zookeeper注册中心暴露服务地址 -->
<!-- 使用multicast广播注册中心暴露发现服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234"/>
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService"/>
</beans>

三、注册中心

Zookeeper
Zookeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。Zookeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

Zookeeper是Google的Chubby一个开源的实现。是高有效和可靠的协同工作系统。Zookeeper能够用来leader选举,配置信息维护等。在一个分布式的环境中,我们需要一个Master实例或存储一些配置信息,确保文件写入的一致性等。Zookeeper能够保证如下3点:

1.Watches are ordered with respect to other events,other watches,and asynchronus replies. The ZooKeeper client libraries ensures that everything is dispatched in order.

2.A client will see a watch event for a znode it is watching before seeing the new data that corresponds to that znode.

3.The order of watch events from ZooKeeper corresponds to the order of the updates as seen by the ZooKeeper service.

本地zookeeper的安装:
解压安装文件,在解压后的文件夹下,有个config目录,他下面有个zoo_sample.cfg的文件,将这个文件名改为zoo.cfg

把这个文件里的dataDir=…改为dataDir=../data/zookeeper,或者其他你自己建好的目录中

然后执行bin目录下的./zkServer start 是启动zookeeper服务的命令
./zkServer stop 是停止zookeeper服务的命令


出自:zuoqy博客
如若转载请注明出处!