gpt4 book ai didi

c - 什么是保持网络中多个文件一致性的好算法?

转载 作者:行者123 更新时间:2023-12-04 05:29:12 25 4
gpt4 key购买 nike

什么是保持多个文件一致性的好算法?

这是一个学校项目。我必须在 C 中实现,通过网络进行一些复制。

我有2台服务器,

服务器A1
服务器A2


两台服务器都有自己的名为“data.txt”的文件

如果我给其中一个写了一些东西,我需要更新另一个。

我还有另一个场景,有 3 个服务器。

服务器 B1
服务器 B2
服务器 B3


我需要这些做几乎相同的。

虽然这很容易实现。如果其中一台或两台服务器宕机,在重新启动时,它们将不得不自行更新。

我相信有一些算法可以有效地解决这个问题。我知道我想要什么,只是不知道我在寻找什么!

有人可以指出我正确的方向吗?

谢谢!

最佳答案

这里的基本问题被称为“CAP theorem”。 ',它定义了分布式系统可以具有的三个属性:

  • 一致性:从系统读取数据总是返回最新的数据。
  • 可用性:每个响应要么成功要么失败(不只是一直等待直到事情恢复)
  • 分区容错:系统可以在其服务器无法相互通信时运行(服务器宕机是这种情况的一个特例)

  • CAP 定理指出,您只能拥有其中的两个。如果您的系统是一致且分区容忍的,那么它就会失去可用性条件——您可能必须等待分区恢复正常才能得到响应。如果您具有一致性和可用性,那么当有一个分区或足够多的服务器停机时,您就会停机。如果您有可用性和分区容忍度,您可能会读取过时的数据,或者必须处理冲突的写入。

    请注意,这在读取和写入之间分别适用 - 您可以使用可用和分区容忍系统进行读取,但可以使用一致和可用系统进行写入。这基本上是一个主从系统;在分区中,写入可能会失败(如果它们位于分区的错误一侧),但读取将起作用(尽管它们可能会返回陈旧数据)。

    因此,如果您希望读取可用且分区容错,一个简单的选择是将一台主机指定为唯一可以进行写入的主机,并从中同步(例如,使用 cron 脚本中的 rsync 或其他东西 - 在您的 C项目,您只需定期使用一些简单的网络代码复制文件,并在修改后立即进行额外复制)。

    但是,如果您需要对写入进行分区容错,那就更复杂了。您可以有两台无法相互通信的服务器,它们都在进行写入,然后必须弄清楚哪些数据会获胜。这基本上意味着您需要在同步时比较两个版本并决定哪个版本获胜。这可以像“让最高的时间戳获胜”一样简单,或者您可以使用 vector 时钟,如 Dynamo实现更复杂的策略 - 此处是否合适取决于您的应用程序。

    关于c - 什么是保持网络中多个文件一致性的好算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12831403/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com