java并发编程的艺术新版读书笔记(分布式基础)

45 阅读3分钟

BASE思想就是AP模式的一种成功实践。

一致性:表示分布式系统的不同分区之间的数据副本是一致的。这么定义有些严格,宽泛地讲,从外部请求这个分布式系统,先进行写,后进行读,总能读到最新的值。如果由于分区的存在,导致读到了旧值,但通过数据同步使得分区间的数据在一段延迟后重新一致,响应恢复正常,这种情况可以称为最终一致性或瞬时不一致。
可用性:如果一个系统能够在任何时刻提供服务,那么这个分布式系统就被认为具备良好的可用性。如果由于分区的存在,导致系统从整体上看有稳定性风险,那么该分布式系统的可用性是不足的。
分区容错性:表示分布式系统的多个分区(或者副本)之间能够封闭运行,可以在一个分区出现问题或者分区之间出现问题的情况下稳定工作,那么该系统具备良好的分区容错性。

分区模式:

数据分区:不同的数据类型对于一致性的要求是不同的,比如购物车和商品,商品系统一致性要求低一些,购物车系统一致性要求高。商品系统就可以考虑缓存技术。 操作分区:读写分离,写要求的一致性高,读就可以读缓存。 用户分区:用户的地理位置或属性分区,CDN服务就是一个用户分区的例子,用户访问WEB服务,系统会根 据用户的地理位置,将用户获取资源的请求转派到离用户更近的区域网络。 层次分区:

一致性和可用性的矛盾

分布式环境中,分区已成既定事实,因为分区间的通信不能保证绝对意义的可靠。所以: 1、如果看重一致性,那么就需要数据在更新时,在多个分区之间保证强一致,解法就是在更新时锁定多个分区,任意分区出错,则更新失败,但这样会导致可用性降低。 2、如果保证可用性,就必须做到多个分区之间的更新不相互耦合,通过异步消息进行更新,如果任意分区出错,则会进行重试,但这样会无法满足一致性要求。

尽力而为的一致性,即AP类型。在某些场景下,牺牲可用性是不可取的,用户需要立刻看到响应,纵使它的数据不那么实时。AP类型常见的使用场景就是缓存服务,在互联网这种读远远大于写的场景里,缓存服务被大量使用。用户实时数据一般存储在关系数据库中,而缓存服务中的快照数据能够更快地响应用户请求,虽然数据的一致性会收到挑战,但可以使用缓存的过期时间来做到用户数据在二者中的最终一致。

分布式事务:二阶段,拜占庭将军,TCC,seata
分布式协议:raft,paxos