RPC调用链可以将远程过程调用变成一个有效的堆栈。

当我们编写应用程序时,我们中的许多人认为REST是服务间通信的一个通用标准。然而,还有许多其他形式的通信,RPC就是其中之一。值得注意的是,通信方式的选择取决于许多因素,如业务需求、遗留代码、技术和预算,更不用说你选择的架构模式。

在分布式计算中很受欢迎,RPC(远程过程调用)是一个程序,其中计算机程序在不同的计算机(服务器)中执行,而程序(代码)抽象出客户端和服务器之间的连接。

你们中的许多人可以在互联网上了解RPC,但我发现很难找到关于 "RPC链"的信息。我甚至不知道它的存在,直到最近,我在微软研究院读到一篇有趣的论文。

1. 引言:RPC与RPC链的关系

RPC链解决了与标准RPC有关的性能和效率问题,一个单一的任务可能涉及到对不同站点的几个客户服务器调用。如果你看下图,你可以立即注意到其中的差别。

RPC链允许客户端连续调用多个服务器(A-B-E-F-C-D-A),而无需每次都让客户端参与。

2. 主要机制

作为RPC模型中以服务函数(远程方法)形式提供的服务器服务,它们可以在一个函数链中进行逻辑排序,指定执行的下一个服务函数(可能在不同的服务器上)。正如作者所说,它们可以是C#或Java方法(存储并因此从远程存储库检索到服务),但它们不能引用非本地变量,因为它们需要独立编译。

3. 链条断裂:检测和恢复

任何服务器都可能在RPC链执行过程中崩溃。它是由一个简单的机制检测出来的,这个机制被称为链心跳,链会定期向创建它的客户端发送一个活着的消息,并带有其独特的链标识符。

如果检测到链条断裂,客户端会重新传输请求,然后,由于每个服务器的缓存结果,这个过程会从链条断裂的主机继续进行。

结语

RPC链将RPC调用组合成一条链,从而可以减少使用复杂嵌套服务调用的应用程序中的网络跳数(从而减少端到端的延迟)和带宽,因为客户端不会收到不必要的数据。关于RPC链的更多详细信息,请阅读原始论文。

参考:

  • RPC chains
  • RPC Chains: Efficient Client-Server Communication in Geodistributed Systems
  • 一种高效通信机制-RPC调用链 https://www.rayylee.xyz/2022/01/16/rpc_call_chains_20220116/

RPC调用链通信方法相关推荐

  1. Android调用链追踪方法

    开启debuggable 修改AndroidManifest.xml,添加android:debuggable="true" 修改系统ro.debuggable的属性 ./mpro ...

  2. 深入剖析通信层和RPC调用的异步化(上)

    <Netty 进阶之路>.<分布式服务框架原理与实践>作者李林锋深入剖析通信层和 RPC 调用的异步化.李林锋此后还将在 InfoQ 上开设 Netty 专题持续出稿,感兴趣的 ...

  3. 项目通信之RPC调用——java简单实现

    微服务项目通信方法很多,有像springcloud解决方案的http通信,还有像阿里Dubbo的RPC通信,这里简单实现RPC调用.一共2个端,客户端server和客户端client.项目demo很简 ...

  4. 调用父级方法_通信:找到任意组件实例的findComponents系列方法,5个终极方案

    已经介绍了两种组件间通信的方法:provide / inject 和 dispatch / broadcast.它们有各自的使用场景和局限,比如前者多用于子组件获取父组件的状态,后者常用于父子组件间通 ...

  5. 如何在PHP中实现链式方法调用

    写程序的人都喜欢偷懒,希望少打几行代码,并且让代码看起来很酷. 所以很多人写程序都会选择三元运算取代if..else.... 而用过JS的人应该都见识过js中的链式方法. 如 somevars.fun ...

  6. vue父与子组件,子与子组件间的方法调用和通信

    子与子之间通信的前提是有一个共同的父亲, 首先,在vue中,$+name是vue系统定义的实例属性或方法,vue的api上面写的有链接实例属性. $parent指的是当前组件的父实例.$refs指的是 ...

  7. (十四) Nepxion-Thunder分布式RPC集成框架 - 调用链

    Nepxion-Thunder(QQ 群 471164539)发布在https://github.com/Nepxion/   调用链根据单端和多端分成两种方式 单端链式调用 多端跨进程调用链 单端链 ...

  8. 执行链java_java 方法调用链

    缘起 对所有的调用做入参拦截,为了更便于查阅,希望可以得到方法的签名( MethodSignature ). 一.AOP 此时,想获取拦截的方法名称较为简单. @Around("pointc ...

  9. PHP 阿里云OpenAPI签名[RPC 调用机制]·一键登录取号[云通信号码认证服务]

    什么是RPC调用机制,我理解为 可以用 http https 访问的接口. 官方文档:RPC 调用机制 - 阿里云SDK - 阿里云https://help.aliyun.com/document_d ...

最新文章

  1. php_标准类型-学习笔记
  2. [云炬创业基础笔记]第二章创业者测试20
  3. c语言用数组实现栈的插入,用数组实现栈的功能的C语言代码?
  4. [复变函数]第19堂课 5.3 解析函数在无穷远处的性质
  5. python设计模式4-建造者模式
  6. freopen()函数文件流重定向和文件流的清除
  7. 学习 TList 类的实现[1]
  8. Java数组集合转换
  9. [转帖]「白帽黑客成长记」Windows提权基本原理(上)
  10. 联想笔记本键盘排线_笔记本键盘排线怎么拆 thinkpad
  11. 使用mentohust解决ubuntu下校园网无法连接
  12. linux把m4s格式转换mp4,m4s格式(B站m4s怎么转换成MP4)
  13. java提升路线书单(原文自知乎刘欣)
  14. dedecms{dede:sql}{dede:php}标签的用法
  15. (一百三十七)梳理fragment的isAdded
  16. 右键txt打开html,文件解压不了怎么办 右键菜单中选择解压文件
  17. iOS-根据银行卡号判断银行名称
  18. HT66F2390/STM32——AM2320温湿度传感器
  19. Redhat enterprise Linux server 7.2(MaiPO)安装过程
  20. Python break语句:多层循环中break是终止(或跳出)本层(也即所在层)循环,后者说是跳出最内层循环。也就是break只能跳出一层循环而不是多层循环

热门文章

  1. L2-007. 家庭房产
  2. Scrapy爬取美女图片续集 (原创)
  3. GROUP BY,WHERE,HAVING之间的差别和使用方法
  4. 【观点】微博的弊端和它的真正意义
  5. 国外博客透露JavaFX 2.0路线图
  6. Codeforces Round #564 (Div. 2) C. Nauuo and Cards
  7. 实践:《从头到脚撸一个多人视频聊天 — 前端 WebRTC 实战(一)》
  8. Linux快速复制或删除大量小文件
  9. 【软件开发综合实验】文本压缩软件
  10. eclipse安装Freemaker IDE插件