0

当前情况:目前我有几十个网站将 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?

4

1 回答 1

2

如果我正确理解你的问题,你有这样的事情

Some Website

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

(客户?)线索从许多不同的网站流向您的接收服务器,然后被转发到处理服务器。您担心您的 Intake Server 出现故障,因为那是您负责跟上的。

这个问题的经典解决方案是在负载均衡器后面有 2 个或更多 Intake Server,并拥有一个 Master 和至少一个 Slave 数据库。

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

在这种情况下,您可能希望在各个数据中心之间复制所有数据(例如,主/主数据库,具有本地从属以实现冗余,或者数据中心 A 中的主数据库加上数据中心 A 中的从属数据库以及数据中心 B 中主数据 A 的从属数据库) , ETC。)。

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

如果 Intake Server 出现故障,负载平衡器会检测到这种情况并将流量路由到剩余的 Intake Server。如果 Master 数据库出现故障,则切换到 Slave 数据库并恢复 Master。

对于负载平衡,这里有一些一般信息我在使用NGinX和 HAProxy 作为负载平衡器 方面拥有丰富的经验。

如果您将所有数据发送到所有数据中心,那么当您考虑可能会丢失一个或多个数据中心时,协调哪个数据中心发送哪个导致处理服务器的任务非常重要(您怎么知道它发送了哪个数据中心?在它崩溃之前?你如何决定哪个数据中心应该发送哪个潜在客户?)。即使您有一个“主”数据中心和一个“热备用”数据中心,如果“主”出现故障,知道“热备用”需要在哪里工作也不是一件容易的事,如果他们不要像使用复制数据库解决方案那样不断地同步状态。

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

于 2012-06-09T01:23:38.210 回答