【夯实Dubbo】什么是RPC框架?

本文属于【夯实Dubbo】系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习 Dubbo 技术,希望能给读者带来一些干货。系列目录如下(可能随着写作的进行,会做一些调整):

【夯实Dubbo】什么是 RPC 框架?
【夯实Dubbo】Dubbo 的核心特性
【夯实Dubbo】Dubbo 架构和 zookeeper 注册中心的搭建和配置
【夯实Dubbo】Dubbo 和 Spring Boot 整合完成服务注册
【夯实Dubbo】Dubbo 的配置总结
【夯实Dubbo】Dubbo 的负载均衡设置
【夯实Dubbo】Dubbo 的服务熔断和降级处理
【夯实Dubbo】Dubbo 的核心原理

这篇文章主要来分享一下什么是 RPC 框架,关于 RPC 的解释,网上也有很多资料,为了保证教程的完整性,我在这里也简单分享一下,同时自己也顺便巩固巩固。在介绍 RPC 之前,先来看看我们传统是怎么调用的。

比如现在我要调用一个方法,是获取到订单信息,那么在传统项目中,一般是直接调用的,如下:
传统结构
现在,基于高性能和高可靠等因素的考虑,你决定将系统改造为分布式应用,将很多可以共享的功能都单独拎出来,比如上面说到的订单信息,你单独把它放到一个服务里头,让别的服务去调用它。所以就变成了下面这样:

分布式的结构
这下问题来了,服务A里头并没有 OrderServiceImpl 这个类,那它要怎样调用服务B的 OrderServiceImpl 的 get 方法呢?这就可以用到 RPC 框架了,所以我们知道,RPC 框架主要用来解决两个问题:

  1. 解决分布式系统中,服务之间的调用问题。
  2. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。

我们来看看 RPC 是怎么解释的:Remote Procedure Call,是指的远程过程调用,是一种进程间通信方式,它是一种技术思想,而不是一个规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。所以细节对程序员来说是不用管的。

我们来看下 RPC 框架内部都做了啥,引用一下网上的图:

RPC内部原理
从这幅图中可以看出,整个 RPC 的调用过程涉及到一个过程和几个概念,我们来总结下:

  1. Client:调用端,以本地调用方式调用服务,就相当于上面的 Server A。
  2. client stub:接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体(序列化);client stub找到服务地址,并将消息发送到服务端。
  3. server stub:收到消息后进行解码,反序列化;server stub根据解码结果调用本地的服务;本地服务执行并将结果返回给server stub。server stub将返回结果打包成消息并发送至消费方。
  4. client stub接收到消息,并进行解码,反序列化,服务消费方得到最终结果。

这个过程,我们可以用一个流程图来表示,会更加直观:

RPC流程
所以可以看到,RPC 的两个核心模块是:通讯和序列化。RPC 的框架有很多,比如:Dubbo、gRPC、Thrift、HSF等等,我主要来总结一下 Dubbo 的使用。

OK,这篇文章大家对 RPC 的框架有了一个大概的了解了,下一篇开始进入 Dubbo 的学习。


扫描下方二维码关注我的公众号,回复 “Dubbo” 即可获取 Dubbo 的视频学习教程。
注:视频供大家学习使用,严禁用于商业用途。

程序员私房菜

发布了227 篇原创文章 · 获赞 4625 · 访问量 262万+

猜你喜欢

转载自blog.csdn.net/eson_15/article/details/90714016