我的网站托管在 AWS Elastic Beanstalk (PHP) 上。我使用 Yii Framework 作为 MVC。
不久前我想每天运行一个 SQL 查询。我查了一下如何在 Beanstalk 上运行 cron,合并 Cloud 和 Cron 的概念似乎很复杂。我遇到了 Iron Worker ( http://www.iron.io/worker ),并设法创建了一个当前正在正常工作的 worker 。
今天我想运行一个更复杂的 cron(在我的数据库中查找通知,决定是否发送电子邮件,构建电子邮件模板并发送电子邮件(通过 AWS SES)。
据我了解,工作人员文件应该是独立的项目,包含工作所需的一切。 然而,我投入了大量的时间和精力来构建我的 MVC。我有复杂的模型、验证、电子邮件模板引擎等...... 用我所做的工作来创造一个钢铁 worker 似乎非常困难。即使我设法将所有代码移植到工作人员(这似乎需要大量工作),这也意味着每当我对主代码进行更改时,我都需要确保工作人员也进行了这些更改。这意味着我将拥有我的代码的“分支”。如果我想在未来创造更多的 worker ,就更是如此。
正确的做法是什么?
最佳答案
短期内,您可能只使用 IronWorker 中的调度功能,并让工作线程访问应用程序中的端点。然后,端点将触发操作在您的应用环境中运行。
从长远来看,我们确实建议您更多地关注面向服务的方法,从而将应用程序分解为更加松散耦合和分布式。这是关于该主题的帖子。优点很多,尤其是在可扩展性和开发敏捷性方面。
https://blog.heroku.com/archives/2013/12/3/end_monolithic_app
您还可以查看此 YII 添加内容。
http://www.yiiframework.com/extension/yiiron/
当然不希望您不必要地重写您的应用程序,但您可能可以在某些领域寻求解耦。建议创建一个工作人员目录并努力将工作人员编写为独立的。通过这种方式,您可以在不同的环境中运行它们,并将有效负载传递给工作人员。 (推送队列也可用于推送到这些工作人员。)一旦习惯了分布式异步处理,这是一个非常容易管理的过程。
(注:我在 Iron.io 工作)
关于yii - 使用我的作品时使用 IronWorkers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21709724/