当前位置: 首页 > news >正文

中间件复习之-RPC框架

什么是RPC框架?

RPC(Remote Procedure Call):远程过程调用。当多个应用部署在多个服务器上时,由于他们不在一个内存空间上,因此需要网络来进行通信,而RPC允许它像调用本地方法一样调用远程服务

RPC原理

服务消费方通过RPC客户端调用服务,服务接收方通过RPC服务端接收请求进行处理。
整体分四个模块:

  • 远程代理
  • 序列化
  • 网络传输
  • 反序列化
    在这里插入图片描述

RPC核心功能实现

RPC服务消费方

  • 连接管理
  • 负载均衡
  • 请求路由
  • 超时处理
  • 健康检查

连接管理

消费方需要保持与服务方的长链接,用于传输请求也用于返回结果。那该如何实现呢?
下面是连接管理在整个服务消费调用过程中的位置:
在这里插入图片描述

连接管理核心有以下3个需要思考的点:

  • 连接初始化的时机:灵活根据业务场景选择策略
    • 懒加载:服务刚启动的时候不初始化,等有请求调用时再初始化连接。建好后再次有请求就复用这个连接。(网关场景一般使用懒加载。因为网关业务是公司所有流量的入口,下游服务可能有n个服务*n个节点。一个网关服务启动后,如果要等全部连接建立完毕之后启动会很慢,并且如果有模块没什么流量还占用着连接会有资源的浪费。一般网关服务上线后先分配少点的流量然后再预热,预热完后开放。)
    • 预加载:模块启动后先不接流量,把所有的连接、socket全部建好了然后再提供服务。(一般普通应用服务都是这种模式)
  • 连接数的维护:多建几条连接防止单条连接失效。
  • 心跳/重连:多条连接有探活机制,保证有多条连接可用。

负载均衡

负载均衡功能是确保多个服务提供方节点流量均匀/合理,支持节点扩容与灰度发布。
负载均衡在消费方rpc调用的位置:
在这里插入图片描述
负载均衡的一些方式:轮询、随机、取模、带权重、一致性Hash

请求路由

当业务方想按照某些请求标签来确定是不是要走该节点时,可以使用请求路由。通过一系列规则过滤出可以选择的服务提供方节点列表,在应用隔离,读写分离,灰度发布中都发挥作用。
请求路由在消费方调用过程中的位置:
在这里插入图片描述
请求路由功能的设计:

  • 规则匹配:
    • 待比较的属性(IP/流量标签)
    • 运算符(等于、大于、不等于等等)
    • 属性匹配值(跟哪个值进行匹配)
    • 匹配完的结果(行为)
  • 数据结构设计:因为是一系列规则,所以可以是链表结构
    在这里插入图片描述
    如按照IP分流规则举例:attribute=IP,operator=IN,value=IP1,IP2,Servers:Node1,Node2

超时处理

消费端对于长时间没有返回的请求,需要作出异常处理,及时释放资源。
超时处理在RPC调用链路中的位置:
在这里插入图片描述
超时处理的核心逻辑:

  • 工作线程的阻塞位置

    • 等待服务端回包通知(接收到请求了,判断是否超时)如下图:
    • 在这里插入图片描述
    • 在这里插入图片描述
  • 超时逻辑

    • 工作线程等待回包通知
    • 如果数据在预期的时间内返回,则终止等待唤醒工作线程
    • 如果超时则抛出异常
  • 超时处理的核心数据结构

    • Map:SessionID(请求级唯一)-WindowData(内部包含Event)

RPC服务提供方

  • 队列/线程池
  • 超时丢弃
  • 优雅关闭
  • 过载保护

队列/线程池

服务提供方可以将不同类型的请求,放入各自的队列,每个队列分配独立的线程池,做到资源隔离。
队列/线程池在服务提供方处理逻辑中的位置:
在这里插入图片描述
队列数/线程数的选择可以按照实际压测后的情况去调整。

超时丢弃

超时丢弃主要是将已经超时(超时的定义主要是调用方配置的超时时间)的请求快速失败,缓解队列堆积,防止服务持续不可用。
超时丢弃在服务提供方处理逻辑中的位置:
在这里插入图片描述
超时丢弃的处理逻辑:
在这里插入图片描述
io任务入队,任务包含3个字段,第一个是超时时间,第二个是处理请求的handler处理器,第三个是入队时间。
下面是出队以及判定超时的逻辑:
在这里插入图片描述

优雅关闭

