tcc是什么?
基于微服务,实现一致性,要么都成功,要么都失败,t:try,c:confirm,c:cancel。4
t,可以讲需要修改的数据,改为要修改的预值,增加一个字段,如果以前的状态是从,未付款到已付款,现在就是改为待处理。
c,查看新的字段是否存在修改预值,有则正常执行
c,异常状态,则删除修改预值,同时将改变过得值修改回来
生产中我们用的是消息异步怎么办?
首先尽可能的保证99.99%高可用。
上游服务投递消息和下游服务接受消息加校验,
做一个定时线程去检测消息状态。去获取状态,执行下步操作。
高可用降级
当中间件消息宕机了,我们可以用到redis的kv存储队列代替,当消息中间件回复了再确保kv存储中没消息了再换回来。
不过我们需要再kv中提前固定好队列,去对应通过hasn算法分发,确保每个key不会写入过多。同时需要zk触发一个降级开关。开启一个线程每隔一段时间投递消息给mq。