SOA架构中的dubbo和zookeeper

前言:如果你的系统基于SOA(面向服务)的架构,就必须实现两个 子系统之间的远程通信

问题:如何实现子系统之间的远程通信?

解决办法:

1、WebService:效率不高,基于soap协议,项目中不建议使用。多用于跨语言跨平台之间的通信,比如两个公司之间的通信。

2、restful形式的服务:http+json 可以使用springMVC或者cxf 实现,就是一个风格、一种形式(URL中包含一些参数,并且 URL是没有后缀),本质其实就是get请求传json数据。缺点: 如果服务太多,服务之间调用关系混乱,需要治理服务。

3、Dubbo:基于rpc协议进行远程通信,底层使用socket通信, 传输效率高。具有服务的治理工具(注册中心)进行统一管理, 并且可以统计出系统之间的调用关系、调用次数。

一、Dubbo

1、dubbo是什么

百度百科给出的定义:Dubbo是一个开源的高性能优秀 务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和spring框架无缝集成。

2、走进dubbo

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应 用架构已无法应对,分布式服务架构以及流动计算架构势在必 行,亟需一个治理系统确保架构有条不紊的演进

dubbo官网给出的一张图:


·单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。

·垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的 Web框架(MVC) 是关键。

 ·分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。

·流动计算架构

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。

Dubbo就是资源调度和治理中心的管理工具。

3、Dubbo的架构


节点角色说明:

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

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

Registry:服务注册与发现的注册中心(类似于房产中介的作用)。

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

Container: 服务运行容器(在这里其实就是指的spring)。

调用关系说明:

(0). 服务容器负责启动,加载,运行服务提供者。也就是说当我们初始化一个spring容器的时候,服务就发布了。

(1). 服务提供者在启动时,向注册中心注册自己提供的服务。

(2). 服务消费者在启动时,向注册中心订阅自己所需的服务。

(3). 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

(4). 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

(5). 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

4、使用方法

其实dubbo就是几个jar包,需要我们服务端加入dubbo jar包来发布服务,客户端如果需要调用服务端分布的服务,肯定也需要dubbo的jar包。至于注册中心是一个独立的服务,因此还需要zookeeper作为注册中心。

二、注册中心

1、Zookeeper

(动物园管理员,也可以作为集群管理工具)当然注册中心也不定非得使用Zookeeper,也可以是redis,官方推 荐使用Zookeeper

2、Zookeeper的安装:

Zookeeper是Apacahe Hadoop的子项目,一般Apacahe底下都是java开发,包括Zookeeper。因此A、安装Zookeeper 之前需要安装jdk,B、跨平台的,windows、linux下安装都可以

安装步骤:

第一步:安装jdk

第二步:把zookeeper的压缩包上传到linux系统。

第三步:解压缩压缩包 tar -zxvf zookeeper-3.4.6.tar.gz

第四步:进入zookeeper-3.4.6目录,创建data文件夹。

第五步:进入conf目录,将zoo_sample.cfg改名为zoo.cfg [root@localhost conf]# mv zoo_sample.cfg zoo.cfg

第六步:使用vim编辑zoo.cfg,修改dataDir属性:dataDir=/root/zookeeper-3.4.6/data

第七步:进入bin目录,启动zookeeper [root@localhost bin]# ./zkServer.sh start

    关闭zookeeper [root@localhost bin]# ./zkServer.sh stop

    查看状态:[root@localhost bin]# ./zkServer.sh status

注意:需要关闭防火墙。

三、发布、引用服务(Spring整合)

1、加入dubbo相关的jar包、zookeeper的jar包以及zookeeper的客户端jar、引入约束

2、发布服务<dubbo:service>:容器启动的时候自动发布服务

<!-- 和本地服务一样实现远程服务 -->

<bean id="xxxService" class="com.xxx.XxxServiceImpl" />

<!-- 增加暴露远程服务配置 -->

<dubbo:service interface="com.xxx.XxxService" ref="xxxService" />

具体事例:<dubbo:application name="xxx"/>在注册中心登记的时候的名字(一般就是工程名)

<dubbo:registry protocol="zookeeper" address="ip+端口(2181)" />链接注册中心就得知道注册中心的地址

<dubbo:protocol name="dubbo" port="20880" />使用dubbo协议暴露服务,服务自己的端口号(20880)

<dubbo:service interface="xxx" ref="xxxImpl" />

3、引用服务<dubbo:reference>

<!-- 增加引用远程服务配置 -->

<dubbo:reference id="xxxService" interface="com.xxx.XxxService" />

<!-- 和本地服务一样使用远程服务 -->

<bean id="xxxAction" class="com.xxx.XxxAction">

    <property name="xxxService" ref="xxxService" />

</bean>

具体事例:

<dubbo:application name="xxx"/>

<dubbo:registry protocol="zookeeper" address="ip+端口"/>

<dubbo:reference interface="xxx" id="xxx" />

注意:引入接口jar包

猜你喜欢

转载自blog.csdn.net/aubrey_cr7/article/details/80713759