冗余信息摄入量

时间:2012-06-09 01:09:51

标签: php database redundancy

现状:目前我有几十个网站将html表单数据发送到收集服务器。然后,此集合服务器稍后将数据重新发送到处理服务器。让处理服务器停机并不是什么大问题,但丢失表单数据意味着失去我的工作。

目标:我想确保没有单点故障可以阻止收集html表单数据。

可能的解决方案:我虽然拥有3台服务器,然后从网站向每个服务器发送html表单数据。我想要一些方法来确保只有一个主要副本从收集服务器传递到处理服务器。

#Users fill Form Data  It is Captured Redundantly  And processed here
website01    ->        collectionServer01    ->    processingServer
website06              collectionServer02
website24              collectionServer03
website#N

我认为这称为分布式队列??

问题:假设这是我所描述的分布式队列,这是否是实现我的目标的好方法?人们使用过其他方式吗?您如何建议确保只将一个副本从collectionServers发送到processingServer?

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你就会有这样的事情

Some Website

Another Website                Intake Server               Processing Server
                                (reliable)                    (unreliable)
Yet Another Website

(客户?)引导从许多不同网站流向您的Intake服务器,然后转发到处理服务器。您担心您的Intake服务器出现故障,因为这是您负责跟进的原因。

此问题的典型解决方案是在负载均衡器后面有两个或更多个进入服务器,并拥有一个主服务器和至少一个从属数据库。

为了避免在丢失数据中心时丢失服务的风险(请记住日本的Tsunami?)是在多个数据中心运行您的设置,并使用地理负载平衡将流量发送到最近的数据中心,或者如果失败,则转到其他数据中心之一。

在这种情况下,您可能希望在各种数据中心之间复制所有数据(例如,主/主数据库,本地从站用于冗余,或数据中心A中的主站加数据中心A中的从站加上主站A的从站)数据中心B等。)

我曾多次成功地使用过这种安排。有些服务以非常可靠的方式管理地理负载平衡(尽管它们并不便宜)。

如果Intake Server发生故障,负载均衡器会检测到这种情况并将流量路由到剩余的Intake服务器。如果主数据库发生故障,您将切换到从属数据库并恢复主数据库。

对于负载平衡,这里有一些general information。我使用NGinX和HAProxy作为负载均衡器有很好的经验。

如果您将所有数据发送到所有数据中心,当您考虑可能丢失一个或多个数据中心时,协调哪个数据中心发送到哪个数据中心的任务非常重要(您如何知道哪个在它发生故障之前将它发送出去?你如何决定哪个数据中心应该发送哪个数据中心?)。即使你有一个“主”数据中心和一个“热备用”数据中心,如果“主人”发生故障,知道“热备用”需要在哪里工作也不是一件容易的事情,如果他们不要像他们那样经常同步状态一个复制的数据库解决方案。

其中一位评论者提到(有几次)人们可以使用分布式队列来解决这个问题。这也是一条可行的路线,但是我的经验比我描述的解决方案少。