找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

170

积分

0

好友

22

主题
发表于 前天 04:35 | 查看: 8| 回复: 0

Reddit 最近完成了评论后端的重大重构,从传统的 Python 系统迁移到基于 Go 的领域特定微服务,以提升性能和可靠性。这一变化解决了 Reddit 最高写入系统之一的长期延迟和可扩展性挑战,同时为其他核心模型的现代化奠定了基础。

迁移采用了多阶段策略,旨在确保正确性并最小化用户干扰。Reddit 工程师首先在 Go 中实现了所有评论读取端点,并使用 tap-compare 测试方法进行验证。在这种方法中,一部分实时流量被发送到新服务,并将其响应与传统的 Python 系统进行比较,而只有原始响应返回给用户。这使工程师能够在完全切换流量前安全地在生产环境中检测差异。

写入操作更为复杂,因为评论创建涉及多个数据存储:PostgreSQL 用于持久化、Memcached 用于缓存、Redis 用于变更数据捕获(CDC)事件。为防止与生产数据冲突,Reddit 在 tap-compare 测试期间为 Go 服务部署了姊妹数据存储。这些存储镜像了生产模式,但仅处理测试写入,使团队能够验证行为而不风险实时数据损坏。总共,Reddit 测试了三个写入端点和三个数据存储,创建了 18 个独立的验证路径。

迁移过程中发现了几个边缘情况。例如,早期的序列化不匹配意味着 Python 服务最初无法反序列化由 Go 写入的数据,这通过针对传统服务验证 CDC 事件消费者得到解决。数据访问差异也导致数据库压力:Python 单体使用 ORM,而 Go 直接写入,在写入放大下产生更高负载,通过查询级优化缓解。此外,在 tap-compare 期间,当 Python 写入生产数据发生在 Go 写入和比较读取之间时,出现竞态条件。工程师通过在使用生产衍生数据改进本地测试后运行 tap-compare 来解决这些问题。

根据 Reddit 团队,新架构简化了评论系统的依赖链,同时保持对下游系统的完整事件交付保证。迁移到领域特定微服务还为平台进一步分解其他核心服务奠定了基础,这些核心模型包括评论、账户、帖子和子版块。截至本文撰写时,评论和账户两个模型已从 Python 单体完全迁移,而帖子和子版块的迁移正在进行中。一旦完成,所有四个核心模型将在新的微服务架构下现代化。

Reddit 高级软件工程师 Katie Shannon 总结了重写结果:关键写入操作(创建、更新和递增端点)的 p99 延迟相比传统 Python 系统减半,后者此前曾经历高达 15 秒的峰值。社区反馈强调了更快的评论创建和峰值流量期间减少的停机时间。Shannon 指出,仔细管理数据一致性和模式演进,解决了并发和 Go 特定问题。Reddit 基础设施团队补充说,Go 的并发性允许使用更少的 Pod 实现比 Python 更高的吞吐量,使其成为首选。

您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-1 12:48 , Processed in 0.054760 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表