MinIO ,RustFS ,SeaweedFS,Garage 测评一下能不能抗住 最能抗高并发,大图片上传,工厂车间稳定上传,断点续传,分片上传,500台设备上传,每天要存5T图片,硬盘,存60天。一般nas扛不住,群晖,飞牛fnOS,还有没有更好的方案

相关文章

二娃自己的想法:比如做一个工具方便批量导出图片,给100个sn信息,抓出相关图片,导出独立的分析软件或者报告,这个工具不是服务器端,给工具一个图片服务器ip,就自己连图片服务器导出图片(场景有多个图片服务器)。这个工具导入sn和sn相关MES数据excel文件,不光是只有sn。还可做一个独立查询工具,批量查询,能查询mes和图片相关数据。不要等到有客诉后再想起去抓数据和图片,那时候搞的人仰马翻,提前做好工具。

先说结论:在你这个量级上,不是”哪家对象存储更快”的问题,而是 NAS 这条路本身走不通。我先把账算给你看。

一、你的真实负载(按 5TB/天、60 天、500 台设备)

指标数值意味着什么
逻辑容量300 TB​5TB × 60 天
EC 20+4 后裸容量450 TB(80% 水位)约 21 块 22TB 盘
2 副本后裸容量750 TB​约 35 块 22TB 盘 —— 差了 300TB
8 小时班次吞吐182 MiB/s ≈ 1.5 Gbps​千兆网卡直接不够用​
4 小时高峰364 MiB/s ≈ 2.9 Gbps必须万兆/25G
稳态在途并发180–550 条流​中等并发,不难
60 天累计对象数1500 万–6300 万个​← NAS 的真正死因​

最后一行是关键。单图 10MB 的话,60 天就是 3146 万个对象。群晖(Btrfs/ext4)或 fnOS(ZFS)在这个量级上,ls、备份扫描、rsync 全量遍历会慢到不可用,而且 RAID 重建是灾难:22TB 盘做 RAID6,重建一块要 30 小时左右,重建期间性能掉一半,这时候再坏一块就全没了。

NAS 扛不住的不只是吞吐,是元数据规模和重建风险。​ 300TB 已经是分布式存储的门槛了。

二、四家测评

能否扛住断点续传容量效率车间适配判定
SeaweedFS​✅ 大对象 PUT 825 MiB/s,远超 182 需求✅ 原生 TUS 协议(默认开启)✅ EC 20+4 仅 1.2×成熟、Apache 2.0🏆 首选​
RustFS​✅ 4–10MB 图是最强区间⚠️ 仅标准 S3 multipart,需客户端自实现⚠️ EC 10+4 = 1.4×无 GC 长跑稳,但 GA 才两周🥈 备选
MinIO 停更新​✅ 性能够✅✅❌ 已归档、镜像下架❌ 出局
Garage​⚠️ 官方定位”非为极限吞吐/每秒数千请求设计”❌❌ 只有副本无 EC,750TB/35 块盘无内置 TLS、AGPL❌ 出局

为什么是 SeaweedFS 而不是跑分更高的 RustFS?

决定性的不是速度,是 TUS 断点续传协议是原生内置的(/.tus 端点默认开启,支持 creation / termination / concatenation 扩展,客户端库覆盖 JS、Python、Go、Java)。TUS 是专为不可靠网络设计的——车间 WiFi 掉线、设备重启,客户端 HEAD 一查 offset 就能接着传,不用重发整个文件。RustFS 只有标准 S3 multipart,”断点”逻辑要靠你自己用 ListParts 写。

工厂车间网络不稳定是常态,这一条比跑分重要得多。

另外容量账上 SeaweedFS 也赢:EC 20+4 只要 1.2 倍冗余(450TB 裸容量),RustFS 的 EC 10+4 要 1.4 倍(525TB),差 75TB 裸容量 ≈ 4 块 22TB 盘 ≈ 小两万块钱。

三、比群晖/fnOS 更好的方案:四节点分布式架构

纯文本500 台工业相机 / 检测工位
        │  (车间交换机)
        ▼
┌───────────────────────────┐
│  每产线 1 台边缘网关        │  ← 关键:别让 500 台设备直打存储
│  本地 SSD 缓冲 + 限速上传   │     削峰 + 断网兜底 + 重试隔离
└───────────────────────────┘
        │  万兆 / 25G
        ▼
┌───────────────────────────┐
│  SeaweedFS × 4 节点        │
│  node1-4: 各 6 × 22TB      │
│  裸 528TB → EC20+4 可用440 │
│  master 3 副本 Raft 高可用  │
└───────────────────────────┘

硬件清单(单节点 ×4)

