【问题标题】:Heroku... pushing without affecting long running methodsHeroku...推送而不影响长时间运行的方法
【发布时间】:2012-09-26 02:35:43
【问题描述】:

我在 rails/heroku 中有一个长期运行的导入方法。
我正在导入一个 10 兆的 csv,这需要一段时间..

当它运行时,我的一个同事更改了一个不相关的视图并执行了 git.push。

我的导入被杀死了......

现在;我可以告诉他在我运行导入时不要执行 git.push。我们有一个客户,所有的导入都是由开发团队完成的。

未来我们将在世界各地拥有数十个客户。 我们无法控制他们何时选择进行导入。

所以我的问题是…… 其他人如何防范此类事情?如何确保正在运行的作业不会因为我想要更改某些内容而被关闭?

【问题讨论】:

    标签: ruby-on-rails heroku upload


    【解决方案1】:

    这里的问题是你的导入方法不够健壮。

    Heroku 在收到推送时会杀死您的测功机。如果 Heroku 使用太多内存,或者如果它已经存在很长时间,或者如果他们正在重新平衡负载,或者如果您扩展该组中的进程数量,Heroku 也可能会杀死您的测功机。此外,该 EC2 实例可能会因各种原因而启动和死亡,包括电源、网络、存储和人为故障。

    如果导入始终成功对您很重要,那么您需要适当地构建您的应用程序。将要导入的数据暂时放在 S3 中,以防收到上传的 dyno 被杀死。在您的数据库中输入一条记录,说明“这个东西需要导入”。导入时,以事务方式导入,因此导入完全成功或完全失败。

    工作量大吗?也许,也许不是,取决于您选择的工具。 (Sidekiq 通常对我来说很容易。)但是,这是您唯一真正的选择。

    老派的思想是确保您的基础架构永不出现故障,从而导致具有多冗余光纤通道上行链路的 SAN 到多冗余交换机再到多冗余存储阵列。这导致了热插拔 CPU、RAID for RAM 和其他 Enterprise Features™。但事实证明,即使您完成了所有这些操作,您的基础架构仍然会出现故障。

    新学派认识到失败是不可避免的。忘记所有花哨的东西:大量购买商品硬件,并构建您的应用程序以容忍故障。这就是 EC2 模型,这就是 Heroku 模型。相应地进行设计。

    【讨论】:

    • 谢谢.. 不确定我能否在一次交易中加载 50 万件产品。我可能不得不限制文件大小。 ?为失败负责。谢谢。
    • 嗯,它不一定是事务性的,只要它可以被中断并重新尝试而不会引起问题。
    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2019-05-07
    • 1970-01-01
    相关资源
    最近更新 更多