DevilKing's blog

冷灯看剑,剑上几分功名?炉香无需计苍生,纵一穿烟逝,万丈云埋,孤阳还照古陵

0%

ELE transaction system

原文链接

DDL成本问题,

两维 Sharding ,两个维度都是 120 个分片,但是可以通过三种方式路由(用户 ID、商户ID、订单ID),写入优先保证用户维度成功。由于资源的原因,用户和商户分片是交错混合部署的。

几条原则:

1、订单不对外直接暴露自身状态,而是以事件的方式对外暴露。因为状态是一个描述,而事件则代表了一个动作,同时可以将订单状态细节和接入方解耦。

2、消息广播仅用于广播事件,而不用于数据同步,如消费者需要更多的数据则反查订单数据接口,时间戳包含事件产生时间和发送时间(时间是后来加上的)。

3、消费者在消费消息时应当保证自身的幂等性,同时应当让自己在消费时无状态。如果一定要顺序消费,那么自行通过Redis等方案实现。

4、消费者接入时, Topic 和 Queue 需要按照一定命名规范,同时, Queue 的最大积压深度为 10k ,超过则舍弃

RabbitMQ 死进队列的特性(即消息设置一个过期时间,等过期时间到了就可以从队列中舍弃或挪到另外的地方)