![](https://img-blog.csdnimg.cn/20191230224551822.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Dubbo源码解析
Dubbo源码解析系列
Huangy远
github地址 https://github.com/yellowFarLu
展开
-
Dubbo优雅停机
Dubbo优雅停机背景对于任何一个线上应用,如何在服务更新部署过程中保证客户端无感知是开发者必须要解决的问题,即从应用停止到重启恢复服务这个阶段不能影响正常的业务请求。理想条件下,在没有请求的时候再进行更新是最安全可靠的,然而互联网应用必须要保证可用性,因此在技术层面上优化应用更新流程来保证服务在更新时无损是必要的。传统的解决方式是通过将应用更新流程划分为手工摘流量、停应用、更新重启三个步...原创 2020-01-17 11:03:29 · 1963 阅读 · 0 评论 -
dubbo源码解析——cluster
我们再来回顾一下官网的对于集群容错的架构设计图Cluster将 Directory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个。简单来说,就是应对出错情况采取的策略,当然这么说还是有些不准确的.那我们再来看看这个接口及其继承体系图:看继承体系图中,我们也可以看到了他有9个实现类,换个角度来说,就是有9中应对策略,下面的...原创 2018-10-28 19:16:55 · 281 阅读 · 0 评论 -
dubbo源码解析——服务调用过程
本文中,将进入消费端源码解析(具体逻辑会放到代码的注释中)。本文先是对消费过程的总体代码逻辑理一遍,个别需要细讲的点,后面会专门的文章进行解析。首先,把完整的流程给出来:服务消费方发送请求应用启动的时候,消费者会订阅服务,并且拉取所有订阅的提供者节点信息到Directory中 正式调用开始,在Directory中找出本次集群中的全部invokers 在Router中,将上一步的全部...原创 2018-11-10 00:00:00 · 240 阅读 · 0 评论 -
dubbo源码解析——Directory
首先来看一下directory接口的实现类,他主要有两个实现类,一个是StaticDirectory,一个是RegistryDirectory,本文主要解析RegistryDirectory。StaticDirectoryStaticDirectory中的Static关键词来看,就知道,这个其实是不会动态变化的,从下图知道,他的Invoker是通过构造函数传入,StaticDirect...原创 2018-11-10 00:00:00 · 106 阅读 · 0 评论 -
dubbo源码解析——Router
我们先来看看Router的继承体系图从图中可以看出,他有三个实现类,分别是ConditionRouter,MockInvokersSelector,ScriptRouterMockInvokersSelector判断是否需要筛选mock invoker的路由,相对比较简单@Override public <T> List<Invoker<T&g...原创 2018-11-12 00:00:00 · 133 阅读 · 0 评论 -
Dubbo服务暴露过程
概览dubbo暴露服务有两种情况,一种是设置了延迟暴露(比如delay=”5000”),另外一种是没有设置延迟暴露或者延迟设置为-1(delay=”-1”):设置了延迟暴露,dubbo在Spring实例化bean(initializeBean)的时候会对实现了InitializingBean的类进行回调,回调方法是afterPropertySet()。ServiceBean实现了如果Ini...原创 2018-12-09 00:00:00 · 522 阅读 · 0 评论 -
Dubbo源码分析—SPI扩展
SPI扩展前言站在一个框架作者的角度来说,定义一个接口,自己默认给出几个接口的实现类,同时 允许框架的使用者也能够自定义接口的实现。现在一个简单的问题就是:如何优雅的根据一个接口来获取该接口的所有实现类呢?JDK SPI 正是为了优雅解决这个问题而生,SPI 全称为 (Service Provider Interface),即服务提供商接口,是JDK内置的一种服务提供发现机制。目...原创 2019-12-09 00:00:00 · 148 阅读 · 0 评论 -
Dubbo整体架构总结
RPC由来 在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。 而一旦踏入公司,尤其是大型互联网公司就会发现,公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队负责。这时就会遇到两个问题: (1) 要搭建一个新服务,免不了需要依赖他人的服务,而现在他人的服...原创 2019-12-09 00:00:00 · 262 阅读 · 0 评论 -
Dubbo负载均衡
LoadBalanceDubbo中有四种LB的方式:随机、轮询、最少活跃和一致哈希接口LoadBalance 的定义说明,LoadBalance 的实现只是在一个服务提供的调用者列表(invokers)中选出一个调用者即可,默认的负载方式是随机负载均衡(@SPI(RandomLoadBalance.NAME)),我们也可以指定使用哪种负载均衡:<dubbo:reference ...原创 2019-12-09 00:00:00 · 458 阅读 · 0 评论 -
Dubbo源码解析——限流
Dubbo限流Dubbo的限流作用于提供方。可以在高并发的情况,保证系统的稳定性、安全性。避免让系统被流量压垮,导致整体服务不可用。实践提供者添加类似配置<dubbo:service interface="com.huang.yuan.api.service.DemoService" ref="demoServiceImpl" version="1.0"...原创 2019-12-14 00:00:00 · 249 阅读 · 0 评论 -
Dubbo源码解析—网络调用
Dubbo网络调用背景我们知道Dubbo远程调用(消费过程)的大致流程如下:从Dirctory中获取该方法的invoker列表 经过router路由的筛选,得到满足条件的invoker列表 经过Cluster容错调用invoker 经过loadBalance筛选出最终执行的invoker 经过消费端的filter链 网络请求及序列化 .....提供者方执行请求,返回结...原创 2019-12-15 00:00:00 · 187 阅读 · 0 评论 -
dubbo源码解析——Directory
首先来看一下directory接口的实现类,他主要有两个实现类,一个是StaticDirectory,一个是RegistryDirectory,本文主要解析RegistryDirectory。StaticDirectoryStaticDirectory中的Static关键词来看,就知道,这个其实是不会动态变化的,从下图知道,他的Invoker是通过构造函数传入,StaticDirectory用...原创 2018-10-07 17:12:12 · 1284 阅读 · 1 评论