2

想知道分布式 Python 应用程序的持久架构。 我之前问过的这个问题应该为它是什么类型的应用程序提供一些指导。我们希望有能力拥有多个代码服务器和多个数据库服务器,理想情况下是一些易于管理且不太痛苦的部署方法。

我提到的问题提供了我喜欢的答案,但我想知道如何使它更耐用,或者这样做是否需要使用其他技术。尤其:

我会让我的前端端点是 WSGI(因为你已经写好了)并编写后端以通过消息分发。然后,您将拥有一个后端节点池,这些节点将从 Celery 队列中提取消息并完成所需的工作。它看起来有点像:

Apache -> WSGI 容器 -> Celery 消息队列 -> Celery Workers。

apache 节点将位于某种负载均衡器的后面。这将是一个相当简单的扩展架构,如果做得正确,相当可靠。像这样的系统中的失败代码,你会没事的。

制作持久应用的最佳方式是什么?关于如何“为失败编码”或以不同方式设计它的任何建议,以便我们不必这样做?如果您认为 Python 可能不适合此,那也是一个有效的解决方案。

4

1 回答 1

3

好吧,继续我之前给出的答案。

在我的项目中,我为失败编写代码,因为我使用 AWS 来满足我的很多托管需求。

我已经实现了数据库后端,它将确保数据库、区域是可访问的,如果不能访问,它将从指定的列表中选择另一个区域。这对该节点上的系统其余部分透明地发生。因此,如果east-1a 区域出现故障,我还会托管一些其他区域,因为它将故障转移到,例如西海岸。我跟踪当前正在进行的数据库事务,并将它们发送到西海岸并将它们转储到一个文件中,这样我就可以在旧数据库区域可用时将它们导入。

我的前端服务器位于分布在多个区域的弹性负载均衡器后面,这样可以在区域发生故障时进行持久恢复。但是,它不能被依赖,所以我正在寻找解决方案,例如运行 HAProxy 并在我的 ELB 出现故障的情况下切换我的 DNS。这是一项正在进行的工作,我无法详细说明我自己的解决方案。

为了使您的数据处理持久化,请查看 Celery 并将数据存储在分布式 mongo 服务器中,以确保您的结果安全。使用持久数据存储来保存您的结果可以让您在节点崩溃时恢复它们。它是以牺牲一些性能为代价的,但如果你只依赖软实时约束,它应该不会太糟糕。

http://www.mnxsolutions.com/amazon/designing-for-failure-with-amazon-web-services.html

上述文章主要讨论 AWS,但这些想法适用于您需要保持高可用性和系统持久性的任何系统。请记住,只要您为一部分用户最小化停机时间就可以了。

于 2012-11-06T17:03:35.383 回答