it_worker365

   ::  ::  ::  ::  :: 管理
A - 1 ---> B + 1
同一机器,锁
不同机器:
 
两阶段提交(性能,网络开销,锁--不行)
Prepare(对所有映相关数据加锁)(A - 1) at 机器A->prepare (B + 1) at 机器b ->commit(A) ->commit(B)
 
因为A必须要保证不为负值,但是B只是增加,没有限制,所以可以考虑最终一致性
A
开启事物
完成A - 1
将B + 1操作写入本地log表,并自动生成唯一的transactionid
关闭事物
 
异步发送消息给消费者
消费者接收到消息后,取到log表和transactionid
B
检查transactionid是否重启(去重表)
开启事务
操作B + 1,将transactionid加入去重表
关闭事物
 
如果A - 操作频繁,事物操作过多,堆积
1. 利用两阶段提交协议将“将B + 1操作写入本地log表,并自动生成唯一的transactionid”放在另一台机器执行。。。失败成功 无反馈
2.冗余A,此时如果有好多订阅者订阅了 B + 1这个事件,那么都要去A读这个表,造成负载过重,通过队列才用推拉结合的方式减轻压力
发送端发送到目标机器后存在三种反馈,成功失败无反馈(分布式事物或努力送达---只有成功才停止投递)
 
posted on 2017-05-05 17:10  it_worker365  阅读(153)  评论(0编辑  收藏  举报