dubbo源码分析
文章平均质量分 68
当服务越来越多时,服务 URL 配置管理变得非常困难,需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和 Failover
MC赵小叔
很高兴结交更多高手
展开
-
dubbo源码分析 -- 网络编解码
我们在上篇文章中讲述了序列化反序列化组成有意义的信息,然后这些信息需要经过网络进行传送,数据转成网络格式,再由网络格式转成应用程序的数据用的组件分别叫做编码器和解码器。1.什么是粘包、拆包? 粘包客户端发送多个请求给服务器,多个请求包粘成一个发送方为了提高效率。往往会收集一定数量后一笔发送出去,这就粘到一个包分析:dubbo 的远程调用是基于 ...原创 2018-07-28 20:43:08 · 698 阅读 · 8 评论 -
dubbo源码分析 - 序列化与反序列化
概念:序列化:把对象转换为字节序列的过程称为对象的序列化。 反序列化:把字节序列恢复为对象的过程称为对象的反序列化。 在Dubbo RPC中,同时支持多种序列化方式:(1)dubbo序列化,阿里尚不成熟的java序列化实现。(2)hessian2序列化:hessian是一种跨语言的高效二进制的序列化方式,但这里实际不是原生的hessian2序列化,而是阿里修改过的hes...原创 2018-07-28 20:42:35 · 2213 阅读 · 6 评论 -
dubbo源码分析 - provider 接收与发送原理
provider 接收 consumer 请求 provider 的扩展点调用 provider 响应 consumer 调用 dubbo 服务调用总结1、provider 接收 consumer 请求同 consumer 一样 provider 默认也是通过 netty 进行网络通信的。在之前的分析 dubbo 进行服务暴露(NettyServer#doOpen)的时候, 它是通过 ...原创 2018-07-28 20:42:17 · 1000 阅读 · 7 评论 -
dubbo源码分析-consumer 发送与接收原理
1、consumer 发送扩展我们先来看一下 dubbo 中 consumer 端的请求发送原理,也就是从 InvokerWrapper#invoke 开始,在 consumer 服务引用分析的时候,我们知道根据 Invoke 调用的时候, dubbo 会创建 ProtocolListenerWrapper与 ProtocolFilterWrapper 来用集成框架使用者的扩展包含:Invok...原创 2018-07-28 20:42:03 · 1261 阅读 · 6 评论 -
dubbo集群容错之directory目录
directory接口的实现类有两个:StaticDirectory,RegistryDirectory。其中StaticDirectory中的Static关键词来看,就知道,这个其实是不会动态变化的,从下图知道,他的Invoker是通过构造函数传入,StaticDirectory用得比较少,主要用在服务对多注册中心的引用官网:Directory 代表多个 Invoker,可以把它看成 L...原创 2018-07-28 20:40:34 · 841 阅读 · 6 评论 -
dubbo集群容错之loadbalance负载均衡
LoadBalance首先查看 LoadBalance 接口Invoker select(List> invokers, URL url, Invocation invocation) throws RpcException;LoadBalance 定义了一个方法就是从 invokers 列表中选取一个AbstractLoadBalanceAbstractLoad...原创 2018-07-22 21:33:53 · 3702 阅读 · 6 评论 -
dubbo集群容错之router路由规则
Router服务路由, 根据路由规则从多个Invoker中选出一个子集AbstractDirectory是所有目录服务实现的上层抽象, 它在list列举出所有invokers后,会在通过Router服务进行路由过滤。 Router在应用隔离,读写分离,灰度发布中都发挥作用。 灰度发布 概念:灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布...原创 2018-07-22 21:32:45 · 7698 阅读 · 4 评论 -
dubbo集群容错之cluster集群
官网是这么说Cluster的:Cluster 将 Directory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个一句话就是:应对出错情况采取的策略。...原创 2018-07-22 21:33:24 · 944 阅读 · 3 评论 -
dubbo源码解析-集群容错架构设计
开始之前先来一波概念: 上图为官网的架构图,它是从设计的角度而非使用角度画出,但是其中的Directory、Router、LoadBalance这三个关键词标注重点 进入代理类的Invoker方法中 ,边看时序图,边走着代码,现在执行序列图的①,到达MockClusterInvoker,执行invoke就要开始进入到集群,也...原创 2018-07-19 20:21:24 · 318 阅读 · 3 评论 -
dubbo服务引用-原理
描述一下dubbo服务引用的过程,原理 既然你提到了dubbo的服务引用中封装通信细节是用到了动态代理,那请问创建动态代理常用的方式有哪些,他们又有什么区别?dubbo中用的是哪一种?(高频题) 除了JDK动态代理和CGLIB动态代理外,还知不知道其他实现代理的方式?(区分度高) 使用本地方式调用远程服务,就需要使用代理,一种是JDK的动态代理,一种是CGLIB的动态代...原创 2018-07-19 20:20:24 · 957 阅读 · 3 评论 -
dubbo服务暴露-zookeeper订阅信息缓存
1.dubbo如何订阅zookeeper信息,什么时候更新本地的zookeeper信息缓存文件registry.subscribe();结合上图开始走代码: 设置了监听回调地址,即回调给FailbackRegistry中的notify从代码可以看到创建了持久节点,因为false,下面开始对该节点设置监听,开始更新的服务信息,服务启动和记得点更新回...原创 2018-07-19 20:17:43 · 4194 阅读 · 2 评论 -
dubbo服务暴露-整体框架设计(总结)
服务暴露的整个过程引入了本地暴露和远程暴露,一句话概括--->Service-->Invoker -->Exporter原创 2018-07-19 20:16:46 · 325 阅读 · 2 评论 -
dubbo服务引用-zookeeper创建节点
1.服务提供者能实现失效踢出是什么原理(高频题)上篇文章是以getRegistry贯穿始末,这篇也将是根据一行代码registry.register(registedProviderUrl);来阐述。 创建节点: 2.zookeeper的有哪些节点,他们有什么区别?讲一下应用场景重点快开始:zookeeper节点分两种(持久节点Pers...原创 2018-07-19 20:16:14 · 5137 阅读 · 8 评论 -
dubbo源码解析-zookeeper连接
1.dubbo一般选择什么注册中心,还有别的选择吗? zookeeper的java客户端你使用过哪些?本篇重要的内容getRegistry(originInvoker);通过时序图理下思路:源码中封装的很好的,我们有时很难看到实用的价值,其中在3步骤内隐藏了很多内容。红框中具体会调用哪个子类,这就需要看看继承体系图再来个ZookeeperReg...原创 2018-07-19 20:15:41 · 812 阅读 · 2 评论 -
Dubbo源码解析-本地暴露与远程暴露
本篇讲的是本地暴露,面试主要问得多是远程暴露,因为远程暴露涉及到了zookeeper和netty.比如和zookeeper相关的最常问的两道题是服务提供者能实现失效踢出是根据什么原理?,dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?.当然如果这两个你答得好,还会往下问,比如zookeeper实现分布式锁,zookeeper选举机制等等,netty能问...原创 2018-07-19 20:08:22 · 2540 阅读 · 0 评论 -
Dubbo源码解析-服务暴露原理
服务发布和服务的引用到底什么实现的呢?我们追踪这个问题进行下面的学习? 首先我们通过控制台查看服务启动过程中,日志记录了什么? 通过日志看出发布的过程:①暴露本地服务 ② 暴露远程服务 ③启动netty ④ 连接zookeeper ⑤注册到zookeeper ⑥监听zookeeperThe service ready on spring sta...原创 2018-07-19 20:11:51 · 380 阅读 · 1 评论 -
Dubbo内核解析-Spi
1.dubbo架构原理 dubbo四大角色关系图 2.dubbo的SPI实现 什么是JDK的SPi(Service Provider Interface) 相对于api 来说我们都熟悉,但是spi知道的较少一些,因为我们大多是使用api,参与开源项目较少,spi是给拓展者使用的,对于一个好的开源框架来说,有必要留一些拓展点让参与者尽量黑盒拓展,而不是白盒修改代码,否则的话框...原创 2018-07-15 21:34:23 · 1356 阅读 · 1 评论 -
Dubbo内核解析-SPi(二)
前言 本篇是spi的第二篇,紧接上一篇Dubbo内核解析-Spi,主要讲解spi中新增的AOP。首先也是先从Spring的AOP出发。 Spring的AOP理解 Spring的AOP增强方式一共有5种,分别为增强类型 应用场景 前置增强 权限控制、记录调用日志 后置增强 统计分析结果数据 异常增强 通过日志记录方法异常信息 最...原创 2018-07-19 20:01:21 · 247 阅读 · 1 评论