Abs*_*Abs 9 mysql php web-server infrastructure
我很快就会为我即将启动的应用程序购买一堆服务器,但我担心我的设置。我很感激我得到的任何反馈。
我有一个应用程序,它将使用我编写的 API。其他用户/开发人员也将使用此 API。API 服务器将接收请求并将它们中继到工作服务器。该 API 将仅保存用于日志记录、身份验证和速率限制的请求的 mysql 数据库。
每个工作服务器都做不同的工作,并且在未来扩展时,我将添加更多工作服务器来处理工作。API 配置文件将被编辑以记录新的工作服务器。工作服务器将进行一些处理,有些会将图像的路径保存到本地数据库,以便稍后由 API 检索以在我的应用程序上查看,有些将返回处理结果的字符串并将其保存到本地数据库.
你觉得这个设置有效吗?有没有更好的方法来重构它?我应该考虑哪些问题?请看下图,希望能帮助理解。
小智 17
正如 Chris 所说,您的 API 服务器是布局中的单点故障。您正在设置的是消息队列基础设施,许多人以前已经实施过。
您提到在 API 服务器上接收请求并将作业插入到每个服务器上运行的 MySQL 数据库中。如果您想继续走这条路,我建议删除 API 服务器层,并将工作人员设计为直接从您的 API 用户接收命令。您可以使用循环 DNS 之类的简单方法将每个 API 用户连接直接分发到可用的工作节点之一(如果连接不成功,则重试)。
更强大的消息队列基础设施使用专为此目的设计的软件,如ActiveMQ。您可以使用 ActiveMQ 的 RESTful API 来接受来自 API 用户的 POST 请求,空闲的工作人员可以获取队列中的下一条消息。但是,这对于您的需求来说可能有点过头了——它是为延迟、速度和每秒数百万条消息而设计的。
作为中间立场,您可能需要查看Zookeeper,即使它不是专门的消息队列服务器。我们使用 $work 就是为了这个目的。我们有一组运行 Zookeeper 服务器软件的三台服务器(类似于您的 API 服务器),并有一个 Web 前端来处理来自用户和应用程序的请求。Web 前端以及 Zookeeper 后端与工作器的连接,有一个负载平衡器,以确保我们继续处理队列,即使服务器因维护而停机。工作完成后,worker 告诉 Zookeeper 集群作业已完成。如果一个工人死亡,该工作将被发送到另一个工作来完成。
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |