请教这个问题的解决方案( web 方向)

2016-06-02 09:40:01 +08:00
 william23

现在业务是这样子的,

需要每 X 分钟执行这一段代码,

这段代码先从其他服务器上收集数据,然后用 php 整理这段数据,再传送到另外一台服务器。

但是这段的代码,第一层的 foreach 的元素也许是 20 个,所有的代码执行完成会超过 5 分钟。

要求是第一个元素要每隔 5 分钟发送给另外一台服务器,但是由于所有执行完超过 5 分钟,

会导致第一个元素也许要 5+x 分钟才能更新

Q1:请问这种如何解决?

Q2:如果说把这 20 个元素分别跑 20 个进程,可不可以?以后会有什么后果?对服务器的压力大不大?

Q3:如今代码是用 php 同步的方式请求的,领导说可以尝试 php 异步的方式,但是说实话, php 我写到现在都是同步的,也没听人提起过 php 用异步的,网上查了下说很少这么写,想问下你们怎么看?

Thanks

2184 次点击
所在节点    PHP
7 条回复
Hyeongo
2016-06-02 10:01:29 +08:00
生产者消费者模式
弄个队列,把数据插入这个队列
每 5 分钟把这个队列的数据发送过去
will0404
2016-06-02 10:05:29 +08:00
方法 1 : php 不了解,多进程是个方案,不用开 20 个,只要能减少到 5 分钟一下就满足要求了吧。
方法 2 :用队列处理,一次处理一个,处理一个发一个,一个要不了 5 分钟吧?
方法 3 :用 nodejs 写(异步咯)
server
2016-06-02 10:06:55 +08:00
william23
2016-06-03 09:14:20 +08:00
@Hyeongo @will0404 问题是他需要等访问 url 后才能获取数据,然后再发送,这样子即使后面发送是每 5 分钟一次,但是还要加上读取数据的时间,即是从 url 后访问的数据。
cccoco123
2016-06-03 16:24:34 +08:00
https://github.com/fucongcong/Group 定时+任务队列 或者用 async swoole 的异步多进程来做
z5864703
2016-06-03 18:24:15 +08:00
@william23 收集数据、处理数据、发送数据分离
收集数据比如 5 分钟取一次?然后丢处理队列。
处理数据部分是持久化处理,一直保持运行检测处理队列,一有新数据就取出处理。处理完丢结果到发送队列
发送数据部分也是持久化处理,检测发送队列,然后按规则比如五分钟发一次推送数据。
处理数据部分先尽可能优化处理逻辑,然后可以开多线程并行加速处理,注意是多线程。目前 php 支持多线程,不过需要安装一个扩展 Pthread
nightspirit
2016-06-11 00:05:09 +08:00
队列是个方案,就第一个元素必须 5 分内更新,应该可以实现。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/282887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX