如何实现高可用性?

时间:2010-03-17 03:56:09

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

我的老板希望建立一个能够引起大陆灾难性事件的系统。他想在美国拥有两台服务器,在亚洲拥有两台服务器(每个大陆有1台登录服务器和1台工作服务器)。

  1. 如果地震破坏了两大洲之间的联系,两者都应该独自工作。当连接恢复时,它们应该彼此同步恢复正常。
  2. 外部云系统不允许,因为他没有信心。
  3. 系统应考虑可扩展性,这意味着新服务器的添加应易于配置。
  4. 服务器应负载均衡。
  5. 服务器之间的连接应该非常安全(加密并通过SSL发送,尽管SSL负责加密)。
  6. 系统应该让一个且只有一个用户使用一个帐户登录。 (注意大陆和两个用户共享帐户之间的延迟可能同时到达两个登录服务器)
  7. 请帮忙。我已经结束了我的智慧。提前谢谢。

4 个答案:

答案 0 :(得分:6)

我认为这些要求(如果分析得当)基本上是不相容的,因为它们不能按照CAP定理工作。

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

  • 你有一个预先确定的“主人”,它会继续工作,其他“奴隶”DC会失败(或者只读)。这会以可用性为代价保持一致性。
  • 或者您在分区持续时间内失去一致性(这意味着依赖于立即一致性的操作也不可用)。

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

现在,在您的应用案例中,为了方便起见,您可以决定弯曲规则并重新定义一致性或可用性,并使系统降级为不一致但暂时可接受的状态。

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

答案 1 :(得分:4)

这是雇主往往不了解使用现成解决方案的好处的另一个问题。如果你作为一个程序员甚至不知道从哪里开始,那么滚动你自己可能是一个巨大的金钱和时间下沉。不知道这些东西也没什么不对;高可用性,故障安全网络考虑到关键组件的灾难性故障是一个很大的问题领域,许多人投入了大量的精力和金钱。为什么不利用提供商提供的服务呢?

再次尝试与老板讨论使用现有云提供商的问题。

答案 2 :(得分:1)

您可以联系全球不同地区拥有数据中心的坚实且经验丰富的托管服务(我们使用Rackspace),并根据您的要求获取建议。

答案 3 :(得分:0)

这需要专家协助和大量预算,以及认真的计划。

我更好的选择是联系具有全球影响力的信誉良好的提供商,并选择一个高级解决方案,并提供可靠的SLA备份服务,并让他们定制一个接近您需求的解决方案。

即使像谷歌,雅虎,微软和亚马逊这样的人(仅举几例),也曾经有过一些或其他问题,这些问题导致那些系统的某些部分离线某些用户。