gpt4 book ai didi

ruby-on-rails - 跨 AWS 扩展应用程序的单点故障

转载 作者:行者123 更新时间:2023-12-03 16:21:07 27 4
gpt4 key购买 nike

我们有一个 基于 Rails 的应用程序 ,部署基础设施绑定(bind)到 亚马逊 .当前架构包括以下层:

  • 负载均衡器 (HaProxy)
  • Rails 应用程序 (EC2) x2
  • MySQLd 数据库(EC2 主从)
  • Redis、DelayedJob 后台进程
  • Wowza 媒体服务器 (EC2)
  • S3 Assets 存储(共享数据)

  • 有 3 个 SPF:负载平衡器、数据库、媒体服务器。

    我的问题是关于冗余,如何降低 SPF:
  • 负载均衡器。我们计划设置辅助负载均衡器,但域名仍然相同。在这种情况下,DNS A/AAAA 循环故障转移是一个好的解决方案吗? AWS 负载均衡器好用吗?
  • MMM(多主复制管理器)可靠吗?它如何与 Rails 一起工作(读/写独立主机)?
  • Wowza 媒体服务器,有什么知名的 HA 解决方案可以使用吗?
  • 最佳答案

    我喜欢这些问题,因为它们似乎总是很容易回答,但实际上并非如此。

    对于初学者,您的 最大 SPF 就是一切都在亚马逊上。我喜欢 AWS 有很多原因,但在所有需要真正可用性的情况下,100% 依赖它们实际上是在自取其辱。因此,您的第一个计划应该是将您的服务分发给多个提供商(云、VPS 或专用)。

    我想问您一个问题:如果 AWS 出现故障,您需要多长时间/可以/将需要多长时间才能注意到它并采取措施,以及您需要多快才能恢复和运行您的服务?

    我问的原因是:A/AAAA 记录的 DNS 负载平衡是一个很好的解决方案,不幸的是,您不能像使用 SRV/MX 记录那样设置权重或优先级。这意味着如果 AWS 变得完全不可用,您必须快速更改 DNS 以删除 IP。那可以如果您的 DNS 提供商有一个允许这样做的 API,则可以自动化。另一方面,DNS 缓存在很多地方执行,因此可能不值得进行 DNS 更改,这意味着如果 1 个 IP 不可用(假设您有 2 个 A 记录),您将拥有 50% 到 100% 的可用性,因为如果第一个 IP 不起作用,某些浏览器可以尝试第二个 IP。

    在我看来,考虑到 AWS 出色的正常运行时间,将 2 个不同的 IP(在 2 个不同的提供商上)分配给您的域是没有错的。我认为这比在 1 个 IP 关闭时获得 0% 的可用性要好,但是丢失 50% 的请求仍然没有乐趣。

    您可以在每个提供者上拥有 2 个负载均衡器,并在某些实例/服务器关闭时让它们将请求转发给另一个提供者。换句话说,您只需要 BOTH 提供商处的功能负载均衡器和 ONE 提供商处的功能服务器/实例。确保选择对 AWS 没有太多延迟的替代提供商;)

    MMM 也是一个很棒的工具,但它与 Rails 没有任何关系。就我个人而言,我更喜欢在我所有的数据库服务器前面放置一个负载平衡器,让它们处理谁收到请求等。因为 数据 在数据库服务器上非常重要,通常最好让人工查看它并确保在出现问题时一切正常,而不是让工具管理其可用性、配置等。 MMM 在许多情况下都可以工作,也许您应该尝试一下,看看它是否满足您的需求。我不能说任何坏话。

    我对 Wowza 媒体服务器一点也不熟悉,但是快速搜索一下就知道了一些事情。由于 Wowza 使用 RTSP(UDP TCP),HAProxy 为 不是 一个解决方案,因为它只做 TCP。另一方面,Keepalived 可以执行 UDP 负载平衡(它使用 IVPS/LVS)。事实上,如果您有长查询,Keepalived 也应该用于您的数据库从负载平衡。

    最后一点,有很多方法可以“推出自己的”类似 AWS 的服务,例如 S3 存储。如果您想避免使用 SPF,但仍需要与 AWS 服务相同的功能,则应考虑运行开源变体,例如 Eucalyptus/Cloud.com/Openstack/GlusterFS。设置所有这些东西需要做很多工作,但有一天你会很高兴你可以说:“如果 X 提供者关闭了,Y 可以接管”。

    关于ruby-on-rails - 跨 AWS 扩展应用程序的单点故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065991/

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