关于dubbo:Dubbo源码浅析一RPC框架与Dubbo-京东云技术团队
一、什么是RPC1.1 RPC概念RPC,Remote Procedure Call 即近程过程调用,与之绝对的是本地服务调用,即LPC(Local Procedure Call)。本地服务调用比拟罕用,像咱们利用外部程序(留神此处是程序而不是办法,程序蕴含办法)相互调用即为本地过程调用,而近程过程调用是指在本地调取近程过程进行应用。 而RPC框架就是为了帮忙咱们在本地调用近程过程时,就像调用本地过程一样不便。 1.2 RPC与Http的关系用一句话来总结就是: RPC是一种概念,http是一种协定,能够认为http是Rpc的一种实现,或者Rpc蕴含了http。为什么说蕴含而不是相等,是因为Rpc还有很多基于自定义的Tcp的协定,例如Dubbo等,而咱们常说的rpc即指的除Http之外的基于tcp自定义的协定。 1.3 对于Rpc的思考网上对于Rpc与Http的相干文章并不少,很多人在解释RPC概念时会提到其是执行近程的办法,而后间接得出rpc蕴含http的论断。其实如果依照此概念去思考的话,其实并不能得出Http是Rpc的一种实现。因为http调用的形式,从使用者的角度来说,并不是间接调用其办法,而是依照肯定的形式,欠缺出了一条http申请,而后交由本地客户端进行数据传输。 而绝对比的,如果用过相干Rpc框架,例如Dubbo,是能够像调用本地办法一样间接调用近程办法。而http的调用形式能够认为是一种服务调用,而不是一种办法。 感觉文章博主应该是有过rpc相干的应用教训,有点先入为主了。那么到底rpc与http的关系如何呢,我也思考了很久,前面发现应该从定义上动手,咱们既然在探讨Rpc是什么,怎么能疏忽最简略的定义呢。 Remote Procedure Call,其中"Procedure"依照谷歌翻译有以下几种解释:程序、过程、步骤,并不是办法(Method)。而程序是蕴含办法的,同时也蕴含服务。因而上文中才强调了是一种程序或过程,而不是办法。 1.4 Rpc框架Rpc框架是为了帮忙咱们在本地服务调用近程服务时像调用本地服务一样简略,咱们不须要关怀其底层实现,只须要配置好相应的信息,rpc框架就会帮咱们做这些事。例如在dubbo中,咱们只须要配置好相应的注册核心与想要调用的办法,咱们就能够依照本地调用的形式调用近程服务。 1.5 总结依照咱们上文的梳理过程,能够认为Rpc是一种概念,次要有两种实现,一种是以http形式的服务调用,另一种是以自定义Tcp协定实现的办法调用形式,例如dubbo协定,当然个别rpc框架也都反对http协定。当然,无论是那种形式,最终都是以Tcp/Udp的形式进行传输。 二、Rpc框架2.1 dubbo是什么咱们上文说到Rpc框架就是帮忙咱们在调用近程服务时像调用本地服务一样简略,dubbo就是由阿里巴巴开源的一块rpc框架。 例如,在咱们想调用某个近程办法时,只须要配置好相干配置,而后间接调用即可,dubbo会帮忙咱们将解决两头的过程。 /*省略相干配置*///将配置注册到spring@Resourceprivate QueryPinService queryPinService;//间接应用近程办法,像调用本地服务一样简略ueryPinService.getPinWithConfig(paramMap, null);dubbo整体架构图如下: 节点阐明Provider提供近程服务的服务提供方Registry注册核心Consumer须要调用近程服务的服务生产方Container服务运行的容器Monitor监控核心作用流程大抵如下: 首先服务提供者Provider 启动而后向注册核心注册本人所能提供的服务。 服务消费者Consumer 启动向注册核心订阅本人所需的服务。而后注册核心将提供者元信息告诉给 Consumer, 之后 Consumer 因为曾经从注册核心获取提供者的地址,因而能够通过负载平衡抉择一个 Provider 间接调用。 之后服务提供方元数据变更的话注册核心会把变更推送给服务消费者。 服务提供者和消费者都会在内存中记录着调用的次数和工夫,而后定时的发送统计数据到监控核心。 2.2 dubbo和spring cloud的区别首先两者都是以后支流的微服务框架,不过两者也存在很多差别: 初始定位不同:SpringCloud定位为微服务架构下的一站式解决方案,次要有网关、注册核心、配置核心、监控核心等;Dubbo 是 它的关注点次要在于服务的调用和治理,其中服务调用更时其外围。生态环境不同:SpringCloud依靠于Spring平台,具备更加欠缺的生态体系;而Dubbo一开始只是做RPC近程调用,生态绝对匮乏,当初逐步丰盛起来。调用形式:SpringCloud是采纳Http协定做近程调用,接口个别是Rest格调,比拟灵便;Dubbo是采纳Dubbo协定,接口个别是Java的Service接口,格局固定。但调用时采纳Netty的NIO形式,性能较好。两者组件配置: 很显著SpringCloud领有比dubbo更欠缺的配置,反对的功能性也更强。 相比来说,SpringCloud像一台品牌机,外部所有配置都曾经帮咱们拆卸好了,咱们只须要开箱即用即可。而dubbo则更像是组装机,须要咱们本人抉择配置,只提供了外围的计算能力,而显示器、电源等须要咱们本人拆卸调试应用。 从使用者来说,老手小白更适宜品牌机,傻瓜式一键操作,就能实现咱们想要的成果。而dubbo更适宜电脑高手,本人拆卸本人想要的组件,应用起来更棘手。 作者:京东科技 韩国凯 起源:京东云开发者社区 转载请注明起源