接口幂等
调用幂等性
数据库唯一索引
将接口的唯一标时,如 orderId 作为数据库中唯一索引,使数据插入时失败,失败时不重复处理。
缓存唯一标时
通过缓存判断此订单是否已经处理,需要考虑缓存服务宕机时的处理。
- 缓存需要持久化
- 缓存宕机时阻塞请求或者返回失败,等待缓存恢复后继续处理
调用顺序性
中间服务请求路由
所有请求通过中间服务进行路由,将同一队列中的请求标识顺序并路由到同一台服务器,在服务内做缓存队列,然后顺序处理。
分布式锁强一致
同一队列中的请求通过拿锁保证顺序性,根据顺序标识,序号 3 在 2 拿锁成功前会拿锁失败。拿锁成功后调用成功。为保证上层服务快速响应,可以添加消息中间件。
Simple is Awesome