RPC学习记录

news/2024/9/20 5:39:22/文章来源:https://www.cnblogs.com/gaoshikenan/p/18110613

RPC是帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地方法一样的体验。

RPC是一个远程调用,需要通过网络来传输数据,并且RPC常用于业务系统之间的数据交互,需要保证其可靠性,所以一般默认采用TCP来传输。

 网络传输数据必须是二进制的,但是调用方请求的出入参数都是对象,对象没法直接进行网络传输,需要提前把转换成可传输的二进制,而且要求转换过程是可逆的,这个过程叫做序列化。

数据需要有一定的格式,这种约定内容叫做协议。大多数协议会分成两部分,分别是数据头和消息体。数据头一般用于身份识别,包括协议标识、数据大小、请求类型、序列化类型等,消息体主要是请求的业务参数信息和扩展属性等。

序列化

网络通信

常见的网络IO模型:同步阻塞,同步非阻塞,IO多路复用,异步非阻塞IO。

比较常用的是同步阻塞和IO多路复用。

IO多路复用:多个网络连接的IO可以注册到一个复用器(select)上,当用户进程调用了select,那么整个进程会被阻塞,同时内核会监视所有select负责的socket,当任何一个select数据准备好之后,这个时候用户进程再调用select 函数,将数据从内核拷贝到用户进程。

在编程语言上,无论C++还是Java,在高性能的网络编程框架编写上,大多数基于Reactor模型。其中最典型的就是java的netty框架,而Reactor是基于IO多路复用的。在非高并发场景下,同步阻塞IO是最常见的。

 RPC就是把拦截到的方法参数,转成可以在网络中传输的参数,并保证在服务提供方能正确的还原出语义,最终实现像调用本地一样调用远程方法。

心跳机制:健康状态、亚健康状态、死亡状态。

路由策略:

负载均衡:

重试机制:考虑业务逻辑幂等,超时时间重置,去掉有问题节点,

应用优雅关闭:

优雅启动

熔断机制:调用端可以通过熔断机制进行自我保护,防止调用下游服务出现异常,

RPC是解决应用间相互通信的框架,而应用之间的远程通信一般是不会暴露在公网上的。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/710023.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ComfyUI使用IC-Light实现打光特效

在线体验 https://huggingface.co/spaces/lllyasviel/IC-Light 国内可以用魔塔 https://modelscope.cn/studios/AI-ModelScope/IC-Light/summaryComfyUI IC-Light 原生插件: https://github.com/huagetai/ComfyUI-Gaffer 模型下载: https://huggingface.co/lllyasviel/ic-lig…

YiShaAdmin:一款基于.NET Core Web + Bootstrap的企业级快速开发框架

前言 今天大姚给大家分享一款基于.NET Core Web + Bootstrap的企业级快速后台开发框架、权限管理系统,代码简单易懂、界面简洁美观(基于MIT License开源,免费可商用):YiShaAdmin。 项目官方介绍 YiShaAdmin 基于.NET Core Web开发,借鉴了很多开源项目的优点,让你开发Web…

Atcoder 题目选做(五)

Atcoder 题目选做(五)(20/20)推荐阅读:#6、#10、#12、#14\(\text{By DaiRuiChen007}\)1. [ARC159E] Difference Sum Query Problem Link给定 \(n,m\),定义 \(x\in[1,n]\) 的深度 \(f(x)\) 为:初始 \([l,r]=[1,n]\)。 第 \(i\) 次操作求出 \(l,r\) 按 \(a_{i\bmod m} : b…

一键自动化博客发布工具,用过的人都说好(腾讯云篇)

使用一键自动化博客发布工具blog-auto-publishing-tools把博客发布到腾讯云篇上。虽然头条现在非常强大,但是我还是不得不吐槽一下头条的博客发布,居然不支持markdown格式。 并且在某些浏览器上还会出现编辑页面打不开的情况,让我一度怀疑是我浏览器的问题。 不过,这都不重…

Atcoder 题目选做(四)

Atcoder 题目选做(四)(20/20)推荐阅读:#4、#9、#10、#18、#19\(\text{By DaiRuiChen007}\)1. [AGC059C] Guessing Permutation for as Long as Possible Problem Link给定 \(\dfrac{n\times (n-1)}2\) 个 \([1,n]\) 中的二元对的顺序,求有多少个 \(n\) 阶排列 \(P\) 使得…

Github打不开解决办法(最新有效)

Github打不开解决办法(最新有效) 1. 先看没解决之前的截图: 2. 解决方法(手动修改DNS): 2.1 以win11为例,第一步:打开 设置 - 网络和Internet,找到 高级网络设置 ,如下图所示:2.2 第二步:找到WLAN(有线连接的话选择本地连接),点击 查看其他属性,如下图所示…

C#在DataGridView表格中操作Access数据库

C#在DataGridView表格中 直接 添加 修改 删除数据 效果图 Form1.cs 完整代码using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.O…

ciscn2024初赛部分题目复现

ciscn2024初赛部分题目复现(更新ing)gdb_debug 64位ida反编译,将主要加密部分使用chatgpt写成更容易理解的python形式如下: def encrypt_string(s):v17 = []for i in range(len(s)):v17.append(ord(s[i]) ^ rand_1[i])ptr = list(range(len(s)))for k in range(len(s) - 1,…

C#连接Access数据库 查询和新增 示例

C#连接Access数据库 查询和新增 示例 项目中需要做一个写程序操作日志的需求,仅本机使用。这时Access数据库就是一个非常好的选择,简单,好用。 下面仅仅是一个示例,简单写出 查询 和 新增 等 C#操作 Access 数据库的 代码 效果图 clsDBHelperAccess.csusing System; using …

UE4 动态生成网格

说明 在游戏中动态改变网格数量和形状等,该功能是寻路功能的前期准备,即在基础移动地基上方,构建一层网格,任何移动的操作都可以基于该网格进行计算。从而在编辑器模式下能够更方便进行调试 InstancedStaticMeshComponent 其是一种用于优化静态网格渲染性能的技术。Instanc…

FormCreate中在事件中获取api

FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持5个UI框架,并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定form-create中在事件中获取api FormCreate 是一个可以通过 JSON 生成具…

【最新】别再发邮件了,必须在开源之夏后台申请,50%的人竟然都没有报名成功!

引言 近期我们注意到很多学生朋友通过邮件向导师申请报名,请注意!!!​这是无效的,请必须通过“开源之夏”官方后台申请报名,请仔细参考这篇【报名攻略】 所以,我们特此举办这次宣讲会,目的是向所有感兴趣的学生详细介绍Apache DolphinScheduler社区在开源之夏中提供的项…