Dubbo 幂等性、顺序性
幂等性
一个订单不小心发起了两次支付请求,然后这俩请求分散在了这个服务部署的不同的机器上,结果一个订单扣款扣两次。
保证幂等性,还是的通过业务上来进行处理,比如 处理完数据往 数据库插入一条数据,如果unique key报错了,就说明有重复的请求,事务回滚就可以了。
顺序性
用dubbo的一致性hash负载均衡策略,
将比如某一个订单id对应的请求都给分发到某个机器上去,
接着就是在那个机器上因为可能还是多线程并发执行的,
你可能得立即将某个订单id对应的请求扔一个内存队列里去,
强制排队,这样来确保他们的顺序性。
非常非常小的概率会发生 客户端发出了3条有顺序要求的操作,因为网络原因,到达服务端的顺序发生了改变。
如果对于顺序性要求非常高的系统,解决这种问题可以使用 zookeeper的全局分布式锁。
操作2先于操作1拿到锁,根据业务发现操作1还没进行,释放锁,稍后重试。
操作1拿到锁,进行操作。
操作2重试,拿到锁,发现操作1已经完成,开始操作2的工作。
使用这种锁,会很大的影响系统的并发处理能力。

浙公网安备 33010602011771号