纯文本CPU    : 16 核(至强银牌 4314 / EPYC 7302P)
内存   : 64–128 GB   ← 3146万对象 × 16B 索引 ≈ 500MB,余量充足
系统盘 : 2 × 480GB SSD RAID1
数据盘 : 6 × 22TB 企业盘(或 8 × 16TB)
网络   : 双口 25GbE(最低万兆×2 绑定)
电源   : 冗余电源 + UPS

4 节点 × 6 盘 × 22TB = 裸 528TB,EC 20+4 后可用 440TB,扣 20% 水位实放 352TB​ —— 覆盖 300TB 需求还剩 50TB 缓冲。扩容直接加节点,不需要 rebalance(这是 SeaweedFS 对比 Ceph 的大优势,你每天 5TB 滚动写入,最怕的就是加盘触发全量数据重平衡)。

四、三个必须做的工程动作

  1. 网络必须上万兆。​ 千兆只有 ~110 MB/s,8 小时班次缺口 72 MB/s,会持续堵。两条路:升级万兆,或者用边缘网关把 8 小时峰值摊平到 24 小时(摊平后只要 61 MiB/s,千兆勉强够)。如果预算只够改一处,先改网络。
  2. TUS 客户端直接上,别用普通 PUT。​ 图大于 8MB 就走 TUS/multipart,chunk 8–16MB,失败只重传分片。这一条对”稳定上传”的体感提升比换存储软件大得多。
  3. 每天 5TB 全量校验一遍。​ 用 mc 或 rclone 定期抽样下载比对 CRC,别等半年后发现数据烂了。

五、如果你不想自建

  • 要省心 + 有预算:直接买商用分布式存储(XEOS、焱融这类国产方案),带信创适配和 7×24 支持,缺点是 license 费用。
  • 想彻底免运维:腾讯云 COS / 阿里云 OSS,300TB 标准存储约 ¥7000/月,加上车间到云的专线。但 5TB/天上传对专线的带宽要求不低,而且工业数据出园区很多工厂合规不批。
  • 中间路线:COS/OSS 做长期归档,SeaweedFS 做车间本地热存储(60 天内的图本地秒开),到期自动分层上云。这是我最推荐的长期形态。

两个参数会影响最终结论,你确认下:

  1. 单张图多大?​ 如果是 50MB 以上的高分辨率/无损图,对象数降到 630 万,元数据压力小很多,但单张上传耗时长、断点续传的价值更高(更坚定选 SeaweedFS)。
  2. 车间现有的网络是什么规格?​ 千兆还是已经有万兆骨干?这决定了你要不要先做边缘网关削峰,也决定了预算该砸在网络还是硬盘上。

方案太重💥💥💥💥💥💥

JuiceFS,MinIO,SeaweedFS都是重方案,运维很麻烦。

轻量化选FTP(上传)+http(浏览)+mongodb

工厂500台设备,每天5TB数据,保存360天,只上传NG+抽样的10%Pass的图片,要不要拆分多个ftp服务器。每2条线一台ftp服务器。

这些开源分布式文件系统软件,支持linux xfs,但是windows上面是否有限制。

Rocky 和 Ubuntu 对比一句话:

  • Ubuntu Server:系统盘默认 ext4,数据盘需要手动格式 XFS
  • Rocky Linux9:自动安装根分区直接 XFS,做 MinIO 集群更省心。

小提醒

  • XFS不能缩小分区,只能扩容;规划好磁盘容量再上线;
  • 内存建议:XFS 高并发场景,服务器内存尽量≥16G,利于 XFS 缓存。

核心先算一笔账

每日 5TB,存 360 天:5TB × 360 = 1800TB(1.8PB),只存 NG + 10% 抽样 Pass 图片。 FTP 原生短板:

  1. 单 FTP 服务并发、IO、网络吞吐上限低;
  2. 无内置生命周期、无自动分片、无断点续传(传统 FTP 很差);
  3. 无权限细粒度、文件索引弱;500 台设备并发上传,极易卡顿、丢文件、断连接,单纯堆多台 FTP 属于治标不治本,后期运维灾难。

先说:拆分多 FTP 服务器的做法(利弊)

怎么做拆分

按工位 / 产线分组,500 台设备分摊到多台 FTP:

  • 例:5 台 FTP,每台承担 100 台设备上传;设备按网段 / 车间配置,A 车间设备连 FTP1,B 车间连 FTP2。 ✅优点
  • 把并发压力打散,单台负载下降,短时间能缓解 FTP 的卡顿;
  • 故障隔离:一台 FTP 挂掉,只影响对应车间,不是全厂瘫痪。

