在生产节点服务器上部署cron服务的最佳实践?

时间:2018-02-02 17:59:30

标签: node.js web-services web automation cron

目前,我有一个复杂的制作NodeJS服务器,只需按一下按钮,即可通过Sendgrid向用户发送电子邮件。然后使用Docker和Convox将此服务器部署到称为“生产”的不同生产环境中,并在“分级”和“#34;”中进行测试。水平。

我希望使用cron NPM package自动执行向用户发送电子邮件的功能。此cron作业每天在指定时间自动向客户发送电子邮件。我面临的一个问题是,暂存环境Node环境与生产环境完全相同(都称为'生产')。一种可能的解决方案是,我将Docker / Convox配置更改为具有单独的节点环境,用于" staging"以及防止cron作业在那里运行。

然而,这让我思考 - 使用与我的节点服务器中的流程紧密耦合的功能来部署cron-job服务的最佳实践是什么?

cron服务是否应该在同一个节点服务器上运行?引起关注的一个问题是,它可能创造出更多的“整体”和“#34;碎片较少的实例。

cron服务应该在单独的EC2 NodeJS还是AWS Lambda上运行?

我正在尝试找出构建cron服务部署的最佳方法,以便它具有可扩展性和可扩展性。在未来,我希望添加更多具有相似功能级别的cron服务。

1 个答案:

答案 0 :(得分:3)

  

cron服务是否应该在同一个节点服务器上运行?

如果cron服务不需要访问现有node.js服务器中的任何实时状态,那么您可以将其包含在现有服务器中,也可以将其分解为自己的进程,更类似于微服务架构,其中你分开了不必融合的东西。这只是一个设计选择,取决于一堆不同的东西。

在保持部署和管理简单(部署和管理一个服务器流程)与分离不需要耦合且可以运行/管理/编码的事物之间真的需要权衡/独立测试。

通常,您会根据复杂程度做出权衡决定。如果电子邮件代码相当简单并且对内存或CPU使用率没有特别大的影响,那么创建另一台服务器来管理就没有特别的优势,就像你不会考虑突破来自服务器的其他小东西。但是,如果有一个真正的理由来单独管理它,或者你可以通过从主服务器进程中获取它的内存和CPU使用来扩展,那么通过各种方法将其分解到自己的服务器中。 / p>

我将为您提供一些展示极端情况的例子。

想象一下,您的服务器中有20行代码,每天为您执行一次维护操作(假设它是日志文件管理)。它们需要大约10秒才能运行,而且根本不复杂。你会把它分解成另一个node.js服务器吗?可能不是因为打破它没有什么主要好处,但现在还有另外一个流程需要运行和管理。

现在假设你有一个过程在晚上的某个时间开始,它抓住了100个相关公司的整个网站,从他们的网站收集信息。由于这些站点的大小,这可能会持续数小时,并且可能会使用相当数量的CPU,内存,带宽和数据库周期来存储它找到的内容。这里有真正的规模和管理原因,可以将它放在自己独立的流程中,可以单独管理和扩展,运行它不需要影响其他服务器有效地完成工作的能力。

  

cron服务应该在单独的EC2 NodeJS还是AWS Lambda上运行?

这实际上取决于您的规模和管理需求。见上面的例子。

关于你的另一个话题......

  

一种可能的解决方案是,我将Docker / Convox配置更改为具有单独的节点环境,用于" staging"以及防止cron作业在那里运行。

这似乎与您的其他问题完全不同。似乎有一个单独的环境变量指示STAGING是有用的。这样,只关注生产和开发之间差异的代码只能查看一个现有的环境变量(并且您不必更改已经执行此操作的任何代码)。但是,想要了解暂存和生产之间差异的代码可以检查新变量。