gpt4 book ai didi

c# - 自组织应用

转载 作者:IT王子 更新时间:2023-10-29 04:50:07 27 4
gpt4 key购买 nike

我对许多人将在办公室使用的应用程序有以下要求 - 没有服务器组件。客户端应用程序的所有实例都应该以某种方式在它们之间进行协商,以决定哪个客户端将承担服务器角色。客户端之间应通过 IP 进行通信。

如果客户端应用程序宕机,另一个客户端必须以无缝方式接管。我知道拥有服务器会简单得多。但是因为应用程序必须非常有弹性,所以当事方不想冒服务器宕机(甚至备份)的风险,而是依赖于这种混合网状连接,服务器角色在客户端之间跳来跳去。

我想我的应用程序连接中断了。基本上,当应用程序启动时,它会通过 UDP 宣布自己(通过预定义的 IP 地址,一切都在监听或通过 UDP 广播)。从那时起,通信以类似的方式进行。

我遇到问题的部分是如何在客户端之间协商/自组织以选择一个具有服务器角色的客户端。以及如何可靠地检测到客户端已关闭,然后必须进行新的协商。最后一个困难是复制由具有服务器角色的客户端积累的数据。

我在 c# 中创建了一个原型(prototype),用于通信并尝试复制数据,但协商部分(特别是与客户端故障相结合)。

最初我认为 ZeroConf(又名 Bonjour)就是这么做的。但这只是宣布可用的网络服务。

无论如何,我不想重新发明,我也不是第一个想这样做的人。所以我的问题:

  • 是否有一种模式已经实现了我上面描述的内容?
  • 如果是这样,是否有可用的 .NET(甚至 native )库?
  • 在客户端之间协商服务器角色的好方法是什么?

最佳答案

在一组机器中选择一个服务器,无论这些机器是否也是客户端,是一个非常重要的问题。这称为领导人选举。您应该阅读的开创性著作是 Leslie Lamport 的 The Part Time Parliament ,它描述了 Paxos 协议(protocol)。 Google 利用 Paxos 开发了一个名为 Chubby 的系统,它服务于您描述的目的。

也就是说,您可能应该看看 Apache ZooKeeper 这样的系统,它是分布式领导者选举的开源(尽管是 Java)实现,更广泛地说,分布式锁管理已经在大量负载下进行了全面测试。 Hadoop分布式数据存储和计算平台,特别是HBase ,一个在 Hadoop 上运行的分布式数据库,大量使用 ZooKeeper 来决定一组服务器中的“谁负责”。这样他们中的任何一个都可以下台,其他人可以自行决定谁接管工作。

正如我之前提到的,领导者选举充满了错误。很难做到正确。我已经在 C# 中“为了好玩”实现了六次 paxos,所有我的实现中都有错误。

关于c# - 自组织应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9165220/

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