仅两台缓存节点,如何支撑 1.45TB/s 大吞吐业务

随着面向大规模并发读取与数据分发的业务需求增加,如影视渲染等场景,传统存储方案(如 NAS)在并发客户端数量增加时,往往需要投入更多缓存资源;为了提升响应时效,通常还需提前进行数据预热,不仅带来额外的时间开销,也进一步加重了资源负担。

JuiceFS 作为一种基于对象存储的分布式文件系统,通过其高性能架构,利用分布式缓存聚合吞吐量并降低延迟,能够在大规模客户端并发读取时提供高效支持。本文分享的是我们近期在实际测试中的一个案例,展示如何利用 4,000 台业务节点成功聚合了 1.45TB/s 的带宽,并在此过程中通过引入二级缓存池,保障了系统的稳定性。

通过这篇文章,我们希望为高并发、大吞吐需求场景中的存储瓶颈提供一个切实可行的解决方案,并借此抛砖引玉,欢迎大家共同探索存储优化的思路与方法。

01 传统 NAS:节点越多,存储越慢

该客户为影视渲染农场用户,日常作业中会同时启动数千台 Windows 节点进行渲染。

  • 业务特点:每台节点在渲染时需同时读取一批文件(大部分为重复素材)到本地。
  • 原有痛点:原公有云 NAS 存储(SMB 挂载)在节点数增多时,不得不不断增加后端 SMB 服务节点来应对激增的流量和 IOPS,导致管理复杂度和成本直线上升。当并发节点超过 1,000 台时,存储系统往往不堪重负。
  • 核心需求:迫切需要一种在存储底座之外,能够分担业务吞吐压力的能力。

在 SMB 服务模式下,每个客户端都需要从 SMB 存储读取全量数据。导致服务端流量长期高位,管理员需要持续监控 SMB 服务的健康状况,一旦接近最大负荷,就需要及时进行扩容,提供与集群规模匹配的存储能力,运维压力显著增加。

02 闲置资源利用:用大量业务节点做分布式缓存

JuiceFS 在社区版 1.3 及企业版 5.2 之后发布了全新的 Windows 客户端,支持通过.exe进程将文件系统挂载为本地盘,使用方式与 Linux 类似。

但在海量客户端场景下,如果仅将业务切换为标准的「JuiceFS 挂载点 —— 分布式缓存 —— 对象存储」链路,流量会集中打到独立缓存层,可能成为新的性能瓶颈。与其不断扩容专用的缓存节点,不如转换思路:利用海量业务节点自身的闲置带宽和磁盘,将它们池化为一个巨大的分布式缓存池。

  • JuiceFS 分布式缓存模式(P2P 模式):同一份文件只需在集群内读取一次,后续其他节点直接从 P2P 缓存池的邻近节点获取。
  • 对象存储侧:回源流量极低,文件首次冷读后,后续流量几乎全由缓存池承担。
  • 资源要求:无需专用缓存硬件,仅需每个业务节点贡献部分磁盘和带宽。

在这个方案中,我们没有配置任何一台独立缓存节点。所有的业务节点既是消费者,也是提供者(P2P 模式)。

03 实测案例:4,000 台业务节点聚合到 1.45TB/s 的巨大吞吐

测试任务:每台 Windows 机器在无预热(冷读)的情况下,读取 16 个 2GB 的大文件。 统计所有节点读完的总耗时,并观察各节点的耗时方差,以及是否存在长尾效应。

配置策略:将 4,000 个节点拆分为多个子组(每组 500 个节点)。16 个 2GB 的数据块会散列分布在组内节点中,避免所有节点同时回源对象存储,造成拥塞。

那么现在 JuiceFS 客户端的冷读流程就变为:

  1. Windows 客户端读取 16 个 2GB 的文件,通过一致性哈希拓扑定位这些数据块在 500 个缓存组内的负责节点,向其发起请求。
  2. 缓存节点收到了数据块请求后,发现本地未命中缓存(冷读),则回源对象存储拉取数据块,拉取完成后将数据返回给客户端,并且写入本地缓存,供后续请求复用。
  3. 当客户端从所有缓存服务节点获取完整数据块后,测试结束,统计所有客户端读完的耗时分布(最大值、最小值),用于评估方差与长尾情况。

下面是不同客户端节点数量读取这批 16*2GB 大文件的时间结果:

