读写分离架构:从理论到实践的深入剖析
1. 读写需求差异与一致性探讨
在软件开发中,我们常常会遇到读写操作的不同需求。以电商场景为例,写操作涉及订单处理、库存分配等复杂业务逻辑,而读操作则主要是为用户提供商品信息展示。
在 MADE.com 的系统中,订单处理和库存分配是一个复杂的过程。在繁忙的一天里,每小时可能处理一百个订单,同时每秒可能有一百次商品浏览。对于商品浏览,用户可能不会在意查询结果有几秒的延迟,但如果库存分配服务出现不一致,就会导致订单混乱。
为了提高读操作的性能,我们可以采用最终一致性的策略。但很多开发者会担心读操作的一致性问题。下面通过几个场景来分析:
- 场景一 :当 Bob 访问不对称梳妆台页面时,“获取可用库存”查询结果已经过时 30 秒,而此时 Harry 已经买走了最后一件商品。当尝试分配 Bob 的订单时,就会失败,我们只能取消订单或者补货延迟交付。
- 场景二 :Bob 和 Harry 同时访问页面,Harry 去泡咖啡,回来时 Bob 已经买走了最后一件梳妆台。当 Harry 下单时,由于库存不足,我们只能退款或者补货延迟交付。
- 场景三 :即使我们构建了一个完全一致的 Web 应用,Harry 先下单买走了梳妆台,但在仓库发货时,家具从叉车掉落损坏。此时我们也只能退款或者补货延迟交付。
从这些场景可以看出,软件系统与现实情况总是存在不一致性,我们需要业务流程来处理这些边缘情况。因此,在读取端用性能换取一致性是可行的,因为陈旧数据几乎是不可避免的。
读写操作的差异