RPC框架是啥?

本博客 猫叔的博客,转载请申明出处git

在我刚刚了解分布式的时候,常常对RPC和分布式有些混淆,甚至一直觉得二者对等,因此咱们先看看他们有什么区别github

RPC实现了服务消费调用方Client与服务提供实现方Server之间的点对点调用流程,即包括了stub、通讯、数据的序列化/反序列化。且Client与Server通常采用直连的调用方式。服务器

而分布式服务框架,除了包括RPC的特性,还包括多台Server提供服务的负载均衡、策略及实现,服务的注册、发布与引入,以及服务的高可用策略、服务治理等等。网络

那么RPC是什么呢?架构

百度百科是这样表示的:负载均衡

RPC(Remote Procedure Call)—远程过程调用,它是一种经过网络从远程计算机程序上请求服务,而不须要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通讯程序之间携带信息数据。在OSI网络通讯模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。框架

它甚至给出了工做原理,这一点很惊喜。分布式

image

  • 1.调用客户端句柄;执行传送参数
  • 2.调用本地系统内核发送网络消息
  • 3.消息传送到远程主机
  • 4.服务器句柄获得消息并取得参数
  • 5.执行远程过程
  • 6.执行的过程将结果返回服务器句柄
  • 7.服务器句柄返回结果,调用远程系统内核
  • 8.消息传回本地主机
  • 9.客户句柄由内核接收消息
  • 10.客户接收句柄返回的数据

我喜欢搜查更多的信息资料,因此我又找到了知乎上的回答。函数

image

知乎1.7k的点赞,应该仍是能够参考的。性能

恰如回答提到的,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,因为不在一个内存空间,不能直接调用,须要经过网络来表达调用的语义和传达调用的数据。

至于为何使用RPC?答主也提到,没法在一个进程内,甚至一个计算机内经过本地调用的方式完成的需求,好比不一样系统间的通信,甚至不一样组织间的通信。

这里再说一下关于Netty,Netty框架不局限于RPC,更多的是做为一种网络协议的实现框架,好比HTTP,因为RPC须要高效的网络通讯,就能够选择Netty做为基础。除了网络通讯,RPC还须要有高效的序列化框架,以及一种寻址方式,若是是带会话(状态)的RPC调用,还须要有会话的状态保持的功能。

好了,让咱们再来整理一下,什么是RPC

RPC(远程过程调用)通常用来实现部署在不一样机器上的系统之间的方法调用,使得程序可以像访问本地系统资源同样,经过网络传输去访问远端系统资源。通常来讲,RPC框架实现的架构原理都是相似的。

image

能够这样说,

  • 客户端调用:负责发起RPC调用,为调用方用户提供使用API。

  • 服务端响应:主要是服务端业务逻辑实现。

  • 序列化/反序列化:负责对RPC调用经过网络传输的内容进行序列化与反序列化,不一样的RPC框架有不一样的实现机制。通常分为文本(XML、JSON)与二进制(Java原生的、Hessian、protobuf、Thrift、Avro、Kryo、MessagePack),须要注意的是,不一样的序列化方式在可读性、码流大小、支持的数据类型及性能等方面都存在较大差别,咱们能够根据须要自行选择。

  • Stub:咱们当作代理对象,它会屏蔽RPC调用过程当中的复杂的网络处理逻辑,使其透明简单,且可以保持与本地调用同样的代码风格。

  • 通讯传输:即RPC的底层通讯传输模块,通常经过Socket在客户端与服务端之间传递请求与应答消息

公众号:Java猫说

学习交流群:728698035

现架构设计(码农)兼创业技术顾问,不羁平庸,热爱开源,杂谈程序人生与不按期干货。

Image Text
相关文章
相关标签/搜索