浅谈RPC

栏目: 服务器 · 发布时间: 5年前

内容简介:从我们学习编程开始,就对『LPC』(local Procedure Call)十分熟悉,而PRC就是类似LPC的一种调用机制。在服务化、微服务化逐渐成为大中型分布式系统架构的主流方式的过程中,RPC作为基本通用服务成为系统标配的一部分。RPC 的全称是 Remote Procedure Call 是一种进程间通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的,本质上编写的调用代码基本相同。RPC的概念

从我们学习编程开始,就对『LPC』(local Procedure Call)十分熟悉,而PRC就是类似LPC的一种调用机制。在服务化、微服务化逐渐成为大中型分布式系统架构的主流方式的过程中,RPC作为基本通用服务成为系统标配的一部分。

RPC 的全称是 Remote Procedure Call 是一种进程间通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用 程序员 显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的,本质上编写的调用代码基本相同。RPC的概念源于Bruce Jay Nelson的论文Implementing Remote Procedure Calls,有兴趣的可以阅读一下。

RPC有许多成熟、开源的实现方案,这些方案均由大厂负责设计、开发,各有优点。

grpc(google) https://github.com/grpc/grpc

thrift(facebook):独特的序列化格式和IDL,支持很多编程语言。thrift的代码看似分层很清楚,client、server选择很多,但没有一个足够通用,每个server实现都只能解决很小一块场景,每个client都线程不安全。实际使用中非常麻烦。thrift的代码质量也比较差,接口和生成的代码都比较乱。 https://github.com/apache/thrift

dubbo(alibaba) https://github.com/alibaba/dubbo

sofa-pbrpc(baidu):百度PS基于boost::asio和protobuf实现的RPC框架,这个库代码工整,接口清晰,支持同步和异步。sofa-pbrpc存在产品线自研框架的鲜明特点:不支持内部其他协议,对名字服务、负载均衡、服务认证、连接方式等多样化的需求的抽象不够一般化。 https://github.com/baidu/sofa...

baidu-rpc(baidu)提供稳定的RPC框架;适用各类业务场景,提供优秀的延时,吞吐,并发度,具备优秀的多核扩展性;接口易懂,用户体验佳。有完备的调试和运维接口(HTTP)。 https://github.com/brpc/brpc

RPC原理和流程

浅谈RPC

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

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

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

4)server stub收到消息后进行解码;

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

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

7)server stub将返回结果打包成消息并发送至消费方;

8)client stub接收到消息,并进行解码;

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

RPC中需求关注的几个核心问题

1)序列化

接口定义方面需要关注客户端和服务端各需要哪些数据来确保调用的正常返回、调用次序和调用结果正确表示。

调用方:接口名称、方法名、参数类型及参数值、超时时间、requestID,标识唯一请求id。

返回方:返回值、状态码、requestID

传输协议方面现在最通用的方式是使用protobuf,能够有效对数据进行压缩并提供高效的转换效率。另外常用的协议还包括idl,百度内部使用nshead+mcpack等,facebook自定义了格式化方法。

2)通信模型:主流RPC框架都提供BIO+NIO,提供同步、异步通信机制

3)使用zookeeper、bns服务提供服务发现。

4)提供接口能够让用户自定义负载均衡算法。

5)提供策略框架提供业务策略处理能力。

参考资料:

1、 http://birrell.org/andrew/pap...

2、 http://blog.jobbole.com/92290/

3、 http://blog.csdn.net/mindfloa... 、http://blog.csdn.net/mindfloating/article/details/39474123

浅谈RPC


以上所述就是小编给大家介绍的《浅谈RPC》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Clojure编程

Clojure编程

Chas Emerick、Brian Carper、Christophe Grand / 徐明明、杨寿勋 / 电子工业出版社 / 2013-3-26 / 99.00元

Clojure是一种实用的通用语言,它是传奇语言LISP的方言,可与Ruby、Python等动态语言相媲美,更以无缝Java库、服务,以及拥有JVM系统得天独厚的资源优势而胜出。本书既可以用来熟悉Clojure基础知识与常见例子,也可了解其相关的实践领域与话题,更可以看到这一JVM平台上的LISP如何帮助消除不必要的复杂性,为大家在编程实践中解决最具挑战性的问题开辟新的选择——更具灵活性,更适于W......一起来看看 《Clojure编程》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具