解决分布式一致性问题 学习2
1.保证最终一致性的模式
查询模式;补偿模式,根据发起行驶分为 自动回复、通知运营、技术运营 形式;一步确保模式;定期校对模式,其中一个关键就是分布式系统需要有一个自始至终唯一的ID,生成ID有两种方法,为 持久型和时间型;
2.可靠消息模式-- 分为 消息的可靠发送和消息处理的幂等性。
保证操作的幂等性的常用方法:使用数据库表的唯一键进行滤重,拒绝重复的请求;使用分布式表对请求进行滤重;使用状态流转的方向性来滤重,通常使用数据库的行级锁来实现;根据业务的特点,操作本身就是幂等的,例如,删除一个资源、增加一个资源、获得一个资源等。
3.缓存一致性模式
互联网经典做法:如果性能要求不是很高,则尽量使用分布式缓存,而不要使用本地换成。
写缓存是数据一定要完整,如果缓存数据的一部分有效,另一部分无效,则宁可在需要时回 源数据库,也不要把部分数据放入缓存中。
使用缓存牺牲了一致性,未来提高性能,数据库与缓存只需要保持弱一致性,而不需要保持强一致性,否则违背了使用缓存的初衷。
读顺序是先读缓存,后读数据库;写顺序要先写数据库,后写缓存。
4.微服务的交互模式--同步调用和接口异步调用、消息队列异步处理。
同步调用适用于大规模、高并发的短小操作,而不适用于后端负载较高的场景,eg,几乎所有JDBC的实现完全适用BIO同步阻塞模式。原则:从业务功能看,尽量使用异步来替换同步;在技术和架构的角度看,能使用同步解决的,不要引入异步。