分布式系统存储层的读写流程
0 分布式集群的数据一致性 分布式集群的存储层一般由缓存层与数据固化层构成。 对存储层进行读写的时候,需要考虑到数据的一致性。数据一致性分为强一致(实时一致性)和弱一致(最终一致性),根据数据一致性要求的不同,读写流程也要做相应的改变。下面结合个人经验给出两种情况下的读写流程步骤。 一般的简单的分布式系统,缓存层可以使用redis集群,固化层则可以使用mysql或者mongodb集群。 限于个人经验,本文所指的缓存层专指redis集群,固化层专指mysql或者mongodb集群。 下面所有函数都遵循的几个条件: 1 数据的key(如key="foo.bar")有垃圾值rubbish(如rubbish = "rubish-123987401234-zbert-rubish"); 2 key相关的锁为lock(如lock = "lock.foo.bar") 3 lock为乐观锁,其超时时间为ttl(如ttl = 10s) 1 强一致性系统的读写流程 强一致性系统要求缓存和数据库的数据实时一致。这就要求写操作期间既要防止多个写请求之间发生冲突,又要防止读请求与其发生冲突。 写流程 func write(key, value) err { err = "okay" // 1 生成本次lock的随机值rand,然后申请lock; rand = time().now() * getpid()