❌致命短板(重点,你保守底线视角)

  1. 数据分散,统一检索极难 图片散落在 N 台 FTP,MES 查某工单 NG 图片,要遍历全部 FTP 服务器,没有统一索引;做报表、质量追溯非常麻烦。
  2. 没有统一存储池,扩容痛苦 每台 FTP 独立硬盘,硬盘容量各自隔离,有的服务器磁盘满了,有的还空,资源浪费;扩容要单独加机器、改设备配置。
  3. 没有内置自动过期清理(360 天) 需要自己写脚本遍历多台 FTP、删超期图片,多节点脚本容易漏删 / 误删,质量数据风险大。
  4. 可靠性差,无分片、无校验 FTP 上传网络抖动,图片半截文件留在服务器,MES 拿到损坏图片;FTP 本身不做文件哈希校验,要自己额外开发校验逻辑。
  5. 运维工作量翻倍:N 台服务器、N 套账号权限、N 套日志、N 套备份。

结论:可以拆多 FTP 临时救急,但不建议作为长期正式方案,PB 级规模扛不住。

方案梯队(按推荐优先级,匹配 500 设备、日 5TB、留存 360 天)

✅方案 1:MinIO+Linux(首推,强烈推荐,替代 FTP)

完全适配你的场景,比 FTP 更适合工业图片:

  1. S3 协议,支持断点续传、大文件分片、上传成功校验(etag 哈希),网络抖动不怕半截坏文件;
  2. 统一存储命名空间:虽然底层多台服务器磁盘集群,但是对外是一个入口,所有图片统一索引,MES 查询图片只访问一个地址;
  3. 原生生命周期:直接配置360 天后自动删除,界面配置,不用写复杂跨节点清理脚本;
  4. 集群横向扩容,硬盘不够直接加节点,资源池统一;
  5. 权限、访问日志、审计齐全,适合工厂质量追溯。
  6. 客户端 SDK 成熟,AOI 程序改造:把 FTP 上传改成 S3 上传。

缺点:需要改 AOI 采集程序,调用 S3 API;不再是 FTP 协议。

✅方案 2:保留 FTP 协议,底层后端接分布式存储(折中,不想大改 AOI 程序)

用 vsftpd/proftpd + MinIO 网关 / 或者 SFTP 网关 设备侧不变,还是 FTP/SFTP 上传(设备不用改代码,改配置即可),FTP 网关收到文件,自动写入后端 MinIO 集群。

兼顾:设备继续用熟悉 FTP 协议,底层拥有分布式存储、统一索引、360 天生命周期。 注意:FTP 网关是一层转发,要做负载均衡,多网关做高可用。 小坑:网关本身是单点,需要部署多台 FTP 网关做负载。

✅方案 3:JuiceFS(只有硬性必须文件夹挂载才选,不优先推荐)

JuiceFS 挂载成本地目录,搭建 FTP 服务指向这个挂载目录。 AOI 上传到 FTP,实际文件落 JuiceFS。 缺点:架构更重,元数据风险,Windows FUSE 坑,运维成本高于 MinIO。你的场景没必要上 JuiceFS。

❌方案 4:单纯多台独立 FTP(临时过渡,不做长期生产)

只适合短期过渡,后续随着数据持续涨到 PB 级,检索、清理、备份会越来越难,坑会持续爆发。

500 台设备并发的工程要点

  1. 优先 SFTP,淘汰传统 FTP:明文 FTP,工厂内网抓包能拿到账号密码,安全缺陷,能用 SFTP 就不要 FTP。
  2. 上传逻辑增加业务层确认:AOI 上传图片,存储返回成功后,再在 MES 数据库写入图片记录;不要上传完直接记数据库。防止半截坏文件入库。
  3. 网络层面:车间设备到存储集群,划分独立 VLAN,隔离工控控制网,避免存储流量冲击 PLC 产线控制。
  4. 存储硬件:日 5TB 持续写入,机械盘为主,考虑纠删码,不要简单副本,节省 1.8PB 存储成本。

一句话总结

  • 长期正式生产,PB 级图片、500 台设备:不要拆分一堆独立 FTP,优先 MinIO;能改程序直接 S3;不想改设备,用 FTP/SFTP 网关对接 MinIO。
  • 拆分多 FTP 只能临时应急,数据量大之后,检索、清理、运维都会是大麻烦。

要不要我对比:S3-MinIO 与 SFTP 网关方案的改造工作量,以及预估服务器数量?

性能监控网页💥💥💥💥💥💥💥💥💥

这个问题要分两层看,因为CPU、内存、磁盘 IO 这类系统级指标,这四家没有一家是自带的——它们自带的 Web 界面只能看存储系统自己的状态。我把两层的边界先划清楚,你再决定要不要额外搭一套。

