Apache Dubbo核心要点

1 Apache Dubbo概述

Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架,可以和Spring框架无缝集成。
什么是RPC?

RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。

需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。

RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于RPC范畴。各种开发语言都有自己的RPC框架。Java中的RPC框架比较多,广泛使用的有RMI、Hessian、Dubbo等。

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

Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

2 、dubbo和dubbox的区别:

Dubbox 和Dubbo本质上没有区别,名字的含义扩展了Dubbo而已,以下扩展出来的功能,也是选择Dubbox很重要的考察点。

  1. 支持REST风格远程调用(HTTP + JSON/XML);
  2. 支持基于Kryo和FST的Java高效序列化实现;
  3. 支持基于Jackson的JSON序列化;
  4. 支持基于嵌入式Tomcat的HTTP remoting体系;
  5. 升级Spring至3.x;
  6. 升级ZooKeeper客户端;
  7. 支持完全基于Java代码的Dubbo配置;

注:上述指的是dubbo 2.5.7版本。dubbo在17年已经开始继续更新版本。

3、核心组件说明:

Dubbo架构图(Dubbo官方提供)如下:
Apache Dubbo核心要点

虚线都是异步访问,实线都是同步访问
深蓝色虚线:在启动时完成的功能
浅色虚线(实线)都是程序运行过程中执行的功能

调用关系说明:

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Provider 暴露服务的服务提供方
节点 角色名称
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器

5、Dubbo 核心功能

Remoting:网络通信框架,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。
Cluster:服务框架,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
Registry:服务注册,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

6、Dubbo 服务器注册与发现的流程

Provider(提供者)绑定指定端口并启动服务。
提供者连接注册中心,并发本机 IP、端口、应用信息和提供服务信息发送至注册中心存储。
Consumer(消费者),连接注册中心 ,并发送应用信息、所求服务信息至注册中心。
注册中心根据消费者所求服务信息匹配对应的提供者列表发送至 Consumer 应用缓存。
Consumer 在发起远程调用时基于缓存的消费者列表择其一发起调用。
Provider 状态变更会实时通知注册中心、在由注册中心实时推送至 Consumer。
Apache Dubbo核心要点

7、Dubbo集群的负载均衡策略

负载均衡(Load Balance):其实就是将请求分摊到多个操作单元上进行执行,从而共同完成工作任务。

在集群负载均衡时,Dubbo 提供了多种均衡策略(包括随机、轮询(按顺序)、最少活跃调用数(在最近的一段时间内,哪个节点被调用最少)、一致性Hash(固定到某个节点上)),缺省为random随机调用。

Random LoadBalance: 随机选取提供者策略,有利于动态调整提供者权重。截面碰撞率高,调用次数越多,分布越均匀。
RoundRobin LoadBalance: 轮循选取提供者策略,平均分布,但是存在请求累积的问题。
LeastActive LoadBalance: 最少活跃调用策略,解决慢提供者接收更少的请求。
ConstantHash LoadBalance: 一致性 Hash 策略,使相同参数请求总是发到同一提供者,一台机器宕机,可以基于虚拟节点,分摊至其他提供者,避免引起提供者的剧烈变动。