RPC协议

  1. 1. 什么是远程过程调用
  2. 2. 痛点
  3. 3. RPC框架入门
    1. 3.1 动态代理
    2. 3.2 序列化
    3. 3.3 NIO
    4. 3.4 服务注册中心
  4. 4. RPC vs REST

1. 什么是远程过程调用

RPC是指计算机A上的进程,调用另外一台计算机B上的进程,其中A上的调用进程被挂起,而B上的被调用进程开始执行,当值返回给A时,A进程继续执行。

注意这中间,AB都经历了内核态和用户态之间的转变。

整个流程如图所示:

fig1.jpg

2. 痛点

那远程过程调用到底解决了什么问题呢?

由于各服务部署在不同机器上,要想再服务间进行远程调用免不了网络通信过程,服务消费方每调用一个服务都要写大量和网络通信相关的代码,RPC框架实际上完成了对网络通信的细节的封装,让消费方能够像调用本地服务一样调用远程服务。

3. RPC框架入门

RPC框架中主要有三个角色,

  • Provider 服务提供方
  • Consumer 服务消费方
  • Registry 服务注册中心

使用服务注册中心的原因是,在SOA框架中,往往Provider和Consumer的数量不唯一,通过注册中心注册服务,可以做负载均衡。

fig2.jpg

fig3.jpg

服务提供者启动后主动向注册中心注册机器ip, port以及提供的服务列表;服务消费者启动时向注册中心获取服务提供方地址列表,可实现软负载均衡和Failover.
RPC框架当中需要使用很多技术,以下列出来主要的一部分: (do match internal amazon c***** framework!)

3.1 动态代理

3.2 序列化

为了能在网络上传输和接收Java对象,需要进行序列化和反序列化的操作

3.3 NIO

基于Netty这一IO通信框架

Netty4详解

3.4 服务注册中心

Redis/ ZooKeeper/ Consul/ Etcd

4. RPC vs REST

是理念的不同,REST是一种设计风格,REST的URL主体是资源,是名词,而且也仅支持HTTP协议,规定了使用HTTP Method来表达本次要做的动作,类型个位数… 这些动作表达了对资源仅有的几种转换方式。

而RPC的思想,是把本地函数映射到API,也就是说一个API对应的是一个函数,本地有什么函数,远程也可以调用这个函数;是建立在采用的协议之上的。

可以参考WEB开发中,使用JSON-RPC好,还是RESTful API好?获取更多细节。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 stone2paul@gmail.com

文章标题:RPC协议

文章字数:627

本文作者:Leilei Chen

发布时间:2020-01-31, 20:59:08

最后更新:2020-02-01, 22:06:57

原始链接:https://www.llchen60.com/RPC%E5%8D%8F%E8%AE%AE/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