微服务之Dubbo

Dubbo

架构

节点
角色说明

Provider

暴露服务的服务提供方

Consumer

调用远程服务的服务消费方

Registry

服务注册与发现的注册中心

Monitor

统计服务的调用次数和调用时间的监控中心

Container

服务运行容器

调用方式

  1. 首先服务消费者通过代理对象 Proxy 发起远程调用,

  2. 接着通过网络客户端 Client 将编码后的请求发送给服务提供方的网络层上,也就是 Server。

  3. Server 在收到请求后,首先要做的事情是对数据包进行解码。然后将解码后的请求发送至分发器 Dispatcher,

  4. 再由分发器将请求派发到指定的线程池上,最后由线程池调用具体的服务。

  5. 这就是一个远程调用请求的发送与接收过程。

注:

是不是发现和scf一模一样的架构.可以说,scf和dubbo有很大的相似性,并且都是使用的netty进行rpc通信,具体不同点,此次只给出少数不同点.

注册中心

相比于scf,dubbo的注册中心展现出了多元化姿态.

注册中心是什么?一个注册中心所需要的基本功能是key-value型数据存储和对于节点过期感知的能力.

不同的是,在面临分布式集群中某分区出现错误的策略选择,即

在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性)无法同时满足.

通常会在偏向于一致性或者可用性做出选择.

zookeeper 注册中心,CP

开源版本的dubbo推荐使用的注册中心.

zk作为一款为分布式应用提供一致性的中间层框架.但是在一个集群中只能有一个master,高可用可能会是瓶颈.

Nacos 注册中心,AP

由server端维护的Map去保存服务信息,和Eureka极度类似.后续可看Eureka分析.

Redis 注册中心,AP

redis作为一款经典的K-V数据库,也可用来存储服务信息,不过用redis做注册中心只作为了过渡的版本.

数据库做注册中心,CA

阿里内部版本使用的注册中心.

负载均衡策略

RandomLoadBalance

加权随机算法.

LeastActiveLoadBalance

最小活跃数负载均衡.

每个server都会保存请求量.每次请求的时候,取出最小的那个server.

当有多个server同时最小时,如果设置了权值且不一样,可继续根据加权随机算法取出server,如果权值一样,则随机取出一个.

ConsistentHashLoadBalance

一致性hash算法.

对每个server的address进行hash计算,得到一个hash值.称为serverHash.

对请求的第一个方法的参数进行hash,得到一个hash值.称为reqHash.

注意的是,hash的计算是跟请求的方法的参数有关.

RoundRobinLoadBalance

加权轮询算法

比如服务器 A、B、C 权重比为 5:2:1。那么在8次请求中,服务器 A 将收到其中的5次请求,服务器 B 会收到其中的2次请求,服务器 C 则收到其中的1次请求。

Last updated

Was this helpful?