我的服务器设置了频繁使用的API


9

我很快将为即将启动的应用程序购买一堆服务器,但是我对自己的设置感到担心。我感谢收到的任何反馈。

我有一个应用程序,它将利用我编写的API。其他用户/开发人员也将使用此API。API服务器将接收请求并将其中继到工作服务器上。该API将仅保存一个mysql db请求,用于记录目的,身份验证和速率限制。

每个工作服务器执行不同的工作,并且在将来扩展时,我将添加更多工作服务器以进行工作。API配置文件将被编辑以记录新的工作服务器。工作服务器将进行一些处理,一些服务器将图像的路径保存到本地数据库,以供以后由API检索以在我的应用程序中查看,一些服务器将返回过程结果的字符串并将其保存到本地数据库。

此设置对您而言看起来有效吗?有没有更好的方法来进行重组?我应该考虑哪些问题?请参见下图,希望它有助于理解。在此处输入图片说明

Answers:


17

更高的可用性

正如Chris所提到的,您的API服务器是布局中的单点故障。您正在设置的是消息队列基础结构,这是很多人以前实现的。

继续走同样的路

您提到在API服务器上接收请求,然后将作业插入在每台服务器上运行的MySQL DB中。如果您想继续使用此方法,建议您删除API服务器层,并设计Workers以直接接受您的API用户的命令。您可以使用轮询DNS这样的简单方法将每个API用户连接直接分配到可用的工作节点之一(如果连接不成功,则重试)。

使用消息队列服务器

更健壮的消息排队基础结构使用为此目的而设计的软件,例如ActiveMQ。您可以使用ActiveMQ的RESTful API接受来自API用户的POST请求,而空闲的工作程序可以获取队列中的下一条消息。但是,这可能对于您的需求来说是过大的-它设计用于等待时间,速度和每秒数百万条消息。

使用Zookeeper

作为中间立场,您可能想看看Zookeeper,即使它不是专门用于消息队列的服务器。我们将$ work用于此确切目的。我们有一组三个服务器(类似于您的API服务器),它们运行Zookeeper服务器软件,并具有用于处理来自用户和应用程序的请求的Web前端。Web前端以及与工作人员的Zookeeper后端连接都具有负载平衡器,以确保即使服务器停机进行维护,我们也可以继续处理队列。工作完成后,工作人员会告诉Zookeeper集群该工作已完成。如果工人死亡,该工作将被发送到另一项工作中完成。

其他问题

  • 确保工作完成,以防工人没有响应
  • API如何知道作业已完成,以及如何从工作人员的数据库中检索出来?
  • 尝试降低复杂性。您是否需要在每个工作程序节点上使用独立的MySQL服务器,或者它们可以与API服务器上的MySQL服务器(或复制的MySQL群集)进行通信?
  • 安全。有人可以提交工作吗?有认证吗?
  • 哪个工人应该下一份工作?您没有提及任务预计需要10毫秒还是1个小时。如果速度很快,则应删除图层以降低延迟。如果它们很慢,则应非常小心,以确保较短的请求不会滞后于一些长时间运行的请求。

非常感谢您的出色答复。我知道API层是一个瓶颈,但这似乎是我可以添加更多工作服务器而不必手动通知应用程序用户的唯一方法。完全阅读完您的答案后,我意识到,是的,如果每个工作人员都有自己的API,那会更好。尽管随着我添加更多工作人员,代码将被复制,但是对于我的场景,它的性能更高。
Abs

@Abs-感谢您的第一次投票!如果您决定删除API层,则建议不要进行循环DNS并按照本文所述设置HAProxy(最好是一对)。这样,您无需处理超时。
狂热者

@abs不必删除 API层,但是添加冗余(CARP故障转移或类似措施)将是消除单点故障的重要考虑因素……
voretaq7 2011年

就消息传递而言,我建议您在决定之前仔细查看RabbitMQ:rabbitmq.com
Antonius Bloch

2

我看到的最大问题是缺少故障转移计划。

您的API服务器是一个很大的单点故障。如果出现故障,即使您的工作服务器仍在运行,也无济于事。此外,如果辅助服务器发生故障,则该服务器提供的服务将不再可用。

我建议您查看Linux虚拟服务器项目(http://www.linuxvirtualserver.org/),以了解负载平衡和故障转移的工作原理,并了解它们如何使您的设计受益。

有许多方法可以构建系统。主观上最好的回答是哪种方法更好。我建议你做一些研究。权衡不同方法的权衡。如果您需要有关植入方法的信息,请提交新问题。


在这种情况下,您将如何实施故障转移机制?总体概述会很棒。
Abs

从图中,您应该研究Linux虚拟服务器(LVS)。转到linuxvirtualserver.org并开始学习。
克里斯·丁

有趣的是,我将深入研究故障转移。对我的设置还有其他意见吗?我还有其他可能面临的危险吗?
Abs

@Abs:您可能会遇到很多问题。您的问题涉及很多主观方面,我不想让您接受我的个人意愿。我不必支持您的设置;你做。我真正的答案是了解故障转移和高可用性。
克里斯·丁
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.