客户端台数聚合吞吐最高总耗时(范围/平均)
2,000 台729GB/s92s~136s 平均 107s
2,500 台921GB/s87s~109s 平均 98s
3,000 台1.11TB/s93s~121s 平均 106s
3,500 台1.34TB/s89~112s 平均 100s
4,000 台1.45TB/s92s~115s 平均 101s

不同数量客户端,JuiceFS 聚合吞吐表现

整体结果各方面都符合预期:

  • 稳定性:无论是 2,000 台还是 4,000 台,读完数据的总耗时都稳定在 100 秒左右。
  • 扩展性4,000 台节点成功聚合出 1.45TB/s 的超大带宽,理论上,在元数据能够承载的前提下,该架构可实现持续的水平扩展,能够支持达到万台级别的缓存节点规模。

业务节点的挂载参数参考:

juicefs.exemountjuice-fs X: --cache-group=primary --buffer-size=4096--enable-kernel-cache --as-root --subgroups=8

由此,我们未使用一台独立的缓存服务节点,仅靠用户的业务节点就聚合了 1.45TB/s 的读取能力。过客通户端节点组成的分布式缓存层,我们以零成本将绝大多数流量从对象存储中分流,减轻了底层存储的负担。

实际业务中,未必能达到如此高的吞吐能力,因为缓存效益通常与数据重复度相关。在实际场景中,每个节点读取的文件并不完全相同。尽管如此,这一方案仍然是有效的存储扩展方法,即使只有部分提升,也能带来非常可观的收益,且几乎不需要额外的成本投入。

04 稳定性增强:两级分布式缓存

缓存效果虽然炸裂,但客户对系统的稳定性提出了担忧。例如,在某些场景下,业务节点在完成任务后会立即销毁,而这些业务节点同时也是缓存节点。当大量业务节点突然下线时,原本存储在这些节点上的缓存也随之丢失,导致大量流量回源至对象存储,进而使对象存储成为瓶颈,影响整体稳定性。为了解决因业务节点波动引发的缓存性能问题,我们提出了两级分布式缓存方案,架构图如下:

第二层缓存池(L2)位于第一层(L1)缓存池和对象存储之间。当 L1 未命中时,数据首先会从 L2 获取;如果 L2 缓存也未命中,则回源到对象存储。这样可以有效抵消 L1 缓存节点波动带来的影响。加入 L2 缓存池后,读取流程发生了以下变化:

  • 在 Windows 客户端读取 16 个 2GB 的文件,通过一致性哈希拓扑确定数据块所在 L1 缓存组中的特定节点;并同时向 L2 缓存组请求数据。
  • 由于是冷读,L2 缓存组中没有数据,L2 缓存节点会向对象存储发起请求并填充 L2 缓存池。
  • 数据块从 L2 缓存池返回至 L1 缓存池并进行填充,然后由 L1 缓存池内的节点自行进行点对点(P2P)分发。
  • 此时,大部分流量集中在 L1 缓存池,L2 只处理极少数回源对象存储的流量,因此即使 L2 只有少数几个节点,也不会成为性能瓶颈。L2 缓存池的作用是就近替代对象存储,降低延迟。

即使大量 L1 业务节点下线,缓存拓扑发生变化并需要重新下载数据块,数据仍可从 L2 缓存池就近获取。只要合理控制下线比例,业务几乎不受影响。

L2 缓存组挂载参数:

juicefsmountjuice-fs /jfs-cache --cache-group=secondary --cache-size=-1 --cache-dir=/data* --free-space-ratio=0.01--buffer-size=10240--max-downloads=400

L1(业务节点)挂载参数:

juicefs.exemountjuice-fs X: --cache-group=primary --second-group=secondary --buffer-size=4096--enable-kernel-cache --as-root --subgroups=8

此外,两级分布式缓存还非常适用于需要重复利用已有缓存池的场景。例如,我们有一批位于北京的缓存池业务,总容量为 2PiB,缓存池名为 cache-group-bj。突然,上海的业务也需要使用相同的数据,而这些数据与北京的数据几乎完全相同。如果不希望重新从北京的对象存储中预热这 2PiB 的数据,我们可以在上海的缓存组中配置--second-group=cache-group-bj。这样,当上海的业务请求数据时,将优先通过专线从北京的缓存池读取数据,速度非常快且延迟稳定(在 2ms 以内),免去了重复预热数据的复杂过程,能够直接启动业务,极大地方便了操作。

05 小结

通过本次 4,000 节点的极限压测,我们成功将计算集群的大规模闲置资源转化为高达 1.45TB/s 的存储池;而二级缓存的引入,有效解决了“最后一公里”的稳定性顾虑。通过使用 JuiceFS 这套存储软件架构,可充分挖掘客户端集群的潜能,在不增加额外硬件成本的情况下,实现了性能的显著提升。

