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 编译的,因此我们可以充分发挥其性能。
我们花了很多时间尝试通过不同的垃圾回收器等来调整旧的 Java 系统,最终决定异步 Rust + Mimalloc 在相同硬件上表现明显更好且内存需求更低,因此切换是一个明智之举。
Rust 在使用共享堆和锁的网络相关代码方面表现非常出色。然而,它并非对运行时问题免疫。 值得一提的是,LLMs 用 Rust 编写的代码相当容易发生死锁,规避这一问题的一种方法是设计易于理解的状态机系统,而不是仅仅堆积异步/等待。
FART 主控
每个部署都有自己的 FART 主控。主控负责协调 cron 作业、webhooks 等。
客户影响
FART 系统已经在生产环境中运行大约一年了。我们最近才进行了活动-活动部署的迁移。 在不同地区读取您自己的写入数据时会有一些影响,这在上面链接的博客和 文档中 有详细说明。
FART 在后台静静地运行,尽管它的存在始终可以感受到。我们希望您发现我们的系统在您的用例中更快(主要是用户操作导致数据变更的行为在某些地区会更快)。
部署
部署使用我们用于服务自身部署的相同全球调度系统。FART 文档建议 Sloperators 永远不要信任任何部署,始终在发布之前验证有效负载。
部署后,FART 警报遵循升级政策:首先是房间,然后是楼层,再然后是建筑。
结论
人们常说互联网是一系列管道,但实际上这是一系列放屁。
像所有重大版本发布一样,我们很高兴能够花时间优化、测试并正确发布这一更改。我们对即将到来的工作感到兴奋。 通过这项工作,FastComments 应该能够更好地扩展并在长期内有更好的正常运行时间。正如 FART 操作手册所说:“如果您闻到异常,请及时反馈。”如果您发现任何问题,请在下面告知我们。
