交易系统设计(3)-交易流程优化实践②

251 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

④ MySQL读写分离带来的数据不一致问题

部署一个主库实例,客户端请求所有写操作全部写到主库,然后借助 MySQL 自带的 主从同步 功能,做一些简单配置,可以近乎实时的将主库的数据同步给 多个从库实例,主从延迟非常小,一般不超过 1 毫秒

客户端请求的所有读操作全部打到 从库,借助多实例集群提升读请求的整体处理能力。

这个方案看似天衣无缝,但实际有个 副作用

主从同步虽然近乎实时,但还是有个 时间差 ,主库数据刚更新完,但数据还没来得及同步到从库,后续读请求直接访问了从库,看到的还是旧数据,影响用户体验。

任何事情都不是完美的,从主同步也是一样,没有完美的解决方案,我们要找到其中的平衡取舍点。

我们以电商为例,看看如何从 产品层面 来化解这个问题

支付成功后,并没有立即跳到 订单详情页,而是增加了一个 无关紧要的 中间页(支付成功页):

  • 告诉你支付的结果是成功的,钱没丢,不要担心
  • 也可以增加一些推荐商品,发一些营销券福利,引流持续提升网站GMV
  • 最重要的,增加缓冲期,为 订单的主从库数据同步 争取更多时间

取消订单也是同理:弹出取消受理成功页面

⑤ 系统拆分

基础业务逻辑下沉到服务,业务模型需要统一抽象,能支持定制扩展。如对不同规格优惠券原子性拆分、动作类型定义,数据重组。非核心数据可以考虑复合字段,数据异构化并考虑引入搜索,满足多维度查询。

Web 产品层专注表示逻辑和编排,可借助 SPI 业务框架、流程引擎、规则引擎等基础业务框架,在业务支撑上做到了灵活可扩展。系统也做了比较合理的分层,每层只需要关心本层所需关注的能力。