乐趣区

关于dubbo:Dubbo源码浅析一RPC框架与Dubbo-京东云技术团队

一、什么是 RPC

1.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
@Resource
private QueryPinService queryPinService;

// 间接应用近程办法,像调用本地服务一样简略
ueryPinService.getPinWithConfig(paramMap, null);



dubbo 整体架构图如下:

节点 阐明
Provider 提供近程服务的服务提供方
Registry 注册核心
Consumer 须要调用近程服务的服务生产方
Container 服务运行的容器
Monitor 监控核心

作用流程大抵如下:

首先服务提供者 Provider 启动而后向注册核心注册 本人所能提供的服务。

服务消费者 Consumer 启动向注册核心订阅 本人所需的服务。而后注册核心将提供者元信息告诉给 Consumer,之后 Consumer 因为曾经从注册核心获取提供者的地址,因而能够 通过负载平衡抉择一个 Provider 间接调用

之后服务提供方元数据变更的话 注册核心会把变更推送给服务消费者

服务提供者和消费者都会在内存中记录着调用的次数和工夫,而后 定时的发送统计数据到监控核心

2.2 dubbo 和 spring cloud 的区别

首先两者都是以后支流的微服务框架,不过两者也存在很多差别:

  1. 初始定位不同:SpringCloud 定位为微服务架构下的一站式解决方案,次要有网关、注册核心、配置核心、监控核心等;Dubbo 是 它的关注点次要在于服务的调用和治理,其中服务调用更时其外围。
  2. 生态环境不同:SpringCloud 依靠于 Spring 平台,具备更加欠缺的生态体系;而 Dubbo 一开始只是做 RPC 近程调用,生态绝对匮乏,当初逐步丰盛起来。
  3. 调用形式:SpringCloud 是采纳 Http 协定做近程调用,接口个别是 Rest 格调,比拟灵便;Dubbo 是采纳 Dubbo 协定,接口个别是 Java 的 Service 接口,格局固定。但调用时采纳 Netty 的 NIO 形式,性能较好。

两者组件配置:

很显著 SpringCloud 领有比 dubbo 更欠缺的配置,反对的功能性也更强。

相比来说,SpringCloud 像一台品牌机,外部所有配置都曾经帮咱们拆卸好了,咱们只须要开箱即用即可。而 dubbo 则更像是组装机,须要咱们本人抉择配置,只提供了外围的计算能力,而显示器、电源等须要咱们本人拆卸调试应用。

从使用者来说,老手小白更适宜品牌机,傻瓜式一键操作,就能实现咱们想要的成果。而 dubbo 更适宜电脑高手,本人拆卸本人想要的组件,应用起来更棘手。

作者:京东科技 韩国凯

起源:京东云开发者社区 转载请注明起源

退出移动版