一、自带的 Web 界面(开箱即用)

自带 UI能看到什么看不到什么
SeaweedFS​✅ Admin UI(master:9333)节点/volume/磁盘列表、集群拓扑、桶和对象浏览CPU/内存/磁盘IO
RustFS​✅ Console(:9001)Status 页集群在线状态、服务器/网络/驱动器状态、总容量与已用、每块盘的容量和可用空间、对象数CPU/内存/磁盘IO
MinIO​⚠️ 有,但社区版管理功能已被官方砍掉有限—
Garage​❌ 没有内置 Web UI​只有 admin API(:3903)吐 Prometheus 指标全部

Garage 在这条上直接出局——你要得自己装第三方 Garage Web UI,或者干脆只靠 Grafana。

RustFS 的 Console 是四家里”开箱体验”最接近 MinIO 旧版控制台的,Status 页直接有节点健康、容量百分比、实时对象数,命令行 rc admin info cluster rustfs --json 还能拿到机器可读格式。

二、你要的”上传情况 + CPU/内存/硬盘”必须靠 Prometheus + Grafana

这层四家都是同一个套路:软件暴露 /metrics 端点 → Prometheus 抓取 → Grafana 画图 → 再叠一个 node_exporter​ 拿 CPU/内存/磁盘/网络。

各家的接入方式:

  • SeaweedFS:每个组件加 -metricsPort(master 9324、volume 9325、filer 9326、s3 9327 是约定端口),官方提供 grafana_seaweedfs.json 仪表盘。社区版走 push 或 pull 都支持。
  • RustFS:内置 OpenTelemetry,官方有一键拉起 Prometheus + Grafana + Loki 的容器化方案。
  • Garage:admin API 在 3903 端口直接吐 Prometheus 格式指标,官方有现成 Grafana dashboard,配 metrics_token 做访问控制。
  • MinIO:/minio/v2/metrics/cluster,Grafana 官方仪表盘 ID 13502。

三、SeaweedFS 有个值得单独说的选项

SeaweedFS 企业版的 Admin UI 内置了六个监控页面(总览 / Volume Servers / Filers / S3 / Masters / Workers),服务端渲染 SVG 图表,不需要 Grafana,每 15 秒抓一次,能看到:

  • 总览:副本不足的 volume、集群磁盘使用率、请求速率、进出流量、p50/p95/p99 延迟、错误、维护队列深度
  • S3 页:操作速率、4xx/5xx 错误率、p99 延迟、对象大小分布

对你这个场景,S3 页那几个指标基本就是”目前上传情况”的答案。但注意——这是企业版功能,社区版没有。社区版要么自己搭 Grafana,要么接受只有基础 Admin UI。

好消息是 25TB 以下开发测试免费,你这个 300TB 规模要付费;另一个办法是用官方的 seaweed-up 工具,cluster deploy 会自动把 node_exporter + Prometheus + Grafana + SeaweedFS 仪表盘整套拉起来,连 metrics 端口都自动分配好——对你这种 4 节点自建集群,这比手工配省事得多。

四、给你这套 300TB 集群的监控建议

必装的三个东西:

yaml# 监控栈最小可用集(跑在一台独立的小机器或其中某节点上)
services:
  prometheus:   # 抓 SeaweedFS /metrics + node_exporter
  grafana:      # 导入 grafana_seaweedfs.json
  node_exporter:# 每台存储节点都装 —— CPU/内存/磁盘IO/网络全靠它
  alertmanager: # 告警推送(企业微信/钉钉/邮件)

告警规则至少配这五条(按你场景的优先级):

告警阈值为什么
磁盘水位> 80%300TB 滚动写入,60 天过期策略算错就会爆
节点离线立即4 节点 EC 20+4,坏一个就要尽快修
上传错误率5xx > 1%车间网络抖动的直接信号
网络带宽> 80% 万兆你的瓶颈在这,不是磁盘
副本不足 volume> 0EC 分片没补齐,此时再坏盘就丢数据

五、一句话总结

自带网页看”存储状态”:RustFS 最好,SeaweedFS 够用,Garage 没有。

要看”CPU/内存/硬盘/实时上传速率”:四家都得配 Prometheus + Grafana + node_exporter,没有例外。

如果你选 SeaweedFS(上一轮我推荐的),直接用 seaweed-up 一键把监控栈带起来,是四条路里最省事的;如果你更看重开箱即用的控制台观感,RustFS 的 Console 不装 Grafana 也能看个七七八八。

要不要我给你出一份完整的 cluster.yaml(4 节点 SeaweedFS + 监控栈)或者一份 docker-compose 的 Prometheus + Grafana + node_exporter 配置?你说一声我直接写出来。

