2012-10-05 74 views
0

在rails/heroku中我有一个长时间运行的导入方法。
我导入为10mcg CSV和它需要一段时间..Heroku ...在不影响长时间运行的情况下推送

虽然它的运行我的一个同事进行了更改无关视图和做了git.push。

我的进口死亡...

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

未来我们会在全球拥有数十个客户。 我们无法控制他们选择何时进行导入。

所以我的问题是这样的...... 其他人如何防止这样的事情呢?我如何确保正在运行的工作不会因为我想改变某些东西而失败?

回答

3

这里的问题是您的导入方法不稳健。

Heroku在收到推送信号时会杀死您的动态码。如果Heroku使用太多内存,或者它已经长时间存活,或者它们正在重新平衡负载,或者如果您扩展该组中的进程数,Heroku也可能会杀死您的dyno。此外,该EC2实例可能因为各种原因(包括电源,网络,存储和人为故障)而刚起步并死亡。

如果对您来说重要的是导入总是成功,您需要适当地构建您的应用程序。暂时将要导入的数据放入S3中​​,以防万一接收到上传的测功机死亡。在你的数据库中写上一个记录,说明“这件事需要导入”。导入时,事务导入,导入完全成功或完全失败。

这是很多工作吗?可能,也可能不是,取决于您选择的工具。 (Sidekiq通常会让我很容易)。但是,这是您唯一的选择。

旧的思路是确保您的基础架构永远不会失败,从而导致具有多冗余光纤通道上行链路的SAN转向冗余冗余存储阵列的多重冗余交换机。这导致了热插拔CPU,RAID for RAM和其他企业功能™。但事实证明,即使您完成了所有这些,您的基础架构仍然会失败。

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

+0

谢谢..不知道我可以在一次交易中加载50万个产品。我可能不得不对文件大小设置上限。 ?考虑失败。谢谢。 – baash05

+0

嗯,它不一定是交易型的,只要它可以被中断并重新尝试而不会造成问题。 – willglynn

相关问题