网易首页 > 网易号 > 正文 申请入驻

这个团队把3GB文件上传内存压到50MB,原理像水管分流

0
分享至


3GB的CSV文件,服务器内存只涨50MB——不是加了机器,是把数据当成了自来水。

Hashnode工程师最近公开了他们处理超大文件上传的架构。传统做法要么把文件整个吞进内存(结果内存爆炸),要么先存后验(用户等半天才知道格式错了)。他们选了第三条路:让数据像水流过管道,边流边处理,绝不回头。

内存危机:为什么"加大内存"是个陷阱

REST接口接大文件,最常见的死法是OutOfMemoryError。团队试过堆内存调到8GB,结果并发数从200掉到12——每个请求都囤着数据等处理,内存成了瓶颈。

更隐蔽的问题是"先上传后验证"。用户传完2GB才发现列数不对,体验像填完10页表格提交时才告诉你第一页错了。Hashnode工程师「我们需要在同一个请求里完成验证和存储,但不能让验证拖慢主流程」。

他们的解法借鉴了Unix管道的哲学:数据是流,不是对象。一个3GB文件被切成无数小块,每块在内存里只停留几毫秒,处理完立刻送给下一环节。

核心设计:T型接头分流术

架构的核心是一个叫ValidationTeeStream的组件。Tee(三通管)是Unix老概念——水流进来,一分二出。

主线程的数据流继续走:加密→云存储分片上传。副本则被送进后台线程,边读边验证CSV格式、统计行数。两个管道同时跑,但内存里永远只有当前这一小块数据。

关键约束:数据只能单向流动,不能倒带。这意味着验证失败时,主流程可能已经存了一半。工程师的处理很务实——验证结果通过Future异步返回,若失败则标记文件为"待清理",下次GC时回收。代价是偶尔浪费一点上传流量,换来了内存占用的确定性。

加密环节用了AES-GCM流式模式,同样不缓冲。云存储侧采用分片并行上传,每个分片5MB,多个HTTP连接同时推,把网络延迟摊平。

实测数据:内存曲线像一条直线

他们压测了从100MB到10GB的文件。内存占用始终维持在初始堆的±15%区间,和文件大小无关。作为对照,传统BufferedInputStream方案在3GB时内存直接顶到上限。

延迟表现更有意思。小文件(<50MB)时,流式架构反而慢5-10%——管道调度的开销盖过了收益。但超过500MB后,差距急剧拉开:传统方案内存GC导致卡顿,流式架构的P99延迟稳定在2秒内。

工程师特别提到一个边界情况。某次生产环境出现验证线程卡死,原因是CSV里嵌了个2MB的单行文本(正常行<1KB)。后台解析器OOM,但主流程不受影响——TeeStream设计了背压机制,验证队列满时主线程会短暂阻塞,避免无限堆积。

谁该抄这个作业

这套架构不是银弹。如果你的文件普遍<100MB,传统方案更简单。如果你的验证逻辑必须看到全量数据(比如跨行去重),流式也帮不上忙。

但如果你是SaaS平台,用户上传的Excel/CSV/日志文件大小不可控,这个模式能保住你的内存底线。Hashnode开源了核心组件的伪代码,生产环境需要补全监控——特别是验证线程的队列深度和错误率。

有个细节值得玩味:他们最终没有采用反应式框架(Reactor/RxJava),而是手写InputStream装饰器。理由是"团队对背压的理解比框架更深时,抽象层反而是负担"。

你现在处理文件上传的方式,内存占用和文件大小成正比吗?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
第五轮上海德比!海港伤病潮缓解,穆斯卡特对阵斯卢茨基终迎转机

第五轮上海德比!海港伤病潮缓解,穆斯卡特对阵斯卢茨基终迎转机

纵横之策
2026-04-10 13:31:06
抢在美国之前,中俄都动了!中国送9万吨大米,俄运10万吨原油

抢在美国之前,中俄都动了!中国送9万吨大米,俄运10万吨原油

午夜搭车a
2026-04-09 09:19:26
穆杰塔巴·哈梅内伊发文

穆杰塔巴·哈梅内伊发文

南方都市报
2026-04-09 23:10:07
“人间悲剧”张紫妍:被31位财阀灌药性侵,总统都无法替她申冤

“人间悲剧”张紫妍:被31位财阀灌药性侵,总统都无法替她申冤

她时尚丫
2026-04-07 23:22:56
巴基斯坦被激怒了

巴基斯坦被激怒了

牛弹琴
2026-04-10 08:01:34
伊朗警告以色列:立即停止袭击黎巴嫩 否则将遭“沉重回击”