JuiceFS💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥

JuiceFS vs SeaweedFS |MES 工业存储选型对比(面向 AOI 图片、产线采集日志,适配 Win7/Win11 工控、Linux 嵌入式盒子)

你的场景核心诉求:海量质检小图片、多工位共享读写、产线断电稳定性、尽量不改老采集程序、运维可控、冷数据归档。

https://juicefs.com/zh-cn

https://seaweedfs.com

https://github.com/seaweedfs/seaweedfs

一、核心架构对比表

表格

对比维度JuiceFS(社区版)SeaweedFS(社区版)MES 场景结论
整体架构元数据 + 数据分离。元数据存在 Redis/MySQL/TiKV;文件块存入对象存储(MinIO 等)JuiceFS一体化自研,Master + Filer 元数据 + Volume 数据节点,不需要外置对象存储,一套程序搞定元数据 + 文件存储JuiceFSSeaweed 组件更少;JuiceFS 必须额外维护一套对象存储
POSIX 兼容性完整 POSIX,文件 rename、锁、权限、目录原子操作全部满足,老程序直接 open/read/write,几乎不用改代码JuiceFS基础 POSIX,元数据原子性弱,高并发 rename、多机同时写同一目录有概率出现元数据不一致风险;企业版更强JuiceFS如果老采集软件依赖文件锁、原子更名:优先 JuiceFS
海量小文件(AOI 图片)亿级小文件友好;元数据压力全部压在元数据库,数据库要做高可用,否则单点崩整个存储不可用专门优化海量小文件,支持 Sealed 目录,冷目录元数据打包压缩,极大降低元数据库压力,小文件场景内存占用优势明显seaweedfs….长期百万 / 亿张 AOI 图片归档,Seaweed 更省资源
Windows 工控支持(Win7/Win11)依赖 WinFsp(FUSE)挂载;Windows 客户端是 Beta 版,Win7 兼容性需要实测;自动挂载、断电恢复要自己写脚本JuiceFS同样 FUSE 挂载 Windows;Windows 社区客户端成熟度略好一点,同样依赖 WinFsp两者在 Win7 工控机都要做现场测试,FUSE 都有性能损耗
断电 / 产线突发宕机风险元数据依靠数据库事务保证一致性;但客户端缓存未刷盘数据会丢,业务层要做落盘确认企业版自带断电自愈,启动自动扫描、清理损坏条目;社区版没有该自愈能力,崩溃后有元数据损坏风险seaweedfs….工业产线,不管哪个,业务层必须做写入确认,不能只靠存储
分层冷热存储依赖底层对象存储做冷热分层,冷数据自动下沉到低成本盘原生内置分层,热数据 SSD,冷数据 HDD,无需额外组件单纯冷热归档,Seaweed 更省事
纠删码 EC依赖底层对象存储(MinIO)做 EC原生自带纠删码,直接在 Volume 节点配置,节省硬盘成本,副本开销更低SeaweedFS …想省硬盘,Seaweed 原生 EC 更方便
回收站自带回收站,误删文件可回滚(工业场景很有用,质检图片误删)社区版无回收站,删了直接丢,需要自己做备份方案JuiceFSMES 质检数据,JuiceFS 回收站是加分项
运维复杂度高。至少 3 套组件:元数据库 + 对象存储 + JuiceFS 客户端;元数据库是核心单点,必须集群高可用中等。一套二进制程序,Master+Filer+Volume;只需要维护 Seaweed 集群;Filer 元数据是风险点,要做 Filer 集群人手少、不想维护多套中间件:优先 SeaweedFS
商业支持国内公司 Juicedata,国内技术支持、文档中文完善海外项目,国内服务商少,出问题只能查英文文档面向工厂项目交付,需要售后支持选 JuiceFS

二、优缺点提炼(贴合你的 MES/OEE/ 采集业务)

JuiceFS ✅优点 / ⚠️短板

✅优点

  1. 完整 POSIX,旧采集程序直接读写文件夹,代码改动最小;
  2. 元数据依靠数据库事务,多工位并发写的一致性更强;
  3. 回收站功能,AOI 图片误删可以恢复;
  4. 国内厂商,中文文档、国内落地案例多,工业项目踩坑经验多;
  5. 可以对接 MinIO、Ceph 等,底层存储可以单独扩容、单独备份。

⚠️短板

  1. 架构重,组件多:元数据库 + 对象存储 + JuiceFS 三层,任何一层崩,整个存储挂;
  2. Windows(尤其 Win7)FUSE 挂载属于 beta,工控机长时间稳定性需要实测;
  3. 成本:要维护 Redis/TiKV + 对象存储两套系统,运维人力要求更高;
  4. 小文件海量堆积,元数据库压力持续上涨,需要定期调优数据库。

