3年前我坚信开源是最好的,3年后我亲手关掉了自己的Milvus集群

2023年,我们团队开始用Milvus开源版搭建向量检索系统。当时的想法很朴素:开源免费、可控、社区活跃。3年过去,我们维护了30多个Kubernetes节点、处理了17次线上故障、升级了8个版本、写了上千行运维脚本。2026年3月,我们做了迁移评估,最终决定迁移到Zilliz Cloud(Milvus的商业版)。

这篇文章不是劝你选商业版,而是把我们的真实经历和数据摊开,让你自己做判断。

开源的"免费":我们3年实际花了多少钱

表面上看,开源软件的许可证费用是零。但我们的实际成本构成如下:

第一年(2023年):搭建阶段

  • 3台AWS i4i.2xlarge服务器:$900/月
  • 1名兼职SRE(20%时间):$2,000/月
  • 学习成本:SRE花了2个月才完全掌握Milvus的运维

第二年(2024年):稳定运行+规模扩展

  • 服务器扩容到5台:$1,800/月
  • SRE时间增加到40%:$4,000/月
  • 处理了9次线上故障,其中2次导致服务中断超过30分钟

第三年(2025年):规模化挑战

  • 服务器扩容到8台:$3,200/月
  • 全职SRE:$8,000/月
  • 数据量突破2亿向量,开始出现性能瓶颈,需要架构层面优化

三年总成本:服务器约$82,000 + SRE人力约$168,000 = $250,000(约180万人民币)

如果用Zilliz Cloud Enterprise,三年总成本约$180,000(服务器全包+运维零)。开源比商业版多花了$70,000。

金句:开源软件的"免费"是许可证免费,不是TCO免费。当你把运维人力的成本算进去,开源常常比商业版更贵。

那17次故障教会了我们什么

3年17次故障,分几类:

  1. etcd相关(5次):集群脑裂、数据损坏、Leader选举失败。etcd是Milvus的阿克琉斯之踵。
  2. 内存不足(4次):查询高峰期QueryNode OOM,触发了Kubernetes的OOM Killer。
  3. 磁盘满(3次):Write-Ahead Log没及时清理,磁盘被写满,整个集群只读。
  4. 版本升级(3次):Milvus从2.2升级到2.3,API不兼容,需要停机迁移。从2.3升级到2.4,索引格式变更,需要重建索引。
  5. 其他(2次):网络分区、Pulsar消息积压。

最关键的一个教训:出了故障,你只能靠自己。Milvus社区很活跃,但社区支持是"best effort"的。凌晨3点etcd崩了,你发GitHub Issue,得等到美国时间早上才有人回复。而商业版有SLA保障,7x24小时响应。

金句:开源社区的支持是"好心人帮你",商业版的支持是"合同要求必须帮你"。凌晨3点的故障,你永远希望是后者。

开源的优势:我们为什么还是怀念它

尽管有种种问题,开源版本有一些商业版无法替代的优势:

  1. 完全可控:你可以修改任何代码,定制任何功能。我们曾修改了Milvus的HNSW索引实现,加入了自定义的早停策略,查询延迟降低了15%。
  2. 数据主权:数据完全在你自己的基础设施上,没有第三方访问。这对金融、医疗等合规要求高的场景至关重要。
  3. 无Vendor Lock-in:你可以在任何时候迁移到其他方案,不会被锁定在某个厂商的生态里。
  4. 审计能力:你可以审查每一行代码,确认没有后门或安全隐患。

金句:开源的价值不是"免费",而是"自由"。如果你需要这种自由,开源是唯一的选择。

我们决定迁移的4个原因

  1. SRE的机会成本:我们的SRE在维护Milvus上花了80%的时间,但向量数据库只是我们基础设施的一部分。如果他能把时间花在更有价值的事情上(如优化模型推理Pipeline),ROI会高得多。
  2. 功能迭代速度:Zilliz Cloud的新功能(如Cardinal、动态Schema、更好的多租户隔离)比我们手动升级Milvus快得多。我们不想再花时间做"基础设施维护"而不是"业务创新"。
  3. 可靠性需求提升:我们的产品从"内部工具"变成了"对外销售的产品",客户要求99.9%的SLA。自托管很难满足。
  4. 团队规模变化:最初搭建Milvus的SRE离职了,新人接手后发现知识传承断层,运维质量下降。

金句:选择开源还是商业版,取决于你的团队在"基础设施"和"业务"之间的时间分配。如果基础设施占用了你最好的工程师50%以上的时间,你应该考虑商业版。

决策框架:你应该选开源还是商业版?

选开源版的场景

  • 团队有2名以上有经验的SRE,且向量数据库是他们的核心工作
  • 数据合规要求必须私有化部署
  • 需要深度定制(如修改索引算法、接入自定义存储)
  • 数据量极大(>10亿向量),商业版的成本不可接受
  • 团队有强烈的开源文化,愿意为社区贡献

选商业版的场景

  • 团队<10人,没有专职SRE
  • 运维向量数据库不是你核心竞争力的组成部分
  • 对SLA有严格要求(99.9%以上)
  • 需要快速上线,不想花时间在基础设施上
  • 数据量在商业版的可接受成本范围内

金句:开源vs商业不是信仰问题,是ROI问题。算清楚你的SRE时薪,乘以维护时间,再和商业版价格比较。答案通常很明显。