从2.7.0-2.7.5版本,Dubbo调用链路是如何提升30%性能的

2020-03-02
阅读 6 分钟
3.7k
Dubbo 2.7.5版本发布也有快两个月了,从2.7.0到2.7.5,Dubbo在性能优化上也做了不少事情,据官方的压测结果,在QPS层面,从2.7.0到2.7.5,Dubbo 单次RPC调用链路性能提升了 30%,本文就带大家看一看Dubbo做了哪些改动来提升RPC 调用链路性能。

Dubbo Roadmap与未来展望

2020-02-23
阅读 2 分钟
2.6k
首先介绍一下刘军,他是Apache Dubbo PMC,项目核心维护者,见证了 Dubbo 从重启开源到 Apache 毕业的整个流程。现任职阿里巴巴中间件团队,参与服务框架、微服务相关工作,目前主要在推动 Dubbo 开源的云原生化。

Dubbo源码解析(四十八)异步化改造

2019-08-03
阅读 11 分钟
6.2k
2.7大揭秘——异步化改造 目标:从源码的角度分析2.7的新特性中对于异步化的改造原理。 前言 dubbo中提供了很多类型的协议,关于协议的系列可以查看下面的文章: dubbo源码解析(二十四)远程调用——dubbo协议 dubbo源码解析(二十五)远程调用——hessian协议 dubbo源码解析(二十六)远程调用——http协议 dubbo源码解析(二...

Dubbo源码解析(四十七)服务端处理请求过程

2019-06-08
阅读 28 分钟
7.7k
上一篇讲到了消费端发送请求的过程,该篇就要将服务端处理请求的过程。也就是当服务端收到请求数据包后的一系列处理以及如何返回最终结果。我们也知道消费端在发送请求的时候已经做了编码,所以我们也需要在服务端接收到数据包后,对协议头和协议体进行解码。不过本篇不讲解如何解码。有兴趣的可以翻翻我以前的文章,有...

Dubbo源码解析(四十六)消费端发送请求过程

2019-06-04
阅读 16 分钟
5.3k
前一篇文章讲到的是引用服务的过程,引用服务无非就是创建出一个代理。供消费者调用服务的相关方法。本节将从调用方法开始讲解内部的整个调用链。我们就拿dubbo内部的例子讲。

Congratulations Apache® Dubbo™ as a TLP

2019-05-21
阅读 1 分钟
1.8k
Wakefield, MA —20 May 2019— The Apache Software Foundation (ASF), the all-volunteer developers, stewards, and incubators of more than 350 Open Source projects and initiatives, announced today Apache® Dubbo™ as a Top-Level Project (TLP).

Dubbo源码解析(四十五)服务引用过程

2019-04-26
阅读 22 分钟
6k
前面服务暴露过程的文章讲解到,服务引用有两种方式,一种就是直连,也就是直接指定服务的地址来进行引用,这种方式更多的时候被用来做服务测试,不建议在生产环境使用这样的方法,因为直连不适合服务治理,dubbo本身就是一个服务治理的框架,提供了很多服务治理的功能。所以更多的时候,我们都不会选择绕过注册中心,而...

Dubbo源码解析(四十四)服务暴露过程

2019-04-23
阅读 38 分钟
6.7k
本来这一篇一个写异步化改造的内容,但是最近我一直在想,某一部分的优化改造该怎么去撰写才能更加的让读者理解。我觉得还是需要先从整个调用链入手,先弄清楚了该功能在哪一个时机发生的,说通俗一点,这块代码是什么时候或者什么场景被执行的,然后再去分析内部是如何实现,最后阐述这样改造的好处。

Dubbo源码解析(四十三)2.7新特性

2019-03-26
阅读 4 分钟
5.5k
我们知道Dubbo在2011年开源,停止更新了一段时间。在2017 年 9 月 7 日,Dubbo 悄悄的在 GitHub 发布了 2.5.4 版本。随后,版本发布的非常迅速,Dubbo项目被重启了,经过大半年的更新,在2018年2月15日,Dubbo 获得了 14 张赞成票,在无弃权和反对票的情况下,正式通过投票,顺利成为 Apache 基金会孵化项目。现在的Dubb...

Dubbo源码解析(四十二)序列化——开篇

2019-03-14
阅读 6 分钟
4.3k
序列化就是将对象转成字节流,用于网络传输,以及将字节流转为对象,用于在收到字节流数据后还原成对象。序列化的好处我就不多说了,无非就是安全性更好、可跨平台等。网上有很多总结的很好,我在这里主要讲讲dubbo中序列化的设计和实现了哪些序列化方式。

Dubbo源码解析(四十一)集群——Mock

2019-02-14
阅读 14 分钟
3.9k
本文讲解两块内容,分别是本地伪装和服务降级,本地伪装通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过 Mock 数据返回授权失败。而服务降级则是临时屏蔽某个出错的非关键服务,并定义降级后的返回策略。

Dubbo源码解析(四十)集群——router

2019-02-13
阅读 13 分钟
3k
集群——router 目标:介绍dubbo中集群的路由,介绍dubbo-cluster下router包的源码。 前言 路由规则 决定一次 dubbo 服务调用的目标服务器,分为条件路由规则和脚本路由规则,并且支持可扩展 。 源码分析 (一)ConditionRouterFactory {代码...} 该类是基于条件表达式规则路由工厂类。 (二)ConditionRouter 该类是基于...

Dubbo源码解析(三十九)集群——merger

2019-02-12
阅读 8 分钟
2.8k
按组合并返回结果 ,比如菜单服务,接口一样,但有多种实现,用group区分,现在消费方需从每种group中调用一次返回结果,合并结果返回,这样就可以实现聚合菜单项。这个时候就要用到分组聚合。

Dubbo源码解析(三十八)集群——LoadBalance

2019-02-07
阅读 19 分钟
3.3k
负载均衡,说的通俗点就是要一碗水端平。在这个时代,公平是很重要的,在网络请求的时候同样是这个道理,我们有很多机器,但是请求老是到某个服务器上,而某些服务器又常年空闲,导致了资源的浪费,也增加了服务器因为压力过载而宕机的风险。这个时候就需要负载均衡的出现。它就相当于是一个天秤,通过各种策略,可以让...

Dubbo源码解析(三十七)集群——directory

2019-02-06
阅读 26 分钟
3.1k
我在前面的文章中也提到了Directory可以看成是多个Invoker的集合,Directory 的用途是保存 Invoker,其实现类 RegistryDirectory 是一个动态服务目录,可感知注册中心配置的变化,它所持有的 Inovker 列表会随着注册中心内容的变化而变化。每次变化后,RegistryDirectory 会动态增删 Inovker,那在之前文章中我忽略了Reg...

Dubbo源码解析(三十六)集群——configurator

2019-02-05
阅读 6 分钟
3.1k
向注册中心写入动态配置覆盖规则 。该功能通常由监控中心或治理中心的页面完成。在最新的2.7.0版本中有新的配置规则,我会在后续讲解2.7.0新特性的时候提到。这里还是根据旧版本中配置规则来讲解,可以参考官方文档:

Dubbo源码解析(三十五)集群——cluster

2019-02-04
阅读 23 分钟
3.7k
图有点小,见谅,不过可以眯着眼睛看稍微能看出来一点,每一个Cluster实现类都对应着一个invoker,因为这个模式启用的时间点就是在调用的时候,而我在之前的文章里面讲过,invoker贯穿来整个服务的调用。不过这里除了调用失败的一些模式外,还有几个特别的模式,他们应该说成是失败的措施,而已调用的方式。

Dubbo源码解析(三十一)远程调用——rmi协议

2019-02-03
阅读 4 分钟
3.7k
dubbo支持rmi协议,主要基于spring封装的org.springframework.remoting.rmi包来实现,当然最原始还是依赖 JDK 标准的java.rmi.*包,采用阻塞式短连接和 JDK 标准序列化方式。关于rmi协议的介绍可以参考dubbo官方文档。

Dubbo源码解析(三十四)集群——开篇

2019-02-01
阅读 5 分钟
3k
如果说分布式是爸爸住在杭州,妈妈住在上海,那么集群就是两个爸爸,一个住在杭州,一个住在上海。对于分布式和集群有高吞吐量、高可用的目标。对于分布式来说每个服务器部署的服务任务是不同的,可能需要这些服务器上的服务共同协作才能完成整个业务流程,各个服务各司其职。而集群不一样,集群是同一个服务,被部署在...

Dubbo源码解析(三十三)远程调用——webservice协议

2019-01-31
阅读 4 分钟
3.2k
dubbo集成webservice协议,基于 Apache CXF 的 frontend-simple 和 transports-http 实现 ,CXF 是 Apache 开源的一个 RPC 框架,由 Xfire 和 Celtix 合并而来。关于webservice协议的优势以及介绍可以查看官方文档,我就不多赘述。

Dubbo源码解析(三十二)远程调用——thrift协议

2019-01-30
阅读 30 分钟
4.7k
dubbo集成thrift协议,是基于Thrift来实现的,Thrift是一种轻量级,与语言无关的软件堆栈,具有用于点对点RPC的相关代码生成机制。Thrift为数据传输,数据序列化和应用程序级处理提供了清晰的抽象。代码生成系统采用简单的定义语言作为输入,并跨编程语言生成代码,使用抽象堆栈构建可互操作的RPC客户端和服务器。

Dubbo源码解析(三十)远程调用——rest协议

2019-01-29
阅读 18 分钟
4.7k
REST的英文名是RepresentationalState Transfer,它是一种开发风格,关于REST不清楚的朋友可以了解一下。在dubbo中利用的是红帽子RedHat公司的Resteasy来使dubbo支持REST风格的开发使用。在本文中主要讲解的是基于Resteasy来实现rest协议的实现。

Dubbo源码解析(二十九)远程调用——redis协议

2019-01-28
阅读 8 分钟
2.5k
dubbo支持的redis协议是基于Redis的,Redis 是一个高效的 KV 存储服务器,跟memcached协议实现差不多,在dubbo中也没有涉及到关于redis协议的服务暴露,只有服务引用,因为在访问服务器时,Redis客户端可以在服务器上存储也可以获取。

Dubbo源码解析(二十八)远程调用——memcached协议

2019-01-27
阅读 5 分钟
2.3k
dubbo实现memcached协议是基于Memcached,Memcached 是一个高效的 KV 缓存服务器,在dubbo中没有涉及到关于memcached协议的服务暴露,只有服务引用,因为在访问Memcached服务器时,Memcached客户端可以在服务器上存储也可以获取。

Dubbo源码解析(二十七)远程调用——injvm本地调用

2019-01-25
阅读 5 分钟
5.5k
该类继承了AbstractExporter,是本地服务的暴露者封装,其中实现比较简单。只是实现了unexport方法,并且维护了一份保存暴露者的集合。

Dubbo源码解析(二十六)远程调用——http协议

2019-01-24
阅读 8 分钟
3.8k
该类继承了RemoteInvocation类,是在RemoteInvocation上增加了泛化调用的参数设置,以及增加了dubbo本身需要的附加值设置。

Dubbo源码解析(二十五)远程调用——hessian协议

2019-01-23
阅读 10 分钟
6k
本文讲解多是dubbo集成的第二种协议,hessian协议,Hessian 是 Caucho 开源的一个 RPC 框架,其通讯效率高于 WebService 和 Java 自带的序列化。dubbo集成hessian所提供的hessian协议相关介绍可以参考官方文档,我就不再赘述。

Dubbo源码解析(二十四)远程调用——dubbo协议

2019-01-22
阅读 62 分钟
13.9k
Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。反之,Dubbo 缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。这是官方文档的原话,并且官方文档还介绍了为什么使用单一长连接和 NIO 异步通讯以及为什么...

Dubbo源码解析(二十三)远程调用——Proxy

2019-01-15
阅读 24 分钟
6.3k
首先声明叫做代理,代理在很多领域都存在,最形象的就是现在朋友圈的微商代理,厂家委托代理帮他们卖东西。这样做厂家对于消费者来说就是透明的,并且代理可以自己加上一些活动或者销售措施,但这并不影响到厂家。这里的厂家就是委托类,而代理就可以抽象为代理类。这样做有两个优点,第一是可以隐藏代理类的实现,第二...

Dubbo源码解析(二十二)远程调用——Protocol

2019-01-11
阅读 13 分钟
4.5k
远程调用——Protocol 目标:介绍远程调用中协议的设计和实现,介绍dubbo-rpc-api中的各种protocol包的源码,是重点内容。 前言 在远程调用中协议是非常重要的一层,看下面这张图: 该层是在信息交换层之上,分为了并且夹杂在服务暴露和服务引用中间,为了有一个约定的方式进行调用。 dubbo支持不同协议的扩展,比如http、...