SeaweedFS ✅优点 / ⚠️短板

✅优点

  1. 一体化单程序,不用额外部署 MinIO、Redis,部署简单,嵌入式盒子、边缘集群友好;
  2. 海量小文件优化极强,冷目录打包,亿级图片元数据占用极低;
  3. 原生纠删码、原生冷热分层,硬件利用率更高;
  4. 资源占用更低,低配服务器也能跑。

⚠️短板

  1. 社区版 POSIX 原子性不足,多台工控机同时写同一目录、高频 rename 场景,存在元数据错乱风险,MES 多工位并发场景是隐患;
  2. 社区版无回收站,质检图片一旦误删除,无法恢复;
  3. 海外开源项目,国内技术支持薄弱,国内工厂案例少于 JuiceFS;
  4. Windows 挂载同样依赖 WinFsp,Win7 兼容性需要现场验证。

三、MES 存储选型决策清单(你可以直接拿来评估项目)

【场景 A:优先复用老采集程序,多工位并发写 AOI 图片、看重数据一致性】→ 选 JuiceFS

适用条件:

  1. 现有采集软件大量本地文件读写,不想大规模改代码;
  2. 多台工控机同时写入同一个目录,频繁 rename、文件锁;
  3. 质检图片误删不可接受,需要回收站;
  4. 有运维人手,能维护数据库 + 对象存储两套服务;

风险预案:元数据库必须部署集群高可用,定时备份元数据。

【场景 B:边缘集群、海量图片归档、人手少、不频繁多机并发写同一目录】→ 选 SeaweedFS

适用条件:

  1. 图片是单工位独立目录(不同工位写入各自文件夹,极少跨工位同时写同一目录);
  2. 核心诉求:海量 AOI 图片长期冷归档,控制硬件成本;
  3. 边缘盒子、小集群,不想部署 MinIO+Redis 一堆中间件;
  4. 可以自己做业务层备份,接受没有回收站;

风险预案:禁止多台机器并发写入同一个目录;定期备份 Filer 元数据。

【场景 C:简单单工位工控机、只存图片,不需要文件夹挂载】→ MinIO(纯对象存储,S3 API)

不需要上面两个分布式文件系统,直接 MinIO,架构最简单、最稳;代价是业务代码需要调用 S3 接口,不能直接本地文件夹读写。

四、底线风险提醒(你的保守风格重点看)

  1. 不管 JuiceFS 还是 SeaweedFS,Windows FUSE 挂载在 Win7 工控都不要直接作为最高优先级核心生产存储,一定要做业务侧校验:文件写入成功才更新 MES 数据库;
  2. 两个方案元数据都是单点风险,元数据必须定时备份;一旦元数据损坏,所有图片文件就算还在也无法索引读取;
  3. 工业产线断电、蓝屏是常态,不要指望分布式存储完全兜底,业务层写入回执 + 异地备份是底线。

五、最简一句话推荐

  • 如果你的 MES:多工位并发往同一个文件夹写 AOI 图片,老采集软件不能大改 → JuiceFS
  • 如果你的 MES:各工位独立目录,以海量图片归档为主,运维人手有限 → SeaweedFS

要不要我再给你整理一份 JuiceFS/SeaweedFS 压场测试清单(工控机断电、并发写入、百万小文件),现场部署前用来验证稳定性?

系统设计💥💥💥💥💥💥

🚩图片名:包含sn,哪个相机,日期

🚩aoi数据:csv,也要包含sn,哪个相机

🚩后台网页查询,关联得上。

🚩客户端:网页配置简单

🚩服务器:网页配置功能要多。 postgres数据库存放配置信息,运维信息,是不是停用哪个上传,指挥更新软件。

🚩减少需求:只存不良图片和pass(10%,不全存)。不然再好得服务器扛不住。有没有互联网大公司的条件,补传图片,补传数据,增加延时

🚩多台服务器,每个车间一台,或者每10条产线一台。做成产品化,方便部署。不要想用一台服务器搞定整个厂区。增加运维成本,升级程序,巡检,多出很多运维工作

直接后果:你不需要 Kafka、不需要万兆网、不需要分布式集群。​ 之前讨论的 SeaweedFS 四节点方案可以砍掉一半,Postgres 单机同步写入绰绰有余——0.9 QPS 对 Postgres 来说是”没在干活”。

三个必须补的洞

1. 只存 NG 会让你丢掉两件事​ —— AI 模型没法迭代(没有负样本)、漏检没法分析(客户投诉时看不到当时的 OK 图)。建议改成:NG 全存 + 边界样本(置信度 0.4–0.6)必存​ + OK 抽样 2%。后者每天只加 0.1TB,成本几乎为零。

