load-balancing - 如何实现高可用?

标签 load-balancing failover user-accounts high-availability database-replication

我的老板想要一个系统来考虑整个大陆的灾难性事件。他想在美国有两台服务器,在亚洲有两台服务器(每个大陆有 1 个登录服务器和 1 个工作服务器)。

  • 如果地震破坏了两大洲之间的联系,两者都应该单独行动。当连接恢复时,它们应该相互同步恢复正常。
  • 外部云系统不允许,因为他没有信心。
  • 系统应考虑可扩展性,这意味着添加新服务器应易于配置。
  • 服务器应该是负载平衡的。
  • 服务器之间的连接应该非常安全(加密并通过 SSL 发送,尽管 SSL 负责加密)。
  • 系统应允许一个且仅一个用户使用一个帐户登录。 (注意大陆和两个用户共享帐户之间的延迟可能同时到达两个登录服务器)

  • 请帮忙。我的智商已经穷尽了。先感谢您。

    最佳答案

    我想这些要求(如果分析得当)本质上是不兼容的,因为它们不能根据 CAP 定理工作。

    如果您有多个数据中心,即使它们在附近,也会发生分区。如果发生分区,则必须丢失可用性或一致性,因为:

  • 您有一个预先确定的“主”,它继续工作,而其他“从”DC 出现故障(或变为只读)。这以牺牲可用性为代价来保持一致性。
  • 或者您在分区期间失去一致性(这意味着依赖于即时一致性的操作也不可用)。

  • 据我所知,这与您的要求不符。你老板想要的显然是不可能的。他需要了解CAP定理。

    现在,在您的应用案例中,为了方便起见,您可能决定可以改变规则并重新定义一致性或可用性是什么,并拥有一个降级为不一致但暂时可接受的状态的系统。

    您可能希望让产品管理人员查看这些需求的业务案例。删除其中一些可能没问题。一致性是一个很好的保持要求,因为它使事情按照人们的预期运行——这意味着降低可用性或分区容错性。从工程的角度来看,保持一致性肯定更容易。

    关于load-balancing - 如何实现高可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2459818/

    相关文章:

    java - 在 Apache 负载均衡器中读取工作属性配置失败时出错

    postgresql - 同一数据库上的两个主实例

    apache-camel - 故障转移负载均衡器中的死锁

    azure - Azure 上的 MarkLogic 故障转移群集 - Azure Blob 上的林配置

    c# - 在 C# 中检查用户帐户设置

    powershell - 列出本地用户及其组

    将流量分配到谷歌云上的多个主机的 DNS 配置

    javascript - 用于连接到不同 WebSocket 服务器的多个 WebSocket 客户端的 Node.js 集群?

    meteor - 向 Meteor 用户帐户添加更多字段

    multithreading - 编排 Windows Azure Web 角色以应对偶尔的高工作负载