远程服务调用的各种方式(HTTPInvoker和dubbo)

  • HTTPInvoker
  1. 、总体流程

1,客户调用客户端辅助对象stub上的方法

2,客户端辅助对象stub打包调用信息(变量,方法名 ,因此这里就要求对象类继承Serializable接口,进行序列化),通过网络发送给服务端辅助对象skeleton(通过httpclient或者httpconnection传输)

3,服务端辅助对象skeleton将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象

4,调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象skeleton

5,服务端辅助对象将结果打包,发送给客户端辅助对象stub

6,客户端辅助对象将返回值解包(反序列化),通过response流返回给调用者

(2)、服务提供端原理

远程服务调用的各种方式(HTTPInvoker和dubbo)_第1张图片

(3)、客户端运行原理

 

远程服务调用的各种方式(HTTPInvoker和dubbo)_第2张图片

(4)、优缺点

优点:效率高 缺点:配置较多,方法不够透明

  1. 、demo演示 (下载地址 https://github.com/zhaoyuan1209/HttpInvokerDEMO.git)
  • Dubbo

(1)、总体流程

1. 服务容器负责启动,加载,运行服务提供者。

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

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

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

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

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

7. 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外

8. 注册中心通过长连接感知服务提供者的存在,服务提供者宕(dang)机,注册中心将立即推送事件通知消费者

9. 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表

(2)、dubbo原理

远程服务调用的各种方式(HTTPInvoker和dubbo)_第3张图片

consumer和provider是框架中必然存在的,Registry(zookepper)做为全局配置信息管理模块,推荐生产环境使用Registry,可实时推送现存活的服务提供者,Monitordubbo-admin apache dubbo开源项目2.6.1版本前一般用于监控和统计RPC调用情况、成功率、失败率等情况,让开发及运维了解线上运行情况。

  1. 、优缺点

优势

1、透明化的远程方法调用

2、像调用本地方法一样调用远程方法;只需简单配置,没3有任何API侵入。

3、软负载均衡及容错机制

4、可在内网替代nginx lvs等硬件负载均衡器。

5、服务注册中心自动注册 & 配置管理

6、不需要写死服务提供者地址,注册中心基于接口名自动查询提供者ip。

7、使用类似zookeeper等分布式协调服务作为服务注册中心,可以将绝大部分项目配置移入zookeeper集群。

8、服务接口监控与治理

9、Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,针对不同应用的不同接口,可以进行 多版本,多协议,多注册中心管理。

劣势

  1. 只支持java语言

(3)、DubboDemo下载地址:https://github.com/zhaoyuan1209/DubboDemo.git

  • 如何将基于httpinvoker的项目转换为基于dubbo的项目(通过本地的HTTPinvoker项目为例)

(1)、步骤流程介绍

1、新建父级Maven项目为子项目继承和管理jar包

,接口等,同时在父级项目中引入的有spring, dubbo, zookeeper等jar包。

  1. 把子项目中通用的接口、实体类、常量等如FirstDemoService、Person抽取出来成为一个父级Maven项目为子项目继承而用
  2. 在子项目中配置pom.xml引入父级项目,即配置provider.xml、custom.xml文件(需要配置dubbo:application和zookepper地址和接口的id权限类名之类的信息)

(2)、注意事项

1、项目运行的时候需要启动spring容器,zookepper,并配置好dubbo-admin

四、踩过的坑

1、dubbo master和2.6.x分支上是没有dubbo-admin项目的

2、dubbo配置在tomcat中,tomcat版本使用tomcat7

你可能感兴趣的:(分布式)