伊朗警告以色列:立即停止袭击黎巴嫩 否则将遭“沉重回击”

极目新闻
2026-04-09 01:03:19
过分谄媚会显得特别真诚!网友:看完发现,我两千的工资一点不冤

过分谄媚会显得特别真诚!网友:看完发现,我两千的工资一点不冤

夜深爱杂谈
2026-04-08 17:06:30
美宜佳通报处置进展:已与606家加盟商解除合作关系

美宜佳通报处置进展:已与606家加盟商解除合作关系

界面新闻
2026-04-09 16:03:32
陈丽华葬礼曝光!林大庆点破迟重瑞的真实处境,大儿子也在场送别

陈丽华葬礼曝光!林大庆点破迟重瑞的真实处境,大儿子也在场送别

情感大头说说
2026-04-10 12:17:06
原来大家都这么有心眼子!网友:成年人社交潜规则全在这了

原来大家都这么有心眼子!网友:成年人社交潜规则全在这了

另子维爱读史
2026-04-09 16:46:55
特朗普宣布:美军“将继续驻扎在伊朗境内及周边”,美伊达成共识,伊朗将绝无核武器,霍尔木兹海峡必须保持开放,或由美伊“合资经营”

特朗普宣布:美军“将继续驻扎在伊朗境内及周边”,美伊达成共识,伊朗将绝无核武器,霍尔木兹海峡必须保持开放,或由美伊“合资经营”

每日经济新闻
2026-04-09 14:19:51
珠海楼市:买房人开始懵了

珠海楼市:买房人开始懵了

科学发掘
2026-04-10 10:34:04
阿曼突然出手,霍尔木兹海峡要“免费通行”了?

阿曼突然出手,霍尔木兹海峡要“免费通行”了?

小鹿姐姐情感说
2026-04-10 13:45:09
巴基斯坦被激怒!防长呼吁谴责以色列!内塔尼亚胡12日将接受审判

巴基斯坦被激怒!防长呼吁谴责以色列!内塔尼亚胡12日将接受审判

井普椿的独白
2026-04-10 13:39:44
狂揽4万星!换掉OpenClaw太爽了,5美元就能养个AI打工人

狂揽4万星!换掉OpenClaw太爽了,5美元就能养个AI打工人

新智元
2026-04-09 19:19:45
“赛博复活”张雪峰引争议 律师:或侵犯人格权等多项权利,不是只有商用才侵权

“赛博复活”张雪峰引争议 律师:或侵犯人格权等多项权利,不是只有商用才侵权

红星新闻
2026-04-09 17:12:20
郑丽文就统一表态,维持现状不可能,国共能开启第三次合作?

郑丽文就统一表态,维持现状不可能,国共能开启第三次合作?

靓仔情感
2026-04-10 13:06:12
1996年,何道泉中将给邓公写信承认错误,之后被调到国防大学任职

1996年,何道泉中将给邓公写信承认错误,之后被调到国防大学任职

我不是沃神
2026-04-10 09:45:03
年终奖发了4个硬币还让我上台发言,我当场给老板磕了4个响头

年终奖发了4个硬币还让我上台发言,我当场给老板磕了4个响头

小秋情感说
2026-04-10 09:35:30
中小学生迎来好消息!4月11日后开始执行,双职工家庭纷纷表支持

中小学生迎来好消息!4月11日后开始执行,双职工家庭纷纷表支持

复转这些年
2026-04-07 17:55:41
2026-04-10 14:16:49
碳基打工人
碳基打工人
坐标北京,靠咖啡续命,靠小红书下饭的普通人类。
1143文章数 6关注度
往期回顾 全部

科技要闻

马斯克狂发大火箭也养不起AI 年亏50亿美元

头条要闻

牛弹琴:巴基斯坦被以色列激怒了 这是一个不祥的信号

头条要闻

牛弹琴:巴基斯坦被以色列激怒了 这是一个不祥的信号

体育要闻

17岁赚了一百万美元,25岁被CBA裁员

娱乐要闻

夏克立婚内出轨 曾参加《爸爸去哪儿》

财经要闻

爱尔眼科一院长被指猥亵 总部:已被停职

汽车要闻

全新一代理想 L8 五座旗舰+5C增程系统 三季度交付

态度原创

健康
教育
游戏
时尚
军事航空

干细胞抗衰4大误区,90%的人都中招

教育要闻

笔试第一,综合第一,她从文华学院成功考研上岸211名校!

为财报提速!传闻《GTA6》PC版锁定2027年2月发售

直播|| 春夏百元级首饰,最爱逛的一定有他家!

军事要闻

特朗普:对美国与伊朗达成和平协议“非常乐观”

无障碍浏览 进入关怀版