
dubbo
dubbo
wenyixicodedog
文一西路代码狗
展开
-
Dubbo源码 之 平滑加权轮询负载均衡算法分析
上篇中我们依次分析了Dubbo四大负载均衡算法实现细节,在分析第四种负载均衡算法实现的时候我们说到在2.6.4 版本及之前版本的 RoundRobinLoadBalance 在某些情况下存在着比较严重的性能问题——doSelect 的效率与 mod有关,时间复杂度为 O(mod)。mod 又受最大权重 maxWeight 的影响,因此当某个服务提供者配置了非常大的权重,此时 RoundRobinLoadBalance 会产生比较严重的性能问题。为此Dubbo社区做出了回应并在后续版本中进行了重构。但是重构后原创 2020-07-24 00:20:34 · 1012 阅读 · 0 评论 -
Dubbo源码 之 集群容错源码分析
Dubbo设计了集群模块,提供了各种Cluster Invoker处理集群调用及异常处理等场景。集群模块形象的可以理解为服务提供者和服务消费者的中间管理层,为服务消费者屏蔽了服务提供者的具体实现细节,这样服务消费者就可以专心处理远程调用相关事宜。比如发起请求,接受服务提供者返回的数据等。这就是集群要做的事情。原创 2020-07-15 09:13:48 · 428 阅读 · 0 评论 -
Dubbo源码 之 四大负载均衡算法分析
目录 1、前言 2、AbstractLoadBalance 3、RandomLoadBalance 4、LeastActiveLoadBalance 5、ConsistentHashLoadBalance 6、RoundRobinLoadBalance一、前言LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。避免集群中...原创 2020-07-13 13:05:09 · 388 阅读 · 0 评论 -
Dubbo源码 之 事件派发线程模型
Dubbo 将底层通信框架中接收请求的线程称为 IO 线程。如果一些事件处理逻辑可以很快执行完,比如只在内存打一个标记,此时直接在 IO 线程上执行该段逻辑即可。但如果事件的处理逻辑比较耗时,比如该段逻辑会发起数据库查询或者 HTTP 请求。此时我们就不应该让事件处理逻辑在 IO 线程上执行,而是应该派发到线程池中去执行。原因也很简单,IO 线程主要用于接收请求,如果 IO 线程被占满,将导致它不能接收新的请求。原创 2020-07-10 16:55:22 · 721 阅读 · 0 评论 -
Dubbo源码 之 SPI动态适配源码分析
SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有的组件。不过,Dubbo 并未使用 Java 原生的 SPI 机制,而是对其进行了增强,使其能够更好的满足需求。原创 2020-07-03 02:51:58 · 428 阅读 · 0 评论 -
Dubbo源码 之 服务暴露源码分析
Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑。整个逻辑大致可分为三个部分,第一部分是前置工作,主要用于检查参数,组装 URL。第二部分是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程。第三部分是向注册中心注册服务,用于服务发现。Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于Spring 的 Schema原创 2020-07-03 21:11:06 · 654 阅读 · 0 评论 -
Dubbo源码 之 服务引用及消费端请求源码分析
服务引用的方式,有三种,第一种是引用本地 (JVM) 服务,第二是通过直连方式引用远程服务,第三是通过注册中心引用远程服务。不管是哪种引用方式,最后都会得到一个 Invoker 实例。如果有多个注册中心,多个服务提供者,这个时候会得到一组 Invoker 实例,此时需要通过集群管理类 Cluster 将多个 Invoker 合并成一个实例。合并后的 Invoker 实例已经具备调用本地或远程服务的能力了,但并不能将此实例暴露给用户使用,这会对用户业务代码造成侵入。此时框架还需要通过代理工厂类 (ProxyF原创 2020-07-03 21:12:15 · 446 阅读 · 0 评论 -
Dubbo源码 之 服务引用调试ref不为空,ref对象被修改,ref == null
最近在用dubbo2.5.x版本源码进行调试服务引用源码时,发现程序运行到getObject的get方法的时候,ref不为空,导致不走init方法,不走init方法下面所有的服务引用程序调试均无法debug执行原创 2020-07-08 13:18:07 · 565 阅读 · 0 评论 -
Dubbo源码 之 过滤器链处理源码分析
内容持续更新中......原创 2020-07-08 10:41:16 · 169 阅读 · 0 评论 -
Dubbo源码 之 服务降级源码分析
内容持续更新中......原创 2020-07-08 10:40:22 · 242 阅读 · 0 评论 -
Dubbo源码 之 编解码源码分析
Dubbo 数据包分为消息头和消息体,消息头用于存储一些元信息,比如魔数(Magic),数据包类型(Request/Response),消息体长度(Data Length)等。消息体中用于存储具体的调用消息,比如方法名称,参数列表等。下面简单列举一下消息头的内容。原创 2020-07-08 10:39:25 · 301 阅读 · 1 评论 -
Dubbo源码 之 Dubbo整体架构设计
在 Dubbo 的核心领域模型中:Protocol 是服务域,它是 Invoker 暴露和引用的主功能入口,它负责 Invoker 的生命周期管理。Invoker 是实体域,它是 Dubbo 的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。Invocation 是会话域,它持有调用过程中的变量,比如方法名,参数等。原创 2020-07-07 23:32:33 · 295 阅读 · 0 评论 -
Dubbo源码 之 序列化、反序列化源码分析
待更新原创 2020-07-04 02:11:22 · 298 阅读 · 0 评论 -
Dubbo源码 之 Activate源码分析
@Activate称为自动激活扩展点注解,主要使用在有多个扩展点实现、需要同时根据不同条件被激活的场景中原创 2020-07-04 02:08:51 · 863 阅读 · 0 评论 -
Zookeeper 登录安全验证
前言由于之前的服务都是在内网,Zookeeper集群配置都是走的内网IP,外网不开放相关端口。最近由于业务升级,购置了阿里云的服务,需要对外开放Zookeeper服务。问题Zookeeper+dubbo,如何设置安全认证?不想让其他服务连接Zookeeper,因为这个Zookeeper服务器在外网。查询官方文档:Zookeeper 是 Apacahe Hadoop 的子项目,是...转载 2020-08-16 22:45:48 · 14710 阅读 · 0 评论