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

Harness 中的动态批处理:合并多个轻量请求

Harness 中的动态批处理:合并多个轻量请求,让云原生控制平面性能提升3倍引言痛点引入如果你负责过云原生DevOps平台、微服务控制平面或者大模型推理服务的性能优化,一定遇到过这样的窘境:平台QPS刚刚突破10万,API网关的CPU就已经打满了,排查下来发现70%的请求都是小于1KB的轻量请求:比如agent上报状态、拉取任务、同步配置、健康检查……每个请求的业务逻辑处理耗时不到10ms,但HTTP握手、TLS协商、鉴权、链路追踪、上下文切换这些开销占了总耗时的80%。你加了机器、调了连接池、开了HTTP/2多路复用,性能只提升了20%,成本却翻了一倍。这正是全球领先的DevOps厂商Harness在2022年遇到的真实场景:当时Harness的控制平面需要对接全球超过10万个部署代理(Delegate)、CI Runner和终端CLI,每个客户端每2秒就会发起3~5个轻量请求,高峰期QPS超过15万,P99延迟飙升到2s,大量客户端超时重发形成雪崩效应,多次出现小规模服务不可用。解决方案概述为了解决这个问题,Harness的架构团队引入了自适应动态批处理技术:在客户端侧自动聚合多个轻量请求为一个批请求,服务端侧统一处理后聚合响应返回,客户端再把响应分发给每个原始请求。和传统的静态批处理不同,这套方案会根据实时请求率、队列长度、延迟阈值自动调整批大小和等待窗口,既保证了吞吐量的提升,又不会出现延迟过高的问题。上线后Harness公布的生产数据显示:控制平面API网关CPU使用率降低了47%整体吞吐量提升了3.2倍P99延迟从2s降到了460ms,降低了77%数据库QPS降低了62%(得益于批处理内置的请求去重和缓存)最终效果展示我们可以先看一组对比测试数据:指标单请求模式静态批处理(固定100ms窗口)动态批处理(Harness实现)QPS支持上限1.2万2.8万3.8万P99延迟(1万QPS)520ms310ms180ms网关CPU使用率(1万QPS)72%38%27%低峰期P99延迟(100QPS)120ms220ms140ms可以看到动态批处理在高低峰场景下都表现优异,完美解决了轻量请求的性能痛点。准备工作环境/工具如果要跟着本文动手实现或者测试动态批处理,你需要准备:Python 3.9+ 版本gRPC 相关依赖(pip install grpcio grpcio-tools)Harness免费账号(可选,用于体验生产环境的批处理效果:Harness注册地址)前置知识阅读本文你只需要具备以下基础知识,零基础也能看懂核心思路:基本的微服务架构概念HTTP/gRPC通信的基本流程异步编程的基础概念如果你想深入学习相关知识,可以参考:gRPC官方文档云原生微服务设计模式核心概念:什么是动态批处理?批处理的本质批处理的核心思想是合并多个独立请求的公共开销:不管是网络通信的握手、头部开销,还是服务端的鉴权、上下文初始化、数据库连接开销,都只需要执行一次,就能服务N个请求,当N越大时,平均每个请求的开销就越低。静态批处理 vs 动态批处理很多人对批处理的印象还停留在“固定窗口攒批”的静态批处理,比如每100ms或者每攒够100个请求就发送一次,这种方案在请求率稳定的场景下好用,但在云原生场景下请求率波动极大(比如上班时间QPS是下班时间的10倍),就会出现严重的问题:低峰期每个请求都要等满100ms,延迟翻倍;高峰期批大小超过上限,队列溢出,请求失败。动态批处理就是为了解决这个问题诞生的:它会根据实时的运行指标自动调整批处理的参数,核心是在延迟约束下最大化吞吐量。我们可以通过下表直观对比两者的差异:对比维度静态批处理动态批处理触发条件固定时间窗口/固定批大小自适应根据请求率、队列长度、延迟阈值调整批大小波动波动大,低峰期批大小远小于最大值波动小,始终保持在最优批大小区间延迟P99波动大,低峰期延迟固定等于窗口大小,高峰期延迟飙升波动小,始终控制在预设的最大延迟阈值内资源利用率低,低峰期浪费等待时间,高峰期队列溢出高,低峰期减小窗口降低延迟,高峰期增大窗口提升吞吐量实现复杂度低,只要定时器+队列即可中高,需要监控指标、自适应算法、参数调优适用场景请求率稳定、延迟不敏感的场景请求率波动大、对延迟和吞吐量都有要求的云原生场景动态批处理和其他优化技术的对比很多人会问:我已经用了连接池、HTTP/2多路复用,还要用动态批处理吗?答案是肯定的,它们的优化维度完全不同,可以叠加使用,我们通过下表对比:技术请求合并粒度网络开销降低比例对延迟的影响实现复杂度适用场景连接池连接复用,请求单独发送20%~30%(减少握手开销)降低10%~20%低所有HTTP/gRPC通信场景HTTP/2多路复用同一个连接并发多个请求,单独处理30%~40%(减少连接和头部开销)降低20%~30%低(只要开启HTTP/2即可)微服务之间通信、前端和后端通信静态批处理多个请求合并为一个请求60%~80%低峰期增加延迟,高峰期降低延迟中请求率稳定的离线场景动态批处理多个请求合并为一个请求,自适应窗口70%~90%整体降低20%~40%中高云原生控制平面、DevOps平台、大模型推理等高QPS轻量请求场景问题背景:Harness为什么需要动态批处理?Harness的架构特点Harness是一个一站式DevOps平台,提供CI/CD、混沌工程、Feature Flag、云成本管理等全链路能力,它的架构采用典型的控制平面+数据平面分离的设计:控制平面:部署在Harness的公有云或者客户的私有云里,负责存储配置、调度任务、统计数据、提供UI接口数据平面:部署在客户的本地环境、K8s集群里的Delegate(代理)、CI Runner、CLI等客户端,负责执行具体的部署、构建、测试任务所有的数据平面客户端都需要和控制平面频繁通信:每2秒拉取一次待执行的任务、上报任务状态、同步最新的配置、上报健康状态,这些请求的共同特点是:payload极小(大多500B)、QPS极高、延迟要求中等(P991s即可)。问题描述2022年Harness的企业客户数突破2000家,活跃的Delegate数量超过10万个,高峰期QPS突破15万,出现了严重的性能问题:API网关CPU打满:60%的CPU消耗在处理TLS握手、HTTP头部解析、鉴权、链路追踪这些公共逻辑,真正的业务逻辑CPU占比不到30%延迟飙升:P99延迟从正常的200ms涨到2s,大量客户端超时重发,形成雪崩效应,高峰期每秒有超过1万的超时请求数据库压力大:大量相同的配置拉取请求反复查询数据库,数据库CPU使用率达到85%,经常出现慢查询成本过高:为了支撑高峰期的流量,API网关的节点数从20个扩容到60个,每月云成本增加了3万美元Harness的架构团队尝试了很多常规优化手段:开启HTTP/2多路复用、调大连接池、增加缓存、升级服务器配置,但最多只提升了25%的性能,远远达不到要求,最终他们决定自研自适应动态批处理方案。系统设计:Harness动态批处理的架构整体架构Harness的动态批处理采用端侧+服务端协同的三层架构,我们用ER图展示核心实体的关系:被聚合到包含调度生成调整参数对应包含CLIENT_REQUESTBATCHSUB_REQUESTBATCH_SCHEDULERADAPTIVE_CONTROLLERSUB_RESPONSEBATCH_RESPONSE整体架构分为三层:客户端SDK层:嵌入在Delegate、CLI、CI Runner等所有客户端中,负责收集请求、自动攒批、发送批请求、分发响应给业务逻辑API网关层:负责接收批请求,统一做一次鉴权、日志、链路追踪,然后路由到对应的后端服务服务处理层:负责解析批请求中的子请求,并行处理,聚合响应后返回,内置请求去重和缓存能力,降低后端和数据库的压力核心交互流程我们用流程图展示整个动态批处理的交互过程:

