上一篇文章《手把手教你写rpc框架系列(一)rpc框架系列总体概览》我们简单的介绍了rpc的总体概览,这篇文章我们介绍下rpc相关的概念信息。
rpc是什么?
RPC的全称是:Remote Procedure Call(RPC),中文含义是远程过程调用,也就是一个类似http请求这种,客户端发送一个request,服务端返回一个response。和http略有不同的是,RPC的调用更像是调用本地服务一样,因此性能和并发更好。
rpc的调用流程
rpc的整个调用流程介绍之前,我们首先来看一张图:
在这个图里面,我们可以看到客户端和服务端分别都有3大部分,分别是:
RPC Proxy Message Protocol Transfer/Network Protocol
基于以上三部分,整个调用流程如下:
1、客户端调用本地的client stub类,然后传递参数给client stub 2、Client stub将传递进来的参数进行编组,然后行程编组的request消息体。 3、client stub通过RPC Proxy(动态代理)向服务端发送消息 4、服务端收到消息之后,将消息体进行解组,得到对应的参数。 5、服务端处理完所有的请求,然后把response进行编组行程消息体。 6、客户端收到response的消息之后,进行解组,得到对应的response。
以上就是整个rpc的调用流程。(图里面展示的内容不太多,这图是网上找的,没找到合适的比较全的图)。
rpc框架需要处理哪些问题
在编写rpc框架的时候,我们从上面的流程可以得出需要解决的以下几个问题:
1、服务需要注册与发现 2、需要对消息进行编组 3、需要对消息进网络传输 4、异常处理 5、安全访问
所以在接下来的实战编写rpc框架项目的时候,我们着重围绕这几个问题来进行展开。
RPC协议是什么
RPC调用过程中需要将参数编组为消息进行发送,接受方需要解组消息为参数,过程处理结果同样需要经编组、解组。消息由哪些部分构成及消息的表示形式就构成了消息协议。
RPC调用过程中采用的消息协议称为RPC协议,关于这里的RPC协议有以下几点说明:
1、RPC协议规定请求、响应消息的格式 2、在TCP(网络传输控制协议)上可选用或自定义消息协议来完成RPC消息交互 3、我们可以选用通用的标准协议(如:http、https),也也可根据自身的需要定义自己的消息协议。
常见的RPC框架有哪些?
在现实业务中,常见的开源rpc框架有很多,例如:
Thrift
Thrift是一个轻量级、跨语言的RPC框架,主要用于各个服务之间的RPC通信,最初由Facebook于2007年开发,2008年进入Apache开源项目。它通过自身的IDL中间语言,并借助代码生成引擎生成各种主流语言的RPC服务端和客户端模板代码。Thrift支持多种不同的编程语言,包括C++、Java、Python、PHP、Ruby、Erlag、Haskell、C#、Cocoa、JavaScript、Nodejs、Smalltalk、OCaml和Golang等。
gRPC
gRPC是一个高性能、通用的开源RPC框架,其由Google2015年主要面向移动应用开发并基于HTTP/2标准协议而设计,基于ProtoBuf序列化协议开发,且支持众多语言开发。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链式功能,从而有助于节省带宽、降低TCP连接次数、节省CPU使用、电池寿命。
grpc相对其他框架来说,支持的语言类型比较多,例如:支持C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#等语言。
Dubbo
Dubbo是一个分布式服务框架,以及SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。 Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,Dubbo自2011年开源后,已被许多非阿里系公司使用,目前Dubbo已经交给Apache基金会维护。
当然还有其他的一些框架,接触比较少,因此暂时不在这里列出了。
以上就是关于rpc的一些简单核心内容说明。阅读此文,相信大家对rpc就有了一个粗矿的轮廓知识了。
还没有评论,来说两句吧...