最近有看到博文说高并发下单解决方案使用缓存+异步的方式。下单的时候从缓存中获取用户数据和商品数据,然后生成订单号,通过消息队列异步完成订单入库。不明白的地方,如何异步下单如何确保订单入库成功?订单成功之后,用户看到的订单数据是从数据库查询还是在缓存中获取?
使用缓存+中间件的目的主要是为了提升下单接口的吞吐能力,至于怎么解决的我们分析下流程,有什么问题在交流不对的地方指正一下。
你问的东西要回答清楚可不是一二句话的事情,这里简单介绍下。
一般来说,你所谓的缓存一般可以缓存用户数据和热点商品数据,而商品通用标签模型可选用分布式集群的NoSQL进行存储,重要的数据需要做实时或异步刷磁盘持久化操作,大多数系统下单时并不是从缓存拿库存(缓存存取库存需要保证一致性,一般要求强一致性,业务实现复杂度相对较高,部分业务场景在设计时会考虑弱一致性,比如非热点店铺非热点商品的库存展示可以使用较短间隔的缓存)。
异步的目标是削峰填谷,提高单位时间内系统通行量,突破高并发时的系统瓶颈,下单过程部分数据选用了异步就一定要做好最终一致性,保证异步的数据最终都能同步成功,否则不适合异步。
类似这样的系统,解决方案是:减少不必要的请求(缓存+按需开启or关闭入口)+内存计算&存储+事件MQ异步解耦拆分+业务服务和数据服务拆分等方式实现。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。