2. 存 ROI 裁剪图,别存 10MB 原图​ —— 工业质检实践单张 300KB 左右。缺陷是局部的,全图 90% 是重复背景。再配一张全图缩略,容量还能再降一个数量级。

3. CSV 必须加 image_file 列​ —— 这是整个”关联得上”的分水岭。不加的话服务端只能用「SN+相机+时间窗口」去猜,同工位复测两次、时钟不同步、重传晚到这三种情况一定会错配。让设备侧生成图片时就把文件名写进 CSV,服务端零猜测。

初步方案💥💥💥💥💥💥💥

v2 设计文档已生成,重点补上了补传、延时、多站点、产品化这四块。核心结论:

一、站点拆分:100 台/站点,共 5 个

你说的”不要一台扛全厂”是对的,但理由比”扛不住”更硬:

单中心5 站点
故障爆炸半径100%(全厂停摆)20%(1/5 产线)
骨干网要求万兆(全量图汇聚)千兆(只跑元数据)
扩容停机升级复制一台机器

推荐 100 台/站点 = 每 10 条产线一台,单站点 1U + 2×8TB,约 3–5 万。5 个站点共 15–25 万,比单台高端存储便宜,而且故障隔离。如果车间物理边界明确,按车间划分更好——网络、供电、运维责任天然对齐。

二、补传:三级持久化,图片和数据都要进队列

这是工厂最容易翻车的地方。关键是不要用纯内存队列——工业网关实践里最常见的坑就是第一版用内存缓存,车间断电一次全没了。

纯文本内存环形队列(5分钟)→ 磁盘持久队列(SQLite WAL)→ 服务端确认才标记 done

没收到服务端确认 = 没成功,必须重传。​ 你提到”补传图片、补传数据”——很多系统会漏掉后者,CSV 每一行也要当队列条目(共用 inspection_id,谁先到都能关联)。

三、延时错峰:500 台同时恢复就是一场 DDoS

车间交换机重启,100 台设备同一秒恢复同时补传,服务端直接被打挂,然后再断,循环。三层防护:

  • 指数退避:2s → 4s → 8s…封顶 300s,8 次后转死信
  • 随机抖动 300s:100 台分散到 300 秒内,平均 0.33 台/秒发起
  • 服务端令牌桶:并发上限 20,限速 100MB/s,超出返回 429

还有两个细节:恢复瞬间先 sleep 2–5 秒再开始(服务端可能还没恢复会话);实时数据优先,补传走后台限速通道。

四、最容易踩的两个坑

1. 时间错乱​ —— 周一 14:00 采集的图,周二 09:00 补传成功,如果用上传时间入库,追溯全错。必须区分 captured_at(业务查询/分区/排序都用它)和 uploaded_at(仅运维用)。

2. 工控机磁盘写满 = 产线停线​ —— 这是工厂最不能接受的事故。三层防护:心跳上报剩余空间、只清理已上传成功的、低于 5GB 时停止缓存新图保产线。

五、产品化:一个配置文件 + 三条命令

bashcurl -fsSL .../install.sh | bash    # 1. 装
vi /opt/aoi/site.yaml               # 2. 改配置(站点ID、产线、容量、限速)
docker compose up -d                # 3. 起

目标是让现场工程师(不是开发)30 分钟部署一个新车间。所有差异都在 site.yaml,镜像完全一致,多站点版本不会漂移。内置健康检查、自动建分区、自动清理、备份脚本。

六、中心只同步元数据(联邦架构)

图片永不出车间,骨干网只跑 KB 级摘要。中心挂了、骨干断了,车间本地照常采集查询,产线不受影响。全局查某个 SN 时按摘要定位站点,再向站点发 API 实时拉图。

站点→中心同步推荐应用层上报(复用你已有的补传队列,还能享受断网缓存+幂等),不推荐 PG 逻辑复制——它 DDL 不同步、slot 落后会撑爆 WAL、序列不复制,坑太多。


AOI图像系统v2-多站点产品化设计.html

AOI图像系统设计.html

三个参数会改变配置,确认下我好调整:

  1. 车间是怎么划分的?​ 500 台设备分布在几个物理车间、每个车间几条产线?这决定站点是按”每 10 条产线”还是按”物理车间”划分——后者运维责任更清晰。
  2. 工控机现在有多余磁盘空间吗?​ 队列盘建议预留 100GB 专用分区(断网 15 天也够)。如果工控机硬盘本身就紧张,这块要提前规划。
  3. 中心节点需要吗?​ 如果各车间的产品互不相关、不需要跨车间追溯,可以先不上中心,每个车间独立跑,将来需要时再加。这样第一版的复杂度能砍掉三分之一。

