RPC服务 RPC相关概念详解,以及如何设计一个RPC框架
Posted 程序少年与猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RPC服务 RPC相关概念详解,以及如何设计一个RPC框架相关的知识,希望对你有一定的参考价值。
1.RPC是什么
RPC是远程过程调用(Remote Procedure Call)的缩写形式。RPC的概念与技术早在1981年由Nelson提出。1984年,Birrell和Nelson把其用于支持异构型分布式系统间的通讯。Birrell的RPC 模型引入存根进程( stub) 作为远程的本地代理,调用RPC运行时库来传输网络中的调用。Stub和RPC runtime屏蔽了网络调用所涉及的许多细节,特别是,参数的编码/译码及网络通讯是由stub和RPC runtime完成的,因此这一模式被各类RPC所采用。
简而言之,RPC就是“像调用本地方法一样调用远程方法”。
2.RPC原理
RPC的简化版原理如下图所示,核心是代理机制。主要包含以下几个方面(注意异常处理):
本地代理存根: Stub
本地序列化反序列化
网络通信
远程序列化反序列化
远程服务存根: Skeleton
调用实际业务服务
原路返回服务结果
返回给本地调用方
3.流行的RPC框架
很多语言都内置了RPC技术。Java RMI .NET Remoting 远古时期,就有很多尝试,
Corba(Common ObjectRequest Broker Architecture)公共对象请求代理体系结 构,OMG组织在1991年提出的公用对象请求代理程序结构的技术规范。底层结构是基于 面向对象模型的,由OMG接口描述语言(OMG Interface Definition Language,OMG IDL)、对象请求代理(Objec tRequest Broker,ORB)和IIOP标准协议(Internet Inter ORB Protocol,也称网络ORB交换协议)3个关键模块组成。
COM(Component Object Model,组件对象模型)是微软公司于1993年提出的一种 组件技术,它是一种平台无关、语言中立、位置透明、支持网络的中间件技术。很多老 一辈程序员心目中的神书《COM本质论》。
4.如何设计一个RPC框架
既然RPC的核心是代理,那我们在设计RPC框架的时候有必要考虑:使用JDK动态代理还是用AOP?RPC还用到了共享接口,序列化也是我们需要考量的:XML、文本、JSON、还是二进制?传输协议:基于TCP还是HTTP?结构如下所示:
1. 共享:POJO实体类定义,接口定义。
2. RPC是基于接口的远程服务调用。Java下,代理可以选择动态代理,或者AOP实现。
3. 序列化和反序列化的选择:
- 语言原生的序列化,RMI,Remoting
- 二进制平台无关,Hessian,avro,kyro,fst等
- 文本,JSON、XML等
4. 网络传输:
- TCP/SSL
- HTTP/HTTPS
5. 通过接口查找具体的业务服务实现。
以上是关于RPC服务 RPC相关概念详解,以及如何设计一个RPC框架的主要内容,如果未能解决你的问题,请参考以下文章