优雅关闭主要是进程退出前确保接收到的请求全部处理完成
在这里插入图片描述
优雅关闭的实现:通过2种方式通知调用方

  • 返回数据中带关闭信息
  • 发送关闭协议通知调用方
优雅关闭的服务端实现
  • 监听关闭信号 kill -12
  • 改变服务状态
  • 通知客户端
监听关闭信号 kill -12

服务启动时候,使用Signal注册监听
在这里插入图片描述

改变服务状态

修改服务上下文的状态
在这里插入图片描述

通知客户端本服务端已关闭

在这里插入图片描述

优雅关闭的客户端实现
  • 根据节点返回内容改变节点状态

  • 在这里插入图片描述

  • 节点探活

  • 在这里插入图片描述

过载保护

服务提供方为保证正常运行,主动丢弃超出处理能力外的请求。
过载保护在调用链路下的位置:
在这里插入图片描述
过载保护的实现原理:IO线程任务入队时判断是否设置了队列长度限制,若有限制,则和队列中实际任务数做比较,若超出则丢弃。
在这里插入图片描述

RPC高级功能

  • 服务熔断
  • 服务降级
  • 限流
  • 动态权重

服务熔断

当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。
在这里插入图片描述

服务降级

对业务降级,跳过异常调用,返回关键数据,确保服务可用。(一般是熔断时结合降级,返回default数据,使业务不中断)
在这里插入图片描述

动态权重

为刚启动节点分配较低权重,逐步提高权重。
在这里插入图片描述

限流

通过限制调用放流量,以达到对服务提供方的保护。

相关文章:

中间件复习之-RPC框架

什么是RPC框架? RPC(Remote Procedure Call):远程过程调用。当多个应用部署在多个服务器上时,由于他们不在一个内存空间上,因此需要网络来进行通信,而RPC允许它像调用本地方法一样调用远程服务。 RPC原理 服务消费方通过RPC客户…...

AcWing 787. 归并排序——算法基础课题解

