当前位置:XML > XML功能

微服务之RPC简述

彭洋 http://baijiahao.baidu.com/s?id=1706067766689650938&wfr=spider&for=pc

一、什么是RPC

RPC(RemoteProcedureCall)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

比如说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,就需要通过网络来表达调用的语义和传达调用的数据,而这种方式就是rpc

RPC的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。

二、为什么需要rpc

1、分布式部署及微服务

当我们的系统访问量增大、业务增多时,我们会发现一台单机运行此系统已经无法承受。此时,我们可以将业务拆分成几个互不关联的应用,分别部署在各自机器上,以划清逻辑并减小压力。

2、不同技术选型

公司业务规模扩大,有可能引入不同的语言,比如A团队要开发CPU密集型的采用c++语言,B团队要开发IO密集型的采用了PHP,不同语言之间如何通讯。

3、系统高可用性差

因为所有的功能开发最后都部署到同一个框架里,运行在同一个进程之中,一旦某一功能涉及的代码或者资源有问题,那就会影响整个框架中部署的功能。

三、RPC的调用分类

同步调用客户方等待调用执行完成并返回结果。

异步调用客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。

若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。

异步和同步的区分在于是否等待服务端执行完成并返回结果。

四、如何调用他人的远程服务

由于各服务部署在不同机器,服务间的调用免不了网络通信过程,服务消费方每调用一个服务都要写一坨网络通信相关的代码,不仅复杂而且极易出错。

如果有一种方式能让我们像调用本地服务一样调用远程服务,而让调用者对网络通信这些细节透明,那么将大大提高生产力,比如服务消费方在执行$client-getUserInfo()时,实质上调用的是远端的服务。这种方式其实就是RPC(RemoteProcedureCallProtocol),在各大互联网公司中被广泛使用,如阿里巴巴的hsf、dubbo(开源)、Facebook的thrift(开源)、Googlegrpc(开源)。

要让网络通信细节对使用者透明,我们自然需要对通信细节进行封装,我们先看下一个RPC调用的流程:

1)、服务消费方(client)调用以本地调用方式调用服务;

2)、clientstub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;

3)、clientstub找到服务地址,并将消息发送到服务端;

4)、serverstub收到消息后进行解码;

5)、serverstub根据解码结果调用本地的服务;

6)、本地服务执行并将结果返回给serverstub;

7)、serverstub将返回给客户端;

8)、clientstub接收到消息,并进行解码;

9)、服务消费方得到最终结果。

4.1传输协议的选择

不过需要稍稍注意的是其调用协议通常包含传输协议和编码协议。

传输协议:可以是自定义的tcp协议,也可以是


转载请注明:http://www.vviuov.com/lcbx/1063029.html

  • 上一篇文章:
  • 下一篇文章: 没有了