dubbo
文章平均质量分 94
中间件兴趣圈
《RocketMQ技术内幕》一书作者、RocketMQ开源社区优秀布道师、CSDN2020博客之星TOP2,主打成体系剖析java中间件,已发布RocketMQ、Kafka、Dubbo、Sentinel、Canal、ElasticJob、ElasticSearch等15个专栏。
展开
-
源码分析Dubbo前置篇-寻找注册中心、服务提供者、服务消费者功能入口
本节主要阐述如下两个问题: 1、Dubbo自定义标签实现。 2、dubbo通过Spring加载配置文件后,是如何触发注册中心、服务提供者、服务消费者按照Dubbo的设计执行相关的功能。 所谓的执行相关功能如下: 1)注册中心启动,监听消息提供者的注册服务、接收消息消费者的服务订阅(服务注册与发现机制)。 2)服务提供者向注册中心注册服务。 3)服务消费者向注册中心订阅服务。接下来从...原创 2018-05-28 23:31:03 · 9413 阅读 · 1 评论 -
源码分析Dubbo网络通信篇NettyClient
在源码分析Dubbo通讯篇之网络核心类一文中已给出Dubbo netty client的启动流程,如下图: 以Dubbo协议为例,DubboProtocol#refer中,在创建Invoker时,通过getClient方法,开始Client(连接的)创建过程,先重点看一下:private ExchangeClient[] getClients(URL url) { ...原创 2018-07-25 19:32:03 · 2363 阅读 · 0 评论 -
源码分析Dubbo编码解码实现原理---Dubbo协议编码
本节主要介绍了Dubbo协议的编码方式,涉及协议头、协议体具体的编码规则,默认使用Dubbo协议,其核心类图如下: 在Dubbo整个框架中,codec2的可选值为dubbo、thrift,本文将重点分析Dubbo协议的编码解码。 本文主要以Dubbo协议为例进行展开,其他通信方式,例如Thrift就不做过多分析,其实现思路基本是样的,Dubbo协议的编解码实现类为Dubb...原创 2018-08-06 12:26:14 · 3241 阅读 · 0 评论 -
Dubbo序列化概述
Dubbo序列化支持java、compactedjava、nativejava、fastjson、fst、hessian2、kryo,其中默认hessian2。其中java、compactedjava、nativejava属于原生java的序列化。整个Dubbo序列化的类设机机器优雅,职责单一,其整体类图如下: 主要分为三个维度进行组织:Serialization(序列化策略)、...原创 2018-08-10 12:47:53 · 3523 阅读 · 0 评论 -
源码分析Dubbo序列化-源码分析kryo各数据类型的序列化编码机制
kryo序列化原理: 用过dubbo的开发人员,在选取序列化时都会根据“经验”来选kryo为序列化框,其原因是序列化协议非常高效,超过java原生序列化协议、hessian2协议,那kryo为什么高效呢? 序列化协议,所谓的高效,通常应该从两方面考虑: 1、序列化后的二进制序列大小。(核心) 2、序列化、反序列化的速率。 本节将重点探讨...原创 2018-08-12 21:45:47 · 3011 阅读 · 1 评论 -
源码分析Dubbo序列化-源码分析kryo序列化实现原理
本文主要梳理Kryo序列化基本实现。重点剖析Kryo#writeClassAndObject、Kryo#readClassAndObject方法。 1、源码分析Kryo#writeClassAndObjectpublic void writeClassAndObject (Output output, Object object) { if (output == nu...原创 2018-08-16 20:36:58 · 2358 阅读 · 0 评论 -
Dubbo Filter机制概述
从上文可知,在服务的调用或消费端发送请求命令中,Dubbo引入过滤器链机制来实现功能的包装(或扩展)。Dubbo很多功能,例如泛化调用、并发控制等都是基于Filter机制实现的,系统默认的Filter在/dubbo-rpc-api/src/main/resources/META-INF/dubbo/internal/com.alibaba.dubbo.rpc.Filter文件中定义,内容如下...原创 2018-08-26 22:50:54 · 3920 阅读 · 2 评论 -
源码分析Dubbo服务调用-服务提供者如何处理请求命令与再谈Invoker
本文将重点剖析服务调用流程,也就是消费端通过网络发起RPC服务调用时,服务提供者是如何进行服务请求响应的。 1、源码分析Dubbo服务调用流程 了解过Netty网络编程的童鞋们应该知道,netty的命令处理基于ChannelHandler(事件处理链),编码、网络传输、解码、处理等,下面是关于NettyServer的初始化过程,该部分在《源码分析Dubbo网络通信篇NettySer...原创 2018-08-21 12:34:42 · 2159 阅读 · 0 评论 -
源码分析Dubbo监控中心实现原理
Dubbo监控的实现基本原理就是在服务调用时收集服务调用并发度、服务响应时间,然后以一定频率向监控中心汇报统计数据。 1、源码分析MonitorFilter过滤器过滤器作用 监控过滤器,向监控中心汇报服务调用数据。使用场景 搭建监控中心监控Dubbo服务调用。阻断条件 非阻断过滤器。 1.1 MonitorFilter声明/** * ...原创 2018-08-31 12:32:17 · 4696 阅读 · 1 评论 -
源码分析Dubbo异步调用与事件回调机制
本文将详细分析Dubbo服务异步调用与事件回调机制。 1、异步调用与事件回调机制 1.1 异步回调 1.2 事件回调 2、源码分析异步调用与事件回调机制 在Dubbo中,引入特定的过滤器FutureFilter来处理异步调用相关的逻辑,其定义如下:@Activate(group = Constants.CONSUMER)p...原创 2018-09-06 12:16:18 · 6582 阅读 · 0 评论 -
源码分析Dubbo 服务调用日志(accesslog参数)实现原理
谈到服务调用日志,大家恐怕第一想到就是如果开启了这个参数,会影响性能。那真实的情况是怎么样了?性能损耗到底有多大呢?在实践中我们如何使用该功能呢?本文将详细分析Dubbo accesslog实现原理。 AccessLogFilter概述过滤器作用 记录调用日志。使用场景 记录服务提供者端调用日志。阻断条件 非阻断过滤器。 接下来源码分析accesslog参数...原创 2018-09-09 22:26:57 · 3732 阅读 · 0 评论 -
源码分析Dubbo服务提供者、服务消费者并发度控制机制
本文将详细分析< dubbo:service executes=”“/>与< dubbo:reference actives = “”/>的实现机制,深入探讨Dubbo自身的保护机制。 1、源码分析ExecuteLimitFilter @Activate(group = Constants.PROVIDER, value = Constants.EXECUTES_...原创 2018-09-17 12:58:45 · 1547 阅读 · 0 评论 -
源码分析Dubbo 泛化调用与泛化实现原理
本文将重点分析Dubbo的两个重要特性:泛化调用与泛化实现。 1、泛化引用: 通常是服务调用方没有引入API包,也就不包含接口中的实体类,故服务调用方只能提供Map形式的数据,由服务提供者根据Map转化成对应的实体。 2、泛化实现 泛化实现,是指服务提供者未引入API包,也就不包含接口用于传输数据的实体类,故客户端发起调用前,需要将mode转化为Map。从上面分...原创 2018-10-05 21:18:49 · 13650 阅读 · 11 评论 -
源码分析Dubbo网络通讯篇之NettyServer网络事件之线程池
本文主要分析Dubbo线程池的构建过程,主要介绍官方文档中有关于ThreadPool的种类: ● fixed : 固定大小线程池,启动时建立线程,不关闭,一致持有。(缺省) ● cached :缓存线程池,空闲一分钟,线程会消费,需要时重新创建新线程。 ● limited :可伸缩线程池,但池中的线程数只会增长不...原创 2018-07-19 21:03:18 · 1886 阅读 · 0 评论 -
源码分析Dubbo负载算法
Dubbo支持在服务调用方对服务提供者采用负载均衡算法,LoadBalance 接口定义如下:@SPI(RandomLoadBalance.NAME)public interface LoadBalance { /** * select one invoker in list. * * @param invokers invokers. *...原创 2018-07-06 12:47:10 · 2585 阅读 · 0 评论 -
源码分析Dubbo服务提供者启动流程-下篇
本文继续上文Dubbo服务提供者启动流程,在上篇文章中详细梳理了从dubbo spring文件开始,Dubbo是如何加载配置文件,服务提供者dubbo:service标签服务暴露全流程,本节重点关注RegistryProtocol#export中调用doLocalExport方法,其实主要是根据各自协议,服务提供者建立网络服务器,在特定端口建立监听,监听来自消息消费端服务的请求。 Registr...原创 2018-06-05 23:00:18 · 3045 阅读 · 7 评论 -
源码分析Dubbo服务提供者启动流程-上篇
本节将详细分析Dubbo服务提供者的启动流程,请带着如下几个疑问进行本节的阅读,因为这几个问题将是接下来几篇文章分析的重点内容。 1、什么时候建立与注册中心的连接。 2、服务提供者什么时候向注册中心注册服务。 3、服务提供者与注册中心的心跳机制。 从上文中我们得知,服务提供者启动的核心入口为ServiceBean,本节将从源码级别详细剖析ServcieBean的实现原理,即Dubbo服务提...原创 2018-06-01 13:25:27 · 7501 阅读 · 3 评论 -
源码分析Dubbo服务消费端启动流程
通过前面文章详解,我们知道Dubbo服务消费者标签dubbo:reference最终会在Spring容器中创建一个对应的ReferenceBean实例,而ReferenceBean实现了Spring生命周期接口:InitializingBean,接下来应该看一下其afterPropertiesSet方法的实现。 1、源码分析ReferenceBean#afterPropertiesSet Re...原创 2018-06-08 12:24:28 · 4365 阅读 · 0 评论 -
源码分析Dubbo配置规则机制(override协议)
在上篇在讲解RegistryDirectory的时候,dubbo管理员可以通过dubbo-admin管理系统在线上修改dubbo服务提供者的参数,最终将存储在注册中心的configurators catalog,然后通知RegistryDirectory更新服务提供者的URL中相关属性,按照最新的配置,重新创建Invoker并销毁原来的Invoker。 有关官方文档关于动态改变配置(overri...原创 2018-06-24 23:05:57 · 5145 阅读 · 4 评论 -
源码分析Dubbo系列文章
本系列文章主要针对Dubbo2.6.2(dubbox2.8.4)版本,从源码的角度分析Dubbo内部的实现细节,加深对Dubbo的各配置参数底层实现原理的理解,更好的指导Dubbo实践,其目录如下: 1、源码分析Dubbo前置篇-寻找注册中心、服务提供者、服务消费者功能入口 2、源码分析Dubbo服务提供者启动流程-上篇 3、源码分析Dubbo服务提供者启动流程-下篇 4、源码分析Dubb...原创 2018-06-09 22:57:09 · 24356 阅读 · 3 评论 -
源码分析Dubbo Invoker概述----服务发现、集群、负载均衡、路由体系
Invoker,负载网络调用组件,底层依懒与网络通信,Invoker主要负责服务调用,自然与路由(比如集群)等功能息息相关,本节先从整体上把控一下Dubbo服务调用体系,服务发现、集群、负载均衡、路由机制等整个知识体系,梳理整理Dubbo Invoker整个类图如下: 主要有如下接口群 1、Invocation(调用上下文环境) 1.1 Invocation: 1)String get...原创 2018-06-10 17:20:45 · 7033 阅读 · 0 评论 -
源码分析Dubbo服务注册与发现机制RegistryDirectory)
RegistryDirectory,基于注册中心的服务发现,本文将重点探讨Dubbo是如何实现服务的自动注册与发现。从上篇文章,得知在消息消费者在创建服务调用器(Invoker)【消费者在初始时】时需要根据不同的协议,例如dubbo、registry(从注册中心获取服务提供者)来构建,其调用的方法为Protocol#refer,基于注册中心发现服务提供者的实现协议为RegistryProtocol...原创 2018-06-18 22:33:18 · 12473 阅读 · 3 评论 -
源码分析Dubbo集群容错策略
前面的文章,已经单独对服务发现(Directory、RegistryDirectory)、路由机制(Router)、负载均衡机制(LoadBalance),本节将重点分析集群容错机制(AbstractClusterInvoker),AbstractClusterInvoker就是将上述机制融合在一起,整个集群容错中,上述组件扮演的角色见下图所示,本文将重点分析AbstractClusterInvo...原创 2018-07-08 23:18:17 · 2329 阅读 · 0 评论 -
Dubbo路由机制概述
上一节我们主要讲解了利用dubbo-admin如何进行参数的动态修改,本节将重点介绍集群实现中另外一个实现细节:路由机制,Dubbo的路由机制主要解决的目的就是服务调用时,从已知的所有服务提供者中根据路由规则刷选服务提供者。 1、Dubbo路由机制概述 以下内容来源于官方文档: 以上是Dubbo 路由机制的基本知识,接下来从源码的角度分析一下其实现原理。 2、Route...原创 2018-06-28 20:20:23 · 12403 阅读 · 6 评论 -
源码分析Dubbo网络通讯篇之NettyServer网络事件派发机制(Dispatch)
本节将主要学习Dubbo是如何使用Netty来实现网络通讯的。 从官网我们得知,Dubbo协议是使用单一长连接来进行网络传输,也就是说服务调用方持久与服务提供者建立一条连接,所有的服务调用调用信息通过。 一条TCP连接进行传输,在网络层至少要考虑如下问题: 1、服务端,客户端网络通讯模型(线程模型) 2、传输(编码解码、序列化)。 3、服务...原创 2018-07-17 12:27:34 · 2817 阅读 · 0 评论 -
源码分析Dubbo网络通信篇NettyServer、HeaderExchangeServer
本文主要分析一下NettyServer,HeaderExchangeServer实现细节。 1、NettyServer NettyServer整个类图如下: 首先从全貌上大概看一下NettyServer对象所持有的属性:AbstractPeer 1、private final ChannelHandler handler : 事件...原创 2018-07-23 12:23:56 · 2569 阅读 · 0 评论 -
源码分析Dubbo网络通讯篇概要总结(类图一览、服务端、客户端网络构造流程一览)
从本节开始将开始深入学习Dubbo网络通讯的底层实现细节,在深入学习Dubbo网络模型时,首先应从整体上了解Dubbo的网络通讯模型、线程模型是怎样的?下图是Dubbo官方给出的线程模型: 涉及如下方面: 1)网络调用客户端。 2)网络调用服务端。 3)网络传输,编解码、序列化。 4)网络服务端转发模型、线程池。 下面给出与上述网络模型对应的详细类图: 上述类做一个简单的结束...原创 2018-07-12 12:18:51 · 2077 阅读 · 0 评论 -
Dubbo服务治理之灰度发布方案(版本发布控制影响范围)
1、方案背景 背景:基于Dubbo服务的治理,是否可以支持业务级别的灰度发布、是否基于业务参数的路由转发。例如以GIS为例,当发布一个新版本时,是否可以以按照解析地址或合作伙伴来区分,版本发布之初,只希望地址为:广东省的解析请求发送到新版本,而其他的地址请求还是使用旧版;或者根据合作伙伴例如UCP(优享寄)的请求转发到新版本服务器,其他合作伙伴还是转发到旧版,达成业务级别的灰度发布,控制新版...原创 2018-10-15 12:45:02 · 13700 阅读 · 8 评论