分布式系统-7-乐观并发控制
2017-01-08 本文已影响199人
王谙然
两阶段提交是广义的协调集群数据一致性。如果要求各个集群强一致性保障,会因为大量使用锁付出性能代价。假如现在我们的各个集群的各自业务很少交集,冲突比较少,而这意味着我们可以不在协调者中使用锁,例如分布式对象存储,可以根据不同对象名称区间范围各司其职。为了提高上面这种应用场景的并发效率,有了 OOC(Optimistic Concurrency Control) 乐观并发控制。
相对于悲观算法用锁串行化执行事务,乐观算法在只有当冲突发生的时候才采取措施。
对应两阶段提交,准备阶段:多个 client 预执行事务同时向 server 发送验证请求;提交阶段:server 会通知各个 client 各个事务是否会破坏一致性,若可以执行,则各 client 进行 commit,若干不可执行,则各自回滚。
有意思的是在整个系统对外服务时,所有的数据操作都先在 client 进行,若没有冲突则将修改在 server 更新数据,同时给 client 返回最新数据。这样一来是不需要再 server 对全局资源加锁,而且可以将负载分散到各个集群。当然这么做也是有很大的代价:事务之间的冲突会比传统的方式消耗更多的性能。
这种方式可以很好地提高 server 的性能,但是要注意选择合适使用场景,扬长避短,合理的分配各个集群的业务分配,尽量做到各自独立。