• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

第一次接触RPC

tech admin 3个月前 (09-16) 348次浏览 0个评论 扫描二维码

很久很久以前经常听到同事提到 RPC,因为对工程的了解没那么多,所以也没去纠结 RPC,最近自己也在着手写一写工程代码,用到了 dubbo,顺便了解了 RPC。

RPC(Remote Produce Call)指的是进程间通信。就是允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,且不需要显式编码这个远程调用的细节。

RPC 解决的问题:

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

以下一段描述转载自知乎,加上自己一点乱写(红字标出)。

因为如今大公司内部系统由大大小小的许多服务组成,服务部署在不同的机器上,如果服务间的调用都是走网络通信,未免也太过复杂,服务消费方没调用一个服务都要写一部分网络通信的代码,太过繁琐且容易出错。如果能像本地调用一个去调用远程连接这样该多好啊,这种方式就是 RPC 远程调用。

那么问题又来了。

远程问题如何通信?

客户端如何寻址服务端?

客户端服务端之间以何种形式传输的信息?

客户端与服务端建立 TCP 链接,相比于 HTTP 通信协议少去应用层的许多东西。数据的传输就是通过这个 TCP 的链接。

如果使用 HTTP,那么每一个客户端都要协议对请求和解析响应一整套的东西,很麻烦,任何一个客户端都要重复相应的操作,这个也是可以说明为什么不适用 HTTP 作为交互的协议方式。

客户端寻址主要是通过事先写入地址,也就类似于服务注册,注册服务后,调用对应的方法也就是自动通过 TCP 链接传输到对应的地址。

客户端服务端传输信息首先都是通过网络二进制,那么也就是涉及到序列化和反序列化的问题。

所以需要在传输的时候需要对数据进行序列化和反序列化,现在的 RPC 框架都是帮我们处理好这块。

RPC 远程调用目的:通过像调用本地服务一样远程调用另一台服务器上的服务来完成需求。(核心)

最终问题:如何才能不需要显式编码远程调用的细节去远程调用服务呢?

RPC 原理

上图就是提供一个 RPC 调用关系图,两个角色服务提供者/服务消费者,消费者负责不断的消费获取想要的数据。现有的 RPC 框架都会将中间的部分全部封装起来,所以我们只要关注服务接口的编写,调用者只要调用接口就好,关于中间的数据传输以及服务发现等等都不需要自己去关注。所以刚才提到的调用者就像调用本地程序一样,说的就是这点,调用者只需要实现接口的调用即可。

分布式

在面对高性能的要求下,实现分布式处理负载均衡以及 HA 高可用等性能要求时,这个时候凸显的优势就明显了。RPC 在内部服务中间调用居多,由于使用量的庞大,所以对性能的要求很高。关于分布式 RPC 你需要知道 zookeeper、dubbo 等之间的协作,剩下的就是堆机器就可以解决了。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明第一次接触 RPC
喜欢 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!