www.erwa.cn 二娃备忘 2026-09-28

上一篇 温湿度,噪声仪表 看板,项目上常见问题。标定+纠偏
下一篇 从【项目思维】→【产品思维】:代码封装
signoz和日志系统 elk的区别?

signoz和日志系统 elk的区别?

SigNoz vs ELK(Elastic Stack),结合你 C# 上位机 + PLC 采集 的场景 一句话概括: ELK:以日志全文检索为核心的日志栈(ES 倒排索引,擅长全文搜报错文本),指标、链路追踪是附加能力,多组件拼凑 SigNoz:OTel 原生一体化可观测平台,

2026-10-20
0 0 0
DateTime.UtcNow , DateTime.Now 有什么区别

DateTime.UtcNow , DateTime.Now 有什么区别

DateTime.UtcNow vs DateTime.Now(C#) 一句话总结 DateTime.UtcNow:获取世界协调时间(UTC,零时区),不受电脑系统时区影响。 DateTime.Now:获取本地时间 = UTC 时间 + 当前操作系统时区偏移。 详

2026-10-16
0 0 0
winform 开机启动

winform 开机启动

c# winform 写的采集程序。平时是登录 windows 桌面,手动点开运行 winform 程序。但是要改成开机启动,不要登录 windows 桌面也能执行 winform 程序。有没有什么办法?不要改造 winform 程序 先说核心结论 WinForm

2026-10-16
0 0 0
C# + Scriban:生成 HTML 报表,自动发邮件(MES / 生产报表场景)

C# + Scriban:生成 HTML 报表,自动发邮件(MES / 生产报表场景)

补充:这套方案在工厂圈子使用情况 MailKit 自动发邮件:大量 MES 在用 Playwright 自动截图 HTML 报表:不少工厂自动化报表在用,属于成熟方案,但不是每个项目都会上。很多项目嫌麻烦就直接 PDF 或者纯表格邮件。 Scriban + Playwright

2026-10-14
0 0 0
C# + Scriban 做静态站点生成

C# + Scriban 做静态站点生成

C# + Scriban 做静态站点生成(对标 baifenwei 的 generate_site.py) Scriban 是 .NET 生态下高性能模板引擎,语法类似 Liquid / Jinja2,刚好用来替代 Python Jinja2,写一个 C# 控制台程序(GenerateSite

2026-10-14
0 0 0
REA(rea.tools)“万物可逆向”:噱头很大,但不是真的什么都能逆向

REA(rea.tools)“万物可逆向”:噱头很大,但不是真的什么都能逆向

REA(rea.tools)“万物可逆向”:噱头很大,但不是真的什么都能逆向 全称 REA = Reverse Engineer Anything,“逆向一切” 只是项目口号,不是能力承诺。 https://rea.tools https://github.com/morluto

2026-10-14
0 0 0
采集上位机LOG文件,不停追加,文件大小50MB

采集上位机LOG文件,不停追加,文件大小50MB

txt 文件很大,40MB,50MB,txt 持续追加,这种场景。Logstash File Input、Flume Taildir、阿里云 Logtail、NewLifeX/X 日志查看工具 Klogg Log Parser Lizard https://githu

2026-10-10
0 0 0
AOI 图片上传 【分布式】方案

AOI 图片上传 【分布式】方案

车间 aoi 的相机图片上传,用飞牛 nas,群晖 nas,高并发,按 5TB / 天、60 天、500 台设备,能不能抗住?如果我在一台服务器放多个 ftp 服务,每条线一个 ftp 服务,端口 8001,第二条线 ftp 服务,端口 8002。ftp 靠谱还 nas 靠谱?稳定,生成环境

2026-10-09
0 0 0
MES 系统 的几种ID比较,雪花id,ULID,UUID

MES 系统 的几种ID比较,雪花id,ULID,UUID

实际场景:浏览器指纹和cookie的UUID 项目FingerprintJS visitorId bdc65ad12633d79792ceeca33a78e6c551.la 访客 ID 5a00c3da-ab80-513d-b7a7-894bcaaecf92来源读取浏览器硬件 / 软件特征,前

2026-10-09
0 0 0
ACCESS数据库访问报错

ACCESS数据库访问报错

AI最擅长找错,分析原因。 💥💥问题1:exclusively locked 因为ACCESS打开数据库后,表:TO_LOGGER_INFO ,当设计视图窗体时,另一个c#小程序去访问这个access数据库会报错: ERROR [HY000] [Microsoft][ODBC Mi

2026-09-29
0 0 0