2

我的网站托管在 AWS Elastic Beanstalk (PHP) 上。我使用 Yii 框架作为 MVC。

不久前,我想每天运行一个 SQL 查询。我查看了如何在 Beanstalk 上运行 crons,合并 Cloud 和 Cron 的概念似乎很复杂。我遇到了 Iron Worker ( http://www.iron.io/worker ),并设法创建了一个当前工作正常的工人。

今天我想运行一个更复杂的 cron(在我的数据库中查找通知,决定是否发送电子邮件,构建电子邮件模板并发送电子邮件(通过 AWS SES)。

据我了解,工作文件应该是独立的项目,包含他们工作所需的一切。然而,我已经投入了大量的时间和精力来构建我的 MVC。我有复杂的模型、验证、电子邮件模板引擎等......使用我所做的工作来创建 Iron Worker 似乎非常困难。即使我设法将我的所有代码移植到一个工作人员(这似乎需要做很多工作),这意味着每当我对我的主代码进行更改时,我都需要确保工作人员也有这些更改。这意味着我将拥有我的代码的“分支”。如果我想在未来创造更多的工人,那就更是如此。

什么是正确的方法?

4

1 回答 1

2

短期内,您可能只使用 IronWorker 中的调度功能并让工作程序访问您应用程序中的端点。然后端点将触发在您的应用程序环境中运行的操作。

从长远来看,我们确实建议您更多地关注面向服务的方法,通过这种方法您将应用程序分解为更加松散耦合和分布式。这是有关该主题的帖子。优势很多,尤其是在可扩展性和开发敏捷性方面。

https://blog.heroku.com/archives/2013/12/3/end_monolithic_app

你也可以看看这个 YII 添加。

http://www.yiiframework.com/extension/yiiron/

当然不希望您不必要地重写您的应用程序,但您可能会在某些领域寻求解耦。建议创建一个worker目录,并努力将worker写成独立的。通过这种方式,您可以在不同的环境中运行它们并将有效负载传递给工作人员。(推送队列也可以用来推送给这些工作人员。)一旦你习惯了分布式异步处理,它就很容易管理。

(注:我在 Iron.io 工作)

于 2014-02-11T18:53:41.440 回答