AcWing 787. 归并排序 文章目录 题目描述CGo模板 题目描述 给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n。 第二行包含 n 个整数(所有…...

力扣1379---找出克隆二叉树的相同节点(Java、DFS、简单题)

目录 题目描述: 思路描述: 代码: (1): (2): 题目描述: 给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 ori…...

FLink学习(三)-DataStream

一、DataStream 1&#xff0c;支持序列化的类型有 基本类型&#xff0c;即 String、Long、Integer、Boolean、Array复合类型&#xff1a;Tuples、POJOs 和 Scala case classes Tuples Flink 自带有 Tuple0 到 Tuple25 类型 Tuple2<String, Integer> person Tuple2.…...

Failed to resolve import “Home/components/HomeNew.vue“. Does the file exist?

错误信息 [plugin:vite:import-analysis] Failed to resolve import "/apis/home.js" from "src/views/Home/components/HomeNew.vue". Does the file exist? 错误原因 路径错误 解决方法...

《价值》-张磊-高瓴资本-3-建立人脉和信任;顺应趋势,把握机遇;

第三章 价值投资初试炼 2005.6.1 创办高瓴资本 许多人问我为什么一直在创业&#xff0c;其实我倒没想到自己非要创业成功不可&#xff0c;只是觉得一定要做点事&#xff0c;做点有意义的事。归根到底&#xff0c;可能是“爱折腾&#xff0c;不满足现状&#xff0c;爱挑战自己”…...

游戏引擎中的物理应用

一、 角色控制器 Character Controller和普通的动态对象&#xff08;Dynamic Actor &#xff09;是不同的&#xff0c;主要的三个特点是: 它拥有可控制的刚体间的交互假设它是有无穷的摩擦力&#xff08;可以站停在位置上&#xff09;&#xff0c;没有弹性加速和刹车几乎立即…...

复现k8s黄金票据学习

1.什么是黄金票据 在 Kubernetes 中&#xff0c;"黄金票据"并不是一个常见的术语。可能你想了解的是服务账户&#xff08;Service Account&#xff09;。服务账户是 Kubernetes 中用于身份验证和授权的一种机制。它们允许 Pods 或其他工作负载在 Kubernetes 集群中与…...

08-JavaScript BOM定时器及JS动画

1. 设置定时器 1.1设置超时定时器 超时调用需要使用window对象的setTimeout()方法&#xff0c;该方法接受两个参数&#xff1a;调用函数或计算表达式和以毫秒为单位的时间&#xff08;即在执行代码前需要等待多少毫秒&#xff09;。 //setTimeout(callback, after) //callba…...

边缘计算盒子与云计算:谁更适合您的业务需求?

边缘计算盒子和云计算&#xff0c;这两个概念听起来可能有点复杂&#xff0c;但其实它们就是两种不同的数据处理方式。那谁更适合您的业务需求呢&#xff1f;咱们来详细说说。 边缘计算盒子&#xff0c;就像是个小型的数据处理中心&#xff0c;放在离你业务现场比较近的地方。它…...

浅聊什么是Redis?

需求&#xff1a;MySQL面临大量的查询&#xff0c;即读写操作&#xff0c;因此类比CPU&#xff0c;给数据加缓存&#xff0c;Redis诞生。应用程序从MySQL查询的数据&#xff0c;在Redis设置缓存&#xff08;记录在内存中&#xff0c;无需IO操作&#xff09;&#xff0c;后再需要…...

java算法day43 | ● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

1049. 最后一块石头的重量 II 核心思想&#xff1a; 尽量让石头分成重量相同的两堆&#xff0c;相撞之后剩下的石头最小&#xff0c;这样就化解成01背包问题了。 是不是感觉和昨天讲解的416. 分割等和子集 (opens new window)非常像了。那么分成两堆石头&#xff0c;一堆石头的…...

练气第六天

问:ANR怎么分析&#xff1f; ANR问题&#xff0c;这其实是一个非常综合性的问题&#xff0c;因为anr会涉及CPU负载&#xff0c;内存空间大小&#xff0c;线程锁&#xff0c;GC回收&#xff0c;这里面每个点&#xff0c;都是非常考验我们基本功的。 分析ANR问题&#xff0c;需…...

认识 Redis 与 分布式

Redis 官网页面 Redis官网链接 Redis 的简介 Redis 是一个在内存中存储数据的中间件 一方面用于作为数据库&#xff0c;另一方面用于作为数据缓存&#xff0c;适用于分布式系统中 Redis 基于网络&#xff0c;进行进程间通信&#xff0c;把自己内存中的变量给别的进程&#xf…...

Linux初学(十二)AWK进阶

一、AWK 1.1 简介 AWK是Linux中重要的文本处理工具Linux三剑客只一处理的对象可以是一个具体的文件&#xff0c;也可以是一个命令的执行结果AWK按行读取文件&#xff0c;将每一行视为一条记录 案例一&#xff1a;获取系统中每个用户的uid 方法一&#xff1a;cat /etc/passwd |…...

文字识别 Optical Character Recognition,OCR CTC STN

文字识别 Optical Character Recognition,OCR 自然场景文本检测识别技术综述 将图片上的文字内容,智能识别成为可编辑的文本。 场景文字识别(Scene Text Recognition,STR) OCR(Optical Character Recognition, 光学字符识别)传统上指对输入扫描文档图像进行分析处理,识…...

四、MySQL读写分离之MyCAT

一、读写分离概述 1、什么是读写分离&#xff1a; 读写分离&#xff1a;就是将读写操作分发到不同的服务器&#xff0c;读操作分发到对应的服务器 &#xff08;slave&#xff09;&#xff0c;写操作分发到对应的服务器&#xff08;master&#xff09; ① M-S (主从) 架构下&…...

通讯录项目实现

引言&#xff1a;通过顺序表的逻辑实现通讯录。这里就不讲关于顺序表的函数了。如果有不明白的可以看我写的顺序表的博客。 目录 顺序表与通讯录的比较 各源文件文件大榄 Contact.c中通讯录相关函数的定义 初始化和销毁通讯录 添加联系人&#xff1a; 删除联系人&#xf…...

xss相关知识点与绕过思路总结

前言 对xss的绕过进行了系统的学习与实践后&#xff0c;重新审视一下xss&#xff0c;对他的绕过进行一个总结。 &#xff08;当然我也是个小白&#xff0c;这些也是我当时瞎鸡儿乱搞绕过了几个xss自己做的小总结&#xff09; 可能有点丑陋&#xff0c;献丑了。 好博客推荐 …...

深入解析语言模型:原理、实战与评估

引言 随着人工智能的飞速发展&#xff0c;语言模型作为自然语言处理&#xff08;NLP&#xff09;的核心技术之一&#xff0c;日益受到业界的广泛关注。本文旨在深入探讨语言模型的原理、实战应用以及评估方法&#xff0c;帮助读者更好地理解和应用这一技术。 一、语言模型原理…...

Unity游戏逆向第一步:手把手教你从APK里提取Assembly-CSharp.dll(附ILSpy使用指南)

Unity游戏逆向实战&#xff1a;从APK提取C#脚本的完整指南 在移动游戏开发领域&#xff0c;Unity引擎凭借其跨平台特性占据了重要地位。对于开发者而言&#xff0c;了解Unity打包后的文件结构不仅是调试的必要技能&#xff0c;也是学习优秀游戏设计的重要途径。本文将详细介绍如…...

别再只盯着机械式了!一文看懂MEMS、Flash、OPA等固态激光雷达怎么选(附避坑指南)

固态激光雷达技术全景&#xff1a;从MEMS到OPA的实战选型策略 激光雷达技术正在经历一场静默革命——机械旋转部件逐渐被半导体芯片取代&#xff0c;就像当年电子管被晶体管淘汰的历史重演。在自动驾驶和机器人领域摸爬滚打多年的工程师都清楚&#xff0c;选择激光雷达就像在迷…...

Wechatsync(文章同步助手)自动发布神器

下载地址:https://www.chajianxw.com/product-tool/16773.html 安装教程:https://www.chajianxw.com/tutorial/how-to-install-chrome-plugin.html AI-Skills 技能包一键调用:https://ai-skills.ai/?inviteCode=S2JV3NCK 目录 一、引言 二、系统整体架构设计 核心技术栈…...

2026 年 Redis 面试题全解析:原理 + 实战 + 高频考点

Redis 高频面试题全解析&#xff08;2026 最新版&#xff09; Redis 作为后端开发高并发、高可用架构的核心组件&#xff0c;是面试中必问的核心考点。本文从基础入门、核心原理、高并发实战、高可用架构、进阶运维五大模块&#xff0c;整理大厂高频面试题与标准答案&#xff…...

【Gemini赋能Google Maps路线优化实战指南】:20年导航算法专家亲授5大降本增效核心策略

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini赋能Google Maps路线优化的底层逻辑与演进脉络 Google Maps 路线规划正经历从传统图算法向多模态智能推理的范式迁移。Gemini 模型并非简单替代 Dijkstra 或 A*&#xff0c;而是作为实时决策中枢…...

Python 爬虫高级实战:异地多机房爬虫协同采集

前言 随着爬虫业务规模扩张&#xff0c;单机、单机房部署模式逐渐暴露出单点故障、IP 池单一、地域访问延迟高、目标站点区域风控封禁、单机房带宽资源瓶颈等一系列问题。单一机房所有爬虫出口 IP 归属同一运营商、同一地域&#xff0c;极易被目标站点基于地域、IP 段整体封禁…...

SITS 2026多方安全计算框架深度拆解:5层可信执行链如何实现零信任环境下的模型共训与数据不动

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生隐私计算框架&#xff1a;SITS 2026多方安全计算技术分享 SITS 2026&#xff08;Secure Intelligence Trust Stack&#xff09;是面向大模型协同训练与推理场景设计的AI原生隐私计算框架&#xf…...

别再只用VLC看片了!手把手教你把它变成家庭流媒体服务器(支持UDP/TCP)

解锁VLC的隐藏技能&#xff1a;打造家庭专属流媒体系统的完整指南 你是否曾为在不同设备间切换观看本地视频而烦恼&#xff1f;每次都要用U盘拷贝或者忍受云盘缓慢的上传下载速度&#xff1f;其实&#xff0c;你电脑上那个熟悉的橙色锥形图标——VLC播放器&#xff0c;远比你想…...

ARM-MPU实战:从寄存器配置到内存安全防护

1. ARM-MPU基础概念与核心价值 第一次接触ARM-MPU时&#xff0c;我盯着开发板反复确认了三遍接线——明明程序逻辑完全正确&#xff0c;却总是莫名其妙进入HardFault中断。后来才发现是某个野指针改写了关键数据区&#xff0c;这种隐蔽的错误让我意识到内存保护的重要性。ARM-M…...

智慧工厂与养殖场的一体化光伏监控系统方案

某企业从事乳制品的生产、销售等全流程业务&#xff0c;新增一套分布式光伏发电系统以平衡能耗支出&#xff0c;主要覆盖乳制品生产加工厂、奶牛养殖场及生态观光牧场等场景&#xff0c;实现“自给自足、余电上网”等综合能源目标。现需要对光伏电站进行联网集中监控&#xff0…...