本方案适用场景:

  • 高并发重复读取场景:如模型训推数据调用、容器镜像分发、影视渲染等,节点越多,P2P 缓存收益越大;
  • 弹性计算场景:业务节点经常大规模扩缩容(如 Spot Instances),利用二级缓存架构可确保数据访问的连续性与稳定性;
  • 混合云/多云架构:利用二级缓存机制可以复用异地缓存池资源,最大程度减少重复预热带来的对象存储调用和传输成本。

我们希望本文中的一些实践经验,能为正在面临类似问题的开发者提供参考,如果有其他疑问欢迎加入 JuiceFS 社区与大家共同交流。

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

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

相关文章

数据库性能优化完全指南:从慢查询到高效查询

前言 上周五晚上8点,生产环境数据库突然变慢,订单查询从100ms飙升到5000ms。紧急排查后,我们发现是几条没有索引的查询语句导致的。 这次事件让我深刻认识到数据库优化的重要性。这篇文章总结了我们的优化经验。 一、识别慢查询 1.1 启用慢…

vscode中只在固定后缀的文件中搜索

我就只想搜.c.h文件1.Ctrlshiftp2.输入setting,选择3.vscode只有排除,没有包含;也就是说只有黑名单,没有白名单;所以把不需要的文件都弄进去,保存一下。{// 排除常见无需搜索的目录"search.exclude&qu…

2026年高端智能客服SCRM哪家靠谱?腾讯企业微信四轮投资服务商微盛·企微管家给出选型建议

2026年,选错SCRM可能让企业陷入数据孤岛与转化困境2026年,客户服务已进入「AI人性化」时代。数据显示,75%的企业因选错SCRM系统,面临数据孤岛、转化低迷等问题——要么系统与企业微信生态不兼容,导致客户信息分散&…

从SolidWorks中导出机器人URDF模型

要把通过SolidWorks创建的机器人模型导出为URDF集成到ROS中,需要通过一个插件实现。 SolidWorks URDF导出插件的基础使用方法参考这篇文章 这里补充一些实用的操作。 通过添加草图实现基准轴和基准坐标系的定位 这需要你对SolidWorks的操作有一定的了解。 有时候…

大语言模型助力高效办公、论文与项目撰写、数据分析、机器学习与深度学习建模

对于机器学习与深度学习建模,ChatGPT与DeepSeek不仅能为科研人员提供基础的建模框架,还能帮助其优化算法参数,甚至根据数据特点自动推荐合适的算法。特别是在深度学习模型的调参过程中,ChatGPT可以通过与科研人员的互动&#xff0…

人工智能应用-机器视觉:AI 美颜 07.妆容迁移

研究者将这一思想应用于美颜场景:先把一张人脸照片分解成“内容因子”和“风格因子”,其中内容因子代表是谁的脸(身份特征),风格因子则代表脸部的美丑胖瘦、是否带妆、表情等。如果分解足够准确,就可以把漂…

课程论文还在熬夜赶稿?虎贲等考 AI:一键解锁 “高分学术捷径”

学期末的课程论文,堪称大学生的 “期末魔咒”。选题跑偏、文献难寻、数据图表不会做、查重超标反复改…… 这些难题让无数同学陷入 “熬夜赶稿 - 导师打回 - 重新熬夜” 的死循环。 难道课程论文只能靠 “凑字数、堆文献” 应付交差?答案当然是不&#…

立体仓库堆垛机远程监控运维管理平台方案

在智能仓储、物流配送、智能制造等领域,立体仓库堆垛机是实现货物自动化存取、提升仓储效率与空间利用率的核心装备。其主要功能是在立体货架间进行精准、高效的货物搬运与定位,以支持现代物流系统的高周转与高精度需求。随着仓储自动化与数字化水平的不…

mqtt之轻量级客户端协议源码实现(方便移植,亲测好用)

// mqtt_tiny.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream>#include "mqttclient.h" #include <windows.h> #include <conio.h>static void mqtt_message_cb(void* client, const char* topic, …

能源化工行业,PHP大文件上传与断点续传的解决方案?

开发者日记&#xff1a;2024年X月X日 星期X 长沙 阴 项目背景 今日正式接手客户的大文件传输系统外包项目&#xff0c;需求明确&#xff1a;支持20G文件/文件夹上传下载、跨平台&#xff08;Windows/macOS/Linux&#xff09;、全浏览器兼容&#xff08;含IE8&#xff09;、断点…

MySQL数据可视化实战技巧

数据可视化基础与MySQL的结合数据可视化的定义与重要性MySQL在数据处理中的角色常见数据可视化工具简介&#xff08;如Tableau、Power BI、Python库&#xff09;MySQL数据准备与清洗数据库连接与数据查询基础&#xff08;SELECT语句&#xff09;数据清洗技巧&#xff08;处理NU…

数据 “开口说话”!虎贲等考 AI 数据分析功能解锁论文实证新姿势

还在对着一堆调研数据无从下手&#xff1f;还在为 SPSS 操作界面抓狂到脱发&#xff1f;还在因图表不规范被导师连环批注&#xff1f;作为深耕论文写作科普的博主&#xff0c;后台每天都被科研党和毕业生的数据分析难题刷屏。别慌&#xff01;虎贲等考 AI 智能写作平台&#xf…

Elasticsearch Swarm 单机部署和测试流程

文章目录 📁 项目结构规划 📦 第一步:创建项目目录和文件 ⚙️ 第二步:创建配置文件 1. 创建 docker-compose.yml 2. 创建 Elasticsearch 自定义配置 3. 创建环境变量文件 🚀 第三步:创建部署脚本 1. 部署脚本 2. 测试脚本 3. 清理脚本 📄 第四步:创建使用说明 快速…

Google AI Studio+Gemini Pro:小白也能驾驭的AI魔法组合

引言 在当今这个 AI 技术飞速发展的时代,人工智能的应用已经渗透到了我们生活和工作的各个角落。从智能语音助手到图像识别技术,从自动化客服到智能驾驶,AI 的强大功能让我们的生活变得更加便捷和高效。其中,谷歌的 Gemini Pro 模型以其卓越的性能和广泛的应用场景,成为了…

TCP/IP协议栈:从原理到实战全解析

TCP/IP协议栈深度解析技术文章大纲协议栈概述TCP/IP协议栈的分层结构&#xff08;四层或五层模型&#xff09;与OSI七层模型的对比协议栈的核心设计思想网络接口层&#xff08;链路层&#xff09;以太网、Wi-Fi等底层协议的作用MAC地址与ARP协议解析数据帧的封装与解封装网络层…

突破限制:巧用Azure OpenAI,畅玩Gemini模型

引言 在人工智能飞速发展的当下,Gemini 模型凭借其强大的语言理解与生成能力,吸引了众多开发者的目光。然而,国内的网络环境使得直接访问 Gemini 模型困难重重,“魔法” 手段不仅操作复杂,还存在诸多风险。幸运的是,我们可以通过 Azure OpenAI 服务这一巧妙的途径,间接调…

【Python高级编程】辅助教师教学工具:PTA 成绩统计小程序

目录 一、引言 二、开发起点&#xff1a;需求挖掘与场景分析 三、方案设计&#xff1a;技术选型与架构规划 四、核心开发阶段&#xff1a;从 “能用” 到 “好用” 1. 基础能力搭建&#xff1a;先确保 “能读文件、能操作” 2. 核心逻辑开发&#xff1a;解决 “统计” 的…

解锁Gemini:Firebase平台合规调用AI模型实战全攻略

一、引言 在人工智能飞速发展的当下,Gemini 凭借其卓越的性能,成为众多开发者关注的焦点。作为谷歌旗下先进的 AI 模型,Gemini 在自然语言处理、图像识别等多领域展现出强大的能力,为开发者们打开了全新的应用开发思路。而 Firebase 作为谷歌提供的一套功能全面的后端即服务…

将本地代码推送到 GitHub 的方法

目录 一、准备工作 二、首次推送&#xff08;本地代码→新 GitHub 仓库&#xff09; 三、后续推送&#xff08;本地代码更新后→GitHub&#xff09; 四、常见问题及解决 五、总结 一、准备工作 安装 Git&#xff1a;从https://git-scm.com/下载并安装&#xff0c;安装后右…

亲测好用8个AI论文工具,助本科生轻松搞定毕业论文!

亲测好用8个AI论文工具&#xff0c;助本科生轻松搞定毕业论文&#xff01; AI 工具如何助力论文写作&#xff1f; 在当今信息爆炸的时代&#xff0c;撰写一篇高质量的毕业论文对于本科生来说&#xff0c;既是一次学术能力的考验&#xff0c;也是一场与时间赛跑的挑战。面对繁重…