相关文章:

Harness 中的动态批处理:合并多个轻量请求

Harness 中的动态批处理:合并多个轻量请求,让云原生控制平面性能提升3倍 引言 痛点引入 如果你负责过云原生DevOps平台、微服务控制平面或者大模型推理服务的性能优化,一定遇到过这样的窘境: 平台QPS刚刚突破10万,API网关的CPU就已经打满了,排查下来发现70%的请求都是小…...

RisohEditor:免费Win32资源编辑器解决exe图标修改与对话框编辑难题

你是否曾经想要替换一个可执行文件(.exe)的图标,却找不到合适的工具?是否想修改某个程序中的对话框文字、菜单选项,或者更新版本信息?这些需求,都需要一款专业的exe资源编辑器。RisohEditor正是…...

Revo Uninstaller:彻底解决软件卸载不干净与顽固程序残留的实用教程

你是否遇到过这样的情况:从控制面板卸载一个软件后,安装目录依然存在,手动删除时提示“文件正在使用”;打开注册表编辑器,搜索软件名称,发现成百上千条残留项;或者某个软件明明已经“卸载”&…...

NVIDIA白嫖攻略:3分钟拿到H100算力,6个大模型随便用!

最近很多朋友都在问我,NVIDIA那个免费的H100算力到底能不能用?怎么申请?会不会很快就没用了?这篇文章手把手教你搞定!📝 写在前面 最近AI圈最大的瓜,就是英伟达居然把价值3万美元一张的H100显卡…...

