主要观点:
- Yelp 的 Yelp Reservations 服务(yelp_res)为Yelp 上的预订提供动力,2013 年与Seatme 合并,是 Django 服务和网络应用,为Yelp 客户管理器提供预订后端和逻辑,以及处理食客和合作伙伴的预订流程,还为 Yelp 预订应用提供 Web UI 和后端 API。
- 该服务最初基于以数据库为中心的架构,使用“数据库同步”范式和数据库触发器,使用的 PostgreSQL 数据库只有少数资深员工熟悉,导致维护、可见性和中断响应时间等问题,后来切换为 Yelp 标准的 MySQL 数据库。
- 切换数据库过程复杂,引入了新的挑战,如逐步在两个数据存储之间切换、处理 Postgres 特定功能的迁移等,通过一系列技术手段实现了切换,包括代码修改、添加信号处理程序、事务处理等。
- 发布过程分阶段进行,先保持读取在 Postgres 上,逐渐切换到 MySQL 读取和写入,过程相对顺利但也有一些意外情况,如自增主键问题、ProxySQL 内存问题、操作模式改变导致的逻辑和性能问题等。
- 整个项目耗时一年多,感谢数据库可靠性工程和生产工程团队以及 Restaurants 团队的成员,同时介绍了在 Yelp 成为工程师的机会。
关键信息:
- 2013 年合并 Seatme,服务是 Django 相关的。
- 原架构使用 PostgreSQL 及“DB 同步”范式和数据库触发器。
- 切换为 MySQL 以解决维护等问题。
- 切换过程中处理 Postgres 特定功能,如数组列、数据库触发器等。
- 发布分阶段进行,保持读取在 Postgres 上,逐渐切换到 MySQL。
- 过程中有自增主键、ProxySQL 等意外情况。
- 项目耗时一年多,感谢相关团队。
重要细节:
- 服务为餐厅 iPad 应用和 Yelp 预订应用提供服务。
- 切换数据库时处理数据传播和防止双重预订的方式。
- 为实现数据库同步写入添加的模型和信号处理程序。
- 读取数据库时的路由器和中间件设置。
- 不同阶段的切换步骤和时间节点。
- 意外情况的具体表现和解决方法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。