微服务之Dubbo
Dubbo
架构

Provider
暴露服务的服务提供方
Consumer
调用远程服务的服务消费方
Registry
服务注册与发现的注册中心
Monitor
统计服务的调用次数和调用时间的监控中心
Container
服务运行容器
调用方式

首先服务消费者通过代理对象 Proxy 发起远程调用,
接着通过网络客户端 Client 将编码后的请求发送给服务提供方的网络层上,也就是 Server。
Server 在收到请求后,首先要做的事情是对数据包进行解码。然后将解码后的请求发送至分发器 Dispatcher,
再由分发器将请求派发到指定的线程池上,最后由线程池调用具体的服务。
这就是一个远程调用请求的发送与接收过程。
注:
是不是发现和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?