39

RPC框架是啥?

 6 years ago
source link: https://segmentfault.com/a/1190000018932798?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

在我刚刚了解分布式的时候,经常对RPC和分布式有些混淆,甚至一直以为两者对等,所以我们先看看他们有什么 区别

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

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

那么RPC是什么呢?

百度百科是这样表示的:

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

它甚至给出了 工作原理 ,这一点很惊喜。

IZbYRrj.jpg!web

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

我喜欢搜查更多的信息资料,所以我又找到了 知乎 上的回答。

v63mQrQ.png!web

知乎 1.7k 的点赞,应该还是可以参考的。

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

至于 为什么使用RPC ?答主也提到,无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如不同系统间的通讯,甚至不同组织间的通讯。

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

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

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

2uqq2yy.png!web

可以这样说,

  • 客户端调用:负责发起RPC调用,为调用方用户提供使用API。
  • 服务端响应:主要是服务端业务逻辑实现。
  • 序列化/反序列化:负责对RPC调用通过 网络传输的内容进行序列化与反序列化 ,不同的RPC框架有不同的实现机制。一般分为 文本(XML、JSON)与二进制(Java原生的、Hessian、protobuf、Thrift、Avro、Kryo、MessagePack) ,需要注意的是,不同的序列化方式在可读性、码流大小、支持的数据类型及性能等方面都存在较大差异,我们可以根据需要自行选择。
  • Stub:我们看成代理对象,它会屏蔽RPC调用过程中的复杂的 网络处理逻辑 ,使其透明简单,且能够保持与本地调用一样的代码风格。
  • 通信传输:即RPC的底层通信传输模块,一般通过Socket在客户端与服务端之间 传递请求与应答消息

公众号:Java猫说

学习交流群:728698035

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

IRniQnY.jpg!web


Recommend

  • 60

    想搞定微服务,先搞定 RPC 框架?

  • 54
    • www.infoq.cn 6 years ago
    • Cache

    RPC 框架的可靠性设计

    1. 背景 1.1 分布式调用引入的故障 在传统的单体架构中,业务服务调用都是本地方法调用,不会涉及到网络通信、协议栈、消息序列化和反序列化等,当使用 RPC 框架将业务由单体架构改造成分布式系统之后,本地方法调...

  • 77
    • segmentfault.com 6 years ago
    • Cache

    Go 实现简易 RPC 框架

    本文旨在讲述 RPC 框架设计中的几个核心问题及其解决方法,并基于 Golang 反射技术,构建了一个简易的 RPC 框架。 项目地址: Tiny-RPC RPC ...

  • 19
    • 微信 mp.weixin.qq.com 5 years ago
    • Cache

    简易 RPC 框架

    # 需求与设计 ## 需求分析 RPC 全称 Remote Procedure Call ,简单地来说,它能让使用者...

  • 31
    • studygolang.com 4 years ago
    • Cache

    Golang之rpc框架rpcx

    前言 远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。通过该协议程序员可以实现像调取本地函数一样,调取远程服务的函数。这里介绍一个高效的rpc库(rpcx)。

  • 40
    • 微信 mp.weixin.qq.com 4 years ago
    • Cache

    企业级 RPC 框架 zRPC

    近期比较火的开源项目 go-zero 是一个集成了各种工程实践的包含了 Web 和 RPC 协议的功能完善的微服务框架,今天我们就一起来分析一下其中的 RPC 部分 zRPC 。 zRPC 底层依赖 gRPC,内...

  • 11
    • www.cnblogs.com 4 years ago
    • Cache

    RPC 框架设计

    RPC 框架设计 初识 RPC 服务化有什么好处? 防止代码拷贝 防止底层复杂性的扩散 防止公共库的耦合 保证 SQL 的质量,能够解除数据库的耦合 什么是 RPC RPC:...

  • 8

    Yar - 并行的RPC框架(Concurrent RPC framework) 本文地址: https://www.laruence.com/2012/09/15/2779.html 转...

  • 15

    2021年Go生态圈rpc框架benchmark 有朋友问,每年年初的时候我会发布一个rpc的框架的大比拼,今年为啥没有了? 有几个原因,一是我去年下半年换了一份工作,熟悉新的业务耗费了很大精力,导致博客文章相对少了,开源的...

  • 6
    • zhuanlan.zhihu.com 3 years ago
    • Cache

    从 RPC 到服务化框架设计

    从 RPC 到服务化框架设计已认证的官方帐号作者:allendbwu,腾讯 PCG 后台开发工程师目前互联网系统都是微服务化,那么就需要 RPC 调用,因此本文梳理了从 RPC...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK