如何在分布式计算中保持强一致性?
How to maintain strong consistency in distributed computing?
例如我有 Master(M) 和 Slave1(S1) 和 Slave2(S2)。如果我如下进行同步复制,
- 更新Master,并锁定写入
- 复制 Slave1 和 Slave2
- 解锁大师的写法
但以上一致性不强
- 场景 1,当 S1 和 S2 的复制都成功时,
读取Slave1或Slave2的用户在某个时刻可以得到不同的值
- 场景二,复制S1成功,复制到S2失败。
在这种情况下,Master应该取消对S1的写入。但用户可能已经阅读了它。
所以很难保持强一致性。那么,如果有必要,公司会使用什么算法来保持强一致性呢?
如何使最终的写入值在同一时间对客户端可见?
谢谢。
用最简单的形式表达;
有两种方法可以提供一致性
首先是在向数据库写入任何内容之前获取锁或者
缓存系统。这样就保证了读写锁。这包括
还有主服务器。
为了进一步增强锁定机制,密钥的分配是
保持这样,所以读取总是被重定向到
一致的服务器(如果当时还添加了新服务器)。
此时加锁,操作也可以缓冲(有超时)
所以当应用新值时。返回。
- 其次,如果复制失败则添加复杂层
翻车。这确保数据是一致的,如果不一致,那么它是
未应用。
例如我有 Master(M) 和 Slave1(S1) 和 Slave2(S2)。如果我如下进行同步复制,
- 更新Master,并锁定写入
- 复制 Slave1 和 Slave2
- 解锁大师的写法
但以上一致性不强
- 场景 1,当 S1 和 S2 的复制都成功时,
读取Slave1或Slave2的用户在某个时刻可以得到不同的值
- 场景二,复制S1成功,复制到S2失败。
在这种情况下,Master应该取消对S1的写入。但用户可能已经阅读了它。
所以很难保持强一致性。那么,如果有必要,公司会使用什么算法来保持强一致性呢? 如何使最终的写入值在同一时间对客户端可见? 谢谢。
用最简单的形式表达;
有两种方法可以提供一致性
首先是在向数据库写入任何内容之前获取锁或者 缓存系统。这样就保证了读写锁。这包括 还有主服务器。
为了进一步增强锁定机制,密钥的分配是 保持这样,所以读取总是被重定向到 一致的服务器(如果当时还添加了新服务器)。
此时加锁,操作也可以缓冲(有超时) 所以当应用新值时。返回。
- 其次,如果复制失败则添加复杂层 翻车。这确保数据是一致的,如果不一致,那么它是 未应用。