dubbo

官网

为什么要用这个框架?

将服务架构改成分布式的,可获得更高的并发执行能力,同时也更好地支持动态扩容能力。

它解决了哪些问题?

分布式(拆分应用,远程调用能力);
配置管理,服务扩容(人工配置地址信息相当困难);
服务依赖(自动注入远程对象,就像访问本地对象一样);

服务注册与发现

流程如图
image-20211020205237177
设计原因:
去中心化,本地缓存,注册中心宕掉也没关系;
注册中心可做集群;
消费者提供者解耦,双方可动态扩展;

服务调用过程

image-20211020205638557

消费者的软负载均衡策略

image-20211020213630207
image-20211020205846568

工作原理

image-20211020210439325
工作原理分 10 层:
第一层:service 层,接口层,给服务提供者和消费者来实现的(留给开发人员来实现);
第二层:config 层,配置层,主要是对 Dubbo 进行各种配置的,Dubbo 相关配置;
第三层:proxy 层,服务代理层,透明生成客户端的 stub 和服务单的 skeleton,调用的是接
口,实现类没有,所以得生成代理,代理之间再进行网络通讯、负责均衡等;
第四层:registry 层,服务注册层,负责服务的注册与发现;
第五层:cluster 层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一
个服务;
第六层:monitor 层,监控层,对 rpc 接口的调用次数和调用时间进行监控;
第七层:protocol 层,远程调用层,封装 rpc 调用;
第八层:exchange 层,信息交换层,封装请求响应模式,同步转异步;
第九层:transport 层,网络传输层,抽象 mina 和 netty 为统一接口;
第十层:serialize 层,数据序列化层。

调用链

image-20211020210541602

动态感知服务下线

Dubbo ZooKeeper 注册中心采用是事件通知与客户端拉取方式。服务第一次订阅的时候将会拉取对应目录下全量数据,然后在订阅的节点注册一个 watcher。一旦目录节点下发生任何数据变化,ZooKeeper 将会通过 watcher 通知客户端。客户端接到通知,将会重新拉取该目录下全量数据,并重新注册 watcher。利用这个模式,Dubbo 服务就可以做到服务的动态发现。

注意:ZooKeeper 提供了“心跳检测”功能,它会定时向各个服务提供者发送一个请求(实际上建立
的是一个 socket 长连接),如果长期没有响应,服务中心就认为该服务提供者已经“挂了”,并将其剔除。

优先级配置

配置优先级别
1.以timeout为例,显示了配置的查找顺序,其他retries,loadbalance等类似。
(1)方法级优先,接口级次之,全局配置在次之
(2)如果级别一样,则消费方优先,提供方次之
(3)其中,服务提供方配置,通过URL经由注册中心传递给消费方
2.建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消
费方同时引用多个服务,就不需要关心每个服务的超时设置。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注