Ventoy制作启动U盘:一款革新性的U盘启动盘制作工具解决多系统引导难题

你是否曾经为了安装不同操作系统而反复格式化U盘?今天想装Windows,用Rufus写入ISO;明天想试试Ubuntu,又要重新格式化并写入;后天想用PE维护系统,还得再来一遍。每次制作启动盘都需要等待写入完成&#xff0…...

Blazor Server现代化改造指南(2026生产环境零故障部署手册)

第一章:Blazor Server现代化改造的演进逻辑与2026生产级定位Blazor Server 正从“实时交互原型平台”加速演进为支撑高并发、强合规、可观测企业级应用的核心运行时。这一转变并非简单功能叠加,而是由.NET 8/9 的信号量优化、WebSocket 协议栈重构、以及…...

岭回归模型原理与Python实战指南

1. 岭回归模型基础概念解析岭回归(Ridge Regression)是线性回归的一种改良版本,专门用于处理特征间存在多重共线性的数据集。我在实际业务中遇到过一个典型案例:某电商平台的用户购买预测模型,当同时使用"浏览时长"、"页面点击…...

RAG系统中上下文窗口优化策略与实践

1. 项目概述在自然语言处理领域,上下文长度管理一直是影响模型性能的关键因素。特别是在检索增强生成(RAG)系统中,如何高效处理长文本上下文直接决定了最终生成质量。这个主题探讨的是RAG架构中第五个核心环节——上下文窗口的优化…...

仅限省级智慧农业中心获取:Docker 27定制化RPM包(预集成Modbus TCP/DTU驱动+国密SM4加密模块),含27个预编译镜像哈希值与硬件兼容性矩阵表

第一章:Docker 27 农业物联网部署案例在山东寿光某现代化蔬菜大棚基地,运维团队基于 Docker 27(2024年1月发布的 LTS 版本)构建了轻量、可复现的农业物联网边缘计算平台。该平台整合土壤温湿度传感器、CO₂浓度探头、智能滴灌控制…...

从‘差异集’到‘代换’:图解Prolog与类型推断中的‘合一’核心思想

从‘差异集’到‘代换’:图解Prolog与类型推断中的‘合一’核心思想 在计算机科学的抽象丛林里,有些思想像暗河般贯穿多个领域。当Prolog解释器回答"谁杀了罗宾"时,当Haskell编译器推断出map :: (a -> b) -> [a] -> [b]的…...

Windows Terminal + WSL2 真香搭配:从安装到高效配置的完整指南

Windows Terminal WSL2 终极配置指南:打造开发者专属命令行工作流 在Windows生态中,WSL2的出现彻底改变了开发者的工作方式。它不再是简单的Linux模拟环境,而是通过完整的Linux内核支持,提供了近乎原生的性能体验。但要让这套系统…...

智能视觉组比赛软件Bug趣味文案(适配女生快速朗读)

简 介: 《智能车比赛惊现"隧道穿越"BUG!该修还是该留?》 近日,智能视觉组比赛中出现了一个令人啼笑皆非的软件BUG:当车模进入虚拟墙体的死胡同时,虚拟车模会被"卡死",而实体…...

Pandas DataFrame转PyTorch DataLoader实战指南

1. 从Pandas DataFrame到PyTorch DataLoader的完整转换指南在机器学习项目中,我们经常遇到一个典型场景:数据以Pandas DataFrame的形式存在,但模型训练需要PyTorch DataLoader的输入格式。这种转换看似简单,但实际操作中存在许多需…...

OAI 5G gNB配置详解:从配置文件修改到终端接入测试的完整流程(基于USRP B210)

OAI 5G gNB配置实战:基于USRP B210的深度调优与终端接入全解析 在开源5G领域,OAI(OpenAirInterface)正逐渐成为研究者和开发者验证新空口技术的首选平台。不同于商业基站的黑箱操作,OAI提供了从物理层到核心网的完整可…...

用Arduino+MAX485模块DIY一个RDM控制器(附完整代码与调试心得)

用ArduinoMAX485模块打造智能灯光控制系统:RDM协议实战指南 在智能舞台灯光和建筑照明领域,DMX512协议长期占据主导地位,但其单向通信的局限性催生了更先进的RDM(Remote Device Management)协议。本文将带您从零开始&a…...

从VGG16的参数量爆炸,聊聊为什么现在的CNN都不这么设计了(附PyTorch计算脚本)

