我很快就会为一个即将推出的应用程序购买一堆服务器,但是我担心我的设置。 我感谢我得到的任何反馈。
我有一个应用程序将使用我写的API。 其他用户/开发者也将使用这个API。 API服务器将接收请求并将其中继到工作服务器。 该API将只保存一个MySQL数据库的日志logging,身份validation和速率限制的请求。
每个工作服务器做一个不同的工作,并在未来的规模,我会增加更多的工作服务器,以提供工作。 APIconfiguration文件将被编辑,以logging新的工作服务器。 工作服务器将执行一些处理,一些将保存一个到本地数据库的映像的path,以便以后通过API检索以在我的应用程序上查看,一些将返回进程结果的string并将其保存到本地数据库。
这个设置看起来对你有效吗? 有没有更好的方法来重组呢? 我应该考虑哪些问题? 请看下面的图片,我希望它能帮助理解。 
正如克里斯提到的,你的API服务器是布局中的单点故障。 你设置的是一个消息队列基础设施,这是许多人以前实现的。
您提到API服务器上的接收请求,并将作业插入到每个服务器上运行的MySQL数据库中。 如果你想继续这个path,我build议删除API服务器层,并devise工人直接从你的API用户接受命令。 您可以像循环DNS那样使用简单的东西,将每个API用户连接直接分发给其中一个可用的工作节点(如果连接不成功,则重试)。
更强大的消息队列基础设施使用为此目的devise的软件,如ActiveMQ 。 您可以使用ActiveMQ的RESTful API接受来自API用户的POST请求,空闲的工作人员可以获取队列中的下一条消息。 然而,这可能是为了满足您的需求而devise的 – 它专门devise用于延迟,速度和每秒数百万条消息。
作为一个中间立场,你可能想看看Zookeeper ,即使它不是一个专门的消息队列服务器。 我们在$ work中使用这个确切的目的。 我们有一套运行Zookeeper服务器软件的三台服务器(类似于你的API服务器),并有一个Web前端用于处理用户和应用程序的请求。 Web前端以及Zookeeper后端与工作人员的连接都有一个负载平衡器,以确保我们继续处理队列,即使服务器已closures以进行维护。 工作完成后,工作人员通知Zookeeper集群工作已完成。 如果一个工人死了,那个工作将被送到另一个工作来完成。
我看到的最大的问题是缺乏故障转移计划。
您的API服务器是一个很大的单点故障。 如果发生故障,则即使您的工作服务器仍然正常工作,也不会有任何效果。 此外,如果工作服务器停机,则服务器提供的服务不再可用。
我build议你看一下Linux虚拟服务器项目( http://www.linuxvirtualserver.org/ ),以了解负载均衡和故障转移如何工作,并了解这些如何使您的devise受益。
有很多方法来构build你的系统。 哪种方式更好是最好的回答你的主观意见。 我build议你做一些研究; 权衡不同方法的权衡。 如果您需要了解植入方法的信息,请提交一个新问题。