如何保证分布式系统本地缓存节点会话一致性

概述

分布式系统经常会采用缓存提高系统吞吐量,从缓存存储的方案,缓存分为本地缓存和分布式中间件缓存(redis、memcached等)。对于分布式中间件缓存的节点同步其实还是很好处理的,应用服务器集群都是向中间件缓存操作缓存数据,只需要保证缓存中间件节点的数据一致性即可保证缓存数据一致性。当然,对于不同的缓存中间件,节点数据同步机制也处理方案也会有所不同,衍生了一系列解决方案:一致性hash、数据标识hash存储、分片,读写分离等等。我觉得相对分布式系统缓存节点数据一致性,本地缓存节点数据一致性更加有挑战(当然后续如果有机会也会写一篇分布式缓存节点数据一致性的介绍)。

当然从设计方案上肯定优先考虑分布式缓存,但是对于频繁读取并且数据量较小情况,采用本地缓存将会大大提高系统的吞吐量,读取一次分布式缓存,就算是内部机房情况,都会有0.5ms的时间损耗,如果遇到业务复杂,并且性能,时延需要严格控制的情况,那采用本地缓存无非是一种不错的解决方案。本文,将进一步阐述在分布式系统中本地缓存节点数据一致性的解决方案(主要是会保证用户体验方面,对数据允许一定时间脏读)

如何保证分布式系统本地缓存节点会话一致性_第1张图片  

 

方案一  MVCC 和 全局时间钟方案

MVCC即多版本并发控制(Multi-Version Concurrency Control),原本是数据库系统如Oracle、Mysql、PostgreSQL等为了更好的处理锁机制,才有乐观锁的一种实现方式。通过保存数据在某个时间点的快照来实现,这意味着一个事务无论运行多长时间,在同一个事务里能够看到数据一致的视图。根据事务开始的时间不同,同时也意味着在同一个时刻不同事务看到的相同表里的数据可能是不同的。借助这样的方案也可以在缓存系统实现本地缓存数据一致性的,通过快照方式,各个分布式节点可以在该时间点,查询当前时间点对应的快照。

如何保证分布式系统本地缓存节点会话一致性_第2张图片

 

 

方案二  环形刷新算法方案

待续。。。

 

方案三  采用流量定向实现回话一致性

 

方案三 延迟时间检测方案

 

 

 

 

 

你可能感兴趣的:(分布式)