初次接触到RPC框架还是从RMI框架开始的,当时使用了Hessian进行远程的方法调用,于是乎慢慢的去查找相关资料去了解.
有幸的是在第一次在公司做分布式集群的时候,就能将当初了解的RPC框架--Dubbo给用上.后面由于自己又在学习和使用Hadoop,慢慢也就自己和朋友一起在研究和写RPC框架,对其一些异常也慢慢的去了解和分析.
好了,不说多了,先来介绍下Dubbo.Dubbo是一个资源调度和治理中心的管理工具.其实内部就是一个RPC框架.Dubbo的架构如图所示:
主要就是这5个节点:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。使用Zookeeper进行
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。就是Spring
各个节点的调用关系:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。\
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
上面的解释应该都很好理解,这个流程图是官方的,也比较好理解.对于初步使用者来说,可能这个Monitor觉得似乎和自己的关系不大,我开始时候也是这么想的,随着你往后进行深入了解,就知道这个节点有多么重要了.所以每个节点,大家都要好好去理解.
上面将Dubbo的基本架构说了遍,下面我们来讲讲Dubbo的基本工作流程和调用关系:
Dubbo分为服务端和客户端:服务端负责发布服务,暴露远程服务的配置;客户端负责调用服务.图片上的调用关系写的很清晰,就不详细的讲解了.
下面就实际的配置进行相关的说明.
在上面说过了,Dubbo有个Registry,这个是向Zookeeper进行注册的,因此在使用Dubbo的时候,配置中无论是服务端还是客户端,都需要向Zookeeper进行注册.服务端注册,客户端监听.关于Zookeeper我会在后续的文章中进行详细的讲解.
服务端:
<!-- 使用dubbo发布服务 -->
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="monkey-manager" />
<dubbo:registry protocol="zookeeper"
address="IP1:2181,IP2:2181,IP3:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.moneky.service.ItemService" ref="itemServiceImpl" />
注意:这里面的IP1,IP2,IP3是你Zookeeper所在的服务器的IP,后面的2181是Zookeeper的默认port.由于我本身的测试环境是3台集群,所以写了3个IP,各位根据自身的实际情况配置即可
客户端:
<!-- 引用dubbo服务 -->
<dubbo:application name="monkey-manager-web"/>
<dubbo:registry protocol="zookeeper" address="IP1:2181,IP2:2181,IP3:2181"/>
<dubbo:reference interface="com.monkey.service.ItemService" id="itemService" />
以上也可以看出,Dubbo的基本使用是非常简单的,但是其内部实现的原理是非常复杂的,源码也是.我会在后面单独写下关于Zookeeper和RPC,Netty以及NIO的相关资料,如果有时间的话... ...
我们接下来讲讲5个节点里面的Monitor.
这个Monitor其实是非常有用的,我在这里只是简单的讲下如何使用.
首先,我们需要将dubbo-admin-2.5.4.war放在tomcat的webapps这个目录下,版本根据自己下载的定,
其次,启动tomcat.访问路径为:ip+端口/dubbo-admin-2.5.4.登陆进去是要输入账号密码的,账号密码默认是root.大家就能进入了.
这个有个配置文件,是可以修改相关数据的,如下(我是在linux环境下的):
本篇文章没有介绍关于Dubbo的各种异常的解决.这个我会在后期进行更新,和Zookeeper,RPC,Netty一起进行相关的更新.