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

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 跨AWS扩展应用程序的单点故障前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个基于Rails的应用程序,部署基础架构绑定到AWS.当前架构包括以下层:

>负载均衡器(HaProxy)
> Rails-application(EC2)x2
> MySQLd数据库(EC2主从)
> Redis,DelayedJob后台进程
> Wowza媒体服务器(EC2)
> S3资产存储(共享数据)

有3个SPF:负载均衡器,数据库,媒体服务器.

我的问题是关于冗余,我如何减少SPF:

>负载均衡器.我们计划设置辅助负载均衡器,但域名仍然相同.在这种情况下,DNS A / AAAA roundrobin故障转移是否是一个很好的解决方案? AWS负载均衡器是否适合使用?
> MMM(多主复制管理器)可靠吗?它如何与Rails(读/写独立主机)一起使用?
> Wowza媒体服务器,有没有任何着名的HA解决方案可以使用?

解决方法

我喜欢这些问题,因为它们总是看起来如此简单,但事实上它们并非如此.

对于初学者来说,你的BIGGEST SPF就是所有东西都在亚马逊上.我喜欢AWS有很多原因,但在所有你需要真正可用性的情况下,你实际上是100%依靠它们来自我攻击.因此,您的第一个计划应该是将您的服务分发给多个提供商(云,VPS或专用).

我想问你一个问题:如果AWS发生故障,你需要多长时间/可以/将会注意到它,然后对它做些什么,以及你需要多快恢复和运行你的服务?

我问的原因是:A / AAAA记录的DNS负载平衡是一个很好的解决方案,遗憾的是,您无法使用SRV / MX记录设置权重或优先级.这意味着如果AWS完全不可用,您必须快速实现DNS更改才能删除IP.如果您的DNS提供商拥有允许该API的API,则可以自动执行此操作.另一方面,DNS缓存在很多地方执行,可能不值得进行DNS更改,这意味着如果1个IP不可用,您将拥有50%到100%的可用性(假设您有2个A记录),因为有些浏览器能够尝试第二个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相关文章