【问题标题】:NodeJs best practices for scheduled process?NodeJs 计划进程的最佳实践?
【发布时间】:2023-03-30 21:30:01
【问题描述】:

我目前正在开发一个类似 Tiktok 的大型应用程序,其中一个视频将存在 5 天。我的问题应该如何安排在 5 天后删除视频? 2 我想出的方法是我可以构建一个后台服务工作者,它将不断循环遍历数据库并检查视频是否应该关闭,或者我可以将它放在 setTimeOut() 中 5 天,这意味着它会在 RAM 上,并且需要有一个服务来重新启动所有 setTimeOut(),以防服务器关闭。我正在使用 AWS EC2,所以我想知道哪种方法可以扩展并节省一些钱。谢谢。

【问题讨论】:

  • 或者您通过操作系统的作业调度程序安排一个作业,该作业每天至少执行一次以删除内容。 Mysql 也有一个内置的调度器,但我可能还是会使用一个外部的调度器,因为 node.js 比 mysql 的 sql 语言具有更多的灵活性和特性。
  • 我不会使用 setTimeout 方法 - 如果服务器出现故障怎么办......最好不时检查(可能由访问您的系统触发,即有人访问任何页面或其他,并且访问触发了“清理”)

标签: javascript mysql node.js amazon-web-services express


【解决方案1】:

您可以使用队列管理在其上存储任务。

假设您有一个队列,其中包含您的任务。你有一个听你的队列的消费者。如果有消息发送,消费者会读取消息并为您处理工作。

但有一个挑战。 何时您应该将您的任务发送到队列中并且何时消费者应该处理该任务。对于可用性部分,消息代理是不错的选择,但管理流程取决于您的方法,如果您有微服务系统设计,则可以将您的消费者编写为服务。

rabbit-MQkafka 是最受欢迎的消息代理。

当然,您应该了解任务队列消息队列的概念。

看看有什么区别:

https://serverfault.com/questions/669434/whats-the-difference-between-a-task-queue-and-a-message-queue-in-rabbitmq

https://www.tech101.in/message-queue-and-task-queue/

有一个简单的任务队列包可以与 Redis 一起使用:

bee-queue

请注意,处理消息代理在 生产级别。

您也应该了解 cron 系统:

https://en.wikipedia.org/wiki/Cron

https://www.redhat.com/sysadmin/automate-linux-tasks-cron

【讨论】:

    猜你喜欢
    • 2017-01-01
    • 2015-08-17
    • 2017-04-07
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2020-08-10
    • 1970-01-01
    相关资源
    最近更新 更多