Dubbo

RPC服务:

  Remote Procedure Call,远程过程调用,其对应的协议称为RPC协议。

  RPC协议是一种通过网络向远程计算机程序请求服务,而不需要了解底层网络技术的协议。以传输协议(TCP、UDP或HTTP协议)为基础。为两个不同

的应用程序间传递数据的。其介于OSI七层模型中的会话层和表示层之间。

  RPC采用客户端\服务端模式,请求程序就是一个客户端,服务提供程序就是一个服务端。由于客户端和服务端部署在不同的机器上,服务间的调用避免不了

网络通信的过程。服务消费方每调用一个服务就要写一堆网络通信相关的代码(例如在调用RESTful服务时,调用端需要使用HttpClient设置很多参数,再去解析状态

和返回值,不仅复杂而且容易出错)。RPC框架封装了繁琐的通信过程和唤起调用服务的过程,使我们像调用本地服务一样调用远程服务,使调用者不必关心网络

通信的细节,提高效率。

 

Dubbo是基于SOA服务化治理的RPC框架。整体架构如下:

使用Socket来建立长连接,发送、接收数据。

通信方式:Netty,NIO异步传输框架

通信协议:TCP\IP协议

序列化方式:hessian二进制序列化

 

服务治理:

  监控服务节点健康,服务降级、熔断、限流,调用量统计

 

 

部署架构(注册中心 配置中心 元数据中心)

作为一个微服务框架,Dubbo sdk 跟随着微服务组件被部署在分布式集群各个位置,为了在分布式环境下实现各个微服务组件间的协作, Dubbo 定义了一些中心化组件,这包括:

  • 注册中心。协调 Consumer 与 Provider 之间的地址注册与发现
  • 配置中心。
    • 存储 Dubbo 启动阶段的全局配置,保证配置的跨环境共享与全局一致性
    • 负责服务治理规则(路由规则、动态配置等)的存储与推送。
  • 元数据中心。
    • 接收 Provider 上报的服务接口元数据,为 Admin 等控制台提供运维能力(如服务测试、接口文档等)
    • 作为服务发现机制的补充,提供额外的接口/方法级别配置信息的同步能力,相当于注册中心的额外扩展

//imgs/v3/concepts/threecenters.png

 

 

Dubbo工作原理

  1、服务启动的时候,provider和consumer根据配置信息,连接到注册中心register,分别向注册中心注册和订阅服务

  2、register根据服务订阅关系,返回provider信息到consumer,同时consumer会把provider信息缓存到本地。如果信息有变更,consumer会收到register的推送,重新获取provider信息并更新缓存

  3、consumer生成代理对象,同时根据负载均衡策略,选择一台provider,同时定时向monitor记录接口的调用次数和时间信息

  4、拿到代理对象后,consumer通过代理对象发起接口调用

  5、provider收到请求后对数据进行反序列化,然后通过代理调用具体的接口实现

 

为什么需要通过代理对象通信?

  主要是为了实现接口的透明代理,封装调用细节,使客户端向调用本地方法一样调用远程方法。同时还可以通过代理实现一些其他的策略,比如:

  1、调用的负载均衡

  2、调用失败、超时、降级和容错机制

  3、做一些过滤操作,比如加入缓存、mock数据

  4、接口调用次数统计

 

 

Dubbo官网:http://dubbo.apache.org/

 

END.

posted @ 2017-10-26 09:06  杨岂  阅读(157)  评论(0编辑  收藏  举报