带着问题学习分布式系统之数据分片
|
在MongoDB3.0及之前的版本中,元数据的读写按照下面的方式进行:
MongoDB的官方文档并没有详细解释这一过程,不过在stackexchange上,有人指出这个过程是两阶段提交。 MongoDB3.2及之后的版本,使用了replica set config server,在《CAP理论与MongoDB一致性、可用性的一些思考》文章中,详细介绍了replica set的write concern、read concern和read references,这三个选项会影响到复制集的一致性、可靠性与读取性能。在config server中,使用了WriteConcern:Majority;ReadConcern:Majority;ReadReferences:nearest。 元数据的缓存: 即使元数据服务器可以由一组物理机器组成,也保证了副本集之间的一致性问题。但是如果每次对数据的请求都经过元数据服务器的话,元数据服务器的压力也是非常大的。很多应用场景,元数据的变化并不是很频繁,因此可以在访问节点上做缓存,这样应用可以直接利用缓存数据进行数据读写,减轻元数据服务器压力。 在这个环境下,缓存的元数据必须与元数据服务器上的元数据一致,缓存的元数据必须是准确的,未过时的。相反的例子是DNS之类的缓存,即使使用了过期的DNS缓存也不会有太大的问题。 怎么达到缓存的强一致性呢?比较容易想到的办法是当metadata变化的时候立即通知所有的缓存服务器(mongos),但问题是通信有延时,不可靠。 解决不一致的问题,一个比较常见的思路是版本号,比如网络通信,通信协议可能会发生变化,通信双方为了达成一致,那么可以使用版本号。在缓存一致性的问题上,也可以使用版本号,基本思路是请求的时候带上缓存的版本号,路由到具体节点之后比较实际数据的版本号,如果版本号不一致,那么表示缓存信息过旧,此时需要从元数据服务器重新拉取元数据并缓存。在MongoDB中,mongos缓存上就是使用的这种办法。 另外一种解决办法,就是大名鼎鼎的lease机制 -- “An Efficient Fault-Tolerant Mechanism for Distributed File Cache Consistency”,lease机制在分布式系统中使用非常广泛,不仅仅用于分布式缓存,在很多需要达成某种约定的地方都大显身手,在《分布式系统原理介绍》中,对lease机制有较为详细的描述,下面对lease机制进行简单介绍。 Lease机制: 既然,Lease机制提出的时候是为了解决分布式存储系统中缓存一致性的问题,那么首先来看看Lease机制是怎么保证缓存的强一致性的。注意,为了方便后文描述,在本小节中,我们称元数据服务器为服务器,缓存服务器为客户端。 要点:
(编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