从VGG16的参数量爆炸看CNN架构演进:设计哲学与技术突破 在计算机视觉领域,VGG16无疑是一座里程碑。2014年,当Simonyan和Zisserman提出这个看似简单的堆叠式卷积网络时,很少有人能预料到它会对深度学习架构设计产生如此深远的影响。…...

【技术演进】从交叉熵到广义焦点损失:目标检测损失函数的统一与进化之路

1. 目标检测中的损失函数演进背景 目标检测作为计算机视觉的核心任务之一,其性能提升很大程度上依赖于损失函数的优化。早期的目标检测器主要使用交叉熵损失进行分类任务,但随着应用场景复杂化,这种基础损失函数逐渐暴露出三个关键问题&#…...

用PS2手柄和Arduino UNO,我给孩子做了个遥控小车(附完整代码和接线图)

用PS2手柄和Arduino UNO打造亲子互动遥控小车的完整指南 记得上个月周末,孩子盯着我收藏的旧PS2手柄突然问:"爸爸,这个能变成遥控器吗?"那一刻,我意识到这是绝佳的亲子STEM教育机会。经过三个周末的协作&…...

Cadence IC617实战:手把手教你用Virtuoso仿真共源级放大器(含电阻负载分析)

Cadence IC617实战:手把手教你用Virtuoso仿真共源级放大器(含电阻负载分析) 在集成电路设计领域,掌握主流EDA工具的操作技巧是工程师的必备技能。作为业界标杆的Cadence Virtuoso平台,其IC617版本凭借稳定的性能和丰富…...

从一条CAN报文说起:深入理解J1939多帧传输(BAM/TP.DT)的底层逻辑与抓包分析

从一条CAN报文说起:深入理解J1939多帧传输的底层逻辑与抓包分析 在汽车电子系统的开发与调试过程中,CAN总线就像车辆的神经系统,承载着各种关键数据的传输。而SAE J1939协议作为商用车领域的事实标准,其多帧传输机制(B…...

别只当开发板用!树莓派3B+变身家庭轻量NAS与下载机的完整配置指南

树莓派3B家庭NAS与下载中心实战:低成本打造私有云存储 家里闲置的树莓派3B除了跑跑小项目,还能做什么?今天我要分享的是如何把这台信用卡大小的电脑变成家庭网络存储(NAS)和下载中心。相比直接购买成品NAS设备,这套方案成本不到30…...

Loom + Project Reactor双栈升级成本失控真相,一线团队实测6大节流策略,仅剩23%企业掌握

第一章:Loom Reactor双栈升级的成本失控全景图 当团队在 Spring Boot 3.3 环境中同时引入 Project Loom(虚拟线程)与 Project Reactor(响应式编程),看似理想的“协程非阻塞”技术组合,却常因隐…...

从‘虹猫蓝兔’到‘终身学习’:聊聊AI模型如何像人一样持续进化,而不只是‘打补丁’

从‘虹猫蓝兔’到‘终身学习’:AI模型如何像人类一样持续进化 想象一下,你刚学会骑自行车,第二天又学会了游泳——结果突然发现自己完全忘记了怎么骑车。这种荒谬的场景,正是当前AI模型在持续学习新任务时面临的真实困境。当推荐系…...

28BYJ48步进电机驱动实战:从接线到代码的完整指南(附避坑技巧)

28BYJ48步进电机驱动实战:从接线到代码的完整指南(附避坑技巧) 第一次接触28BYJ48步进电机时,我被它精致的外形和低廉的价格吸引,但真正开始驱动它时却遇到了不少麻烦——电机发热、转动不顺畅、扭矩不足等问题接踵而至…...

别再只测距了!用HC-SR04+STM32做个智能防撞小车(附完整代码)

从HC-SR04到智能防撞小车:STM32实战开发全指南 在创客圈里,HC-SR04超声波模块常被当作入门级的测距玩具——接上几根杜邦线,跑个示例代码,测量下距离就束之高阁。但你想过吗?这个售价不到10元的小模块,配合…...

保姆级教程:将老旧监控RTSP流转换成HLS(m3u8),用Video.js在Vue/Web网页无插件播放

现代Web无插件播放:RTSP流转换HLS全栈解决方案 老旧监控设备往往采用RTSP协议传输视频流,而现代Web浏览器已不再支持直接播放这种格式。本文将详细介绍如何通过JavaCV实现RTSP到HLS的转换,并结合Nginx和Video.js构建完整的无插件播放方案。 1…...

【电磁】两个不同介电常数的区域2D FDTD研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...

【电池-超级电容器混合存储系统】单机光伏电池-超级电容混合储能系统的能量管理系统附Simulink仿真

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...

【电池】可重构电池系统中的结构分析用于主动故障诊断研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...

【地质】一维层状模型大地电磁测深 (MT) 和可控源音频大地电磁测深 (CSAMT) 正演计算研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...