Wed Apr 01 2026
...
FastComments 自动路由传输系统
引言
FastComments 自动路由传输系统(FARTS)是我们的传输和服务层。FARTS 帮助缓解拥堵,基于用户位置进行流量路由,并可能在未来实现负载平衡。它由几个不同的系统组成,包括一个地理感知的 DNS 层、数据库代理、数据库复制、SSL 证书管理、反向代理,以及使用磁盘 LRU 缓存的 CDN 来在边缘缓存资产。
主动-主动
最新版本的 FART 包含了一个内置的代理和数据库的复制层。这使得 FastComments 可以实现主动-主动的全球写入可用性,确保我们的 FARTS 是最终一致的。更多细节请见此处。
我们早期采取的一种方法是看看能否创建一个主动-主动的 MongoDB 分支。我们的一个工程师(Sloperators)实际上在 Opus 4.6 中实现了这一点,但我们决定这样做的风险高于构建我们自己的独立系统。
大规模 Rust
创建 FART 的部分动机是为了替代一些用 Java 编写的现有服务。在考虑了一段时间后,我们决定将这些服务整合为一个 Rust 服务,以降低运行时开销。这是一个可以接受的折中,因为我们不经常部署 FART。FART 是用 LTO 编译的,所以我们可以充分发挥其性能。
我们花了很多时间试图通过不同的 GC 等手段来调整旧的 Java 系统,最终决定异步 Rust + Mimalloc 在同样的硬件上性能显著更好,并且内存需求大幅降低,因此切换是一个明智的选择。
Rust 在处理使用共享堆和锁的网络相关代码方面表现非常出色。然而,它并不对运行时问题免疫。值得指出的是,由 LLM 编写的 Rust 代码相对容易发生死锁,解决的方法是将系统设计为易于理解的状态机,而不仅仅是异步/等待的堆。
FART 主控
每个部署都包含其自己的 FART 主控。主控负责协调定时任务、网络钩子等。
客户影响
FART 系统已投入生产大约一年。最近我们才进行了主动-主动部署的迁移。跨区域读取自己写入的数据会有一些影响,这在上述链接的博客文章和 文档中 进行了说明。
FART 在后台安静地工作,但其存在感始终显而易见。我们希望您发现我们的系统在您的用例中更快(大多数用户行为导致的数据变化在某些地区会更快)。
部署
部署使用与我们部署服务本身相同的全球协调系统。FART 文档建议 Sloperators 永远不要信任一次部署,始终在发布前验证负载。
部署后 FART 警报遵循升级政策:首先是房间,然后是楼层,最后是建筑物。
总结
人们说互联网是一系列管道,但实际上是一系列声音。
像所有重大版本一样,我们很高兴能够花时间优化、测试并正确发布此更改。我们对即将推出的功能感到兴奋。通过这项工作,FastComments 在长远来看应该能更好地扩展并拥有更好的正常运行时间。正如 FART 运行手册所说:“如果你闻到了什么,请说出来”。如果您发现任何问题,请在下面告诉我们。
