最近工作中开发的一套系统,其中很多都是需要操作多服务器的,比如需要同时发布数据到 2000 个服务器上,或者同时向 2000 个服务器拉取数据。刚开始的解决方案就是单纯用 PHP 的curl_multi的方式并发处理请求,而且参考了淘宝技术博客的《Rolling cURL: PHP 并发最佳实践》,但是由于网络和数据以及各个服务器等等的一些情况导致这种并发处理的响应时间很慢,因为在并发请求的过程中还包括记录日志,处理数据等逻辑,等待处理结果并返回,所以也不能友好的满足后台操作的体验。 现在重新设计一种方案,利Gearman来实现并发的需求。通过 Client 将请求发送到 Gearman 的 Jobs,在每个 Work 中来再来进行 curl_multi 和数据处理和日志等一些操作,同时用Supervisor来监控 Gearman 以及 Works 的进程,这样可以实现一个并行的多进程和负载均衡的方案。 Gearman 可以做什么 异步处理:图片处理,订单处理,批量邮件/通知之类的 要求高 CPU 或内存的处理:大容量的数据处理,MapReduce 运算,日志聚集,视频编码 分布式和并行的处理 定时处理:增量更新,数据复制 限制速率的 FIFO 处理 分布式的系统监控任务 Gearman 工作原理 使用 Gearman 的应用通常有三部分组成:一个 Client、一个 Worker、一个 任务服务器。 Client 的作用是提出一个 Job 任务 交给 Job Server 任务服务器。Job Server 会去寻找一个 合适的 Worker 来完成这项任务。Worker 执行由 Client 发送过来的 Job,并且将结果通过 Job Server 返回给 Client。Gearman 提供了 Client 和 Worker 的 API,利用这些 API 应用可以同 Gearman Job Server 来进行通信。Gearman 内部 Client 和 Worker 之间的通信都是通过 TCP 连接来进行的。

阅读全文

作者的图片

Ryan是菜鸟 | LNMP技术栈笔记

一步一个脚印,一直在路上!记录LNMP技术栈,Web架构,区块链等笔记

菜鸟码农

南京