【问题标题】:What exactly is a "sleeping" dyno究竟什么是“睡眠”测功机
【发布时间】:2021-05-07 17:02:53
【问题描述】:

这个问题实际上意味着几件事。 首先我想问一下测功机睡觉时到底会发生什么?

  • 如果我将全局变量存储在我的机器人的数组中,它会得到 睡觉时擦掉(这意味着我必须实际保存 一切都到外部文件)? - 基本上我的内存数据是否被清除了 当它睡觉时,当它醒来时,我的机器人不会有那些数据?

  • 其次,对于 550 个免费的测功小时,我可以安排睡眠吗? 时间表(例如,01:00 - 7:00 am)还是不是每日限制(18 小时/天) 但是每月有限制(所以 24/7 用完时间,直到我有 0 本月剩余时间)?

【问题讨论】:

    标签: node.js heroku discord.js


    【解决方案1】:

    睡眠测功机是指虚拟节点关闭并停止在其上运行的应用程序。应用程序内存被清除(是的,所有变量和数组)并且在测功机重新启动之前无法处理任何请求。
    任何需要保存的数据都应该持久化到外部存储(外部文件系统、数据库)。

    Web dyno 在 30 分钟不活动后进入睡眠状态(即没有 http 请求到达),您无法安排此操作。
    Worker 不会进入睡眠状态,它会一直运行,直到您的免费​​配额用完为止。

    您始终可以使用命令行缩小(关闭)和放大(重新启动)。

     # scale down
     heroku ps:scale web=0 -a {appname}
    

    【讨论】:

      【解决方案2】:

      除了@Beppe C 在他的回答中所说的话,为了理解 dyno sleep,你需要了解 web 和 worker dynos 之间的区别。

      Web dyno 允许您显示网页、一些文件内容等。此 dyno 会定期进入睡眠状态(在 30 分钟不活动后)。这就是你得到短语 dyno sleep 的地方。如果您坚持使用网络测功机(因为您需要显示内容),最好的安排方式是使用 Heruko Scheduler 插件。但是,我不建议这样做,因为它需要您输入您的信用卡信息。否则,您可以使用 cron 作业服务。

      工人测功机是不同的。只要您在给定月份(小时限制为每月)内没有用完您的 550 小时,它们就会在不睡觉的情况下继续运行。使用worker dyno,除非您停止该进程,否则任何全局变量都将在进程保持运行期间保存。缺点是它们在后台工作,这意味着您无法使用它们显示/显示 Web 内容。如果您需要显示网络内容,请坚持使用网络测功机。

      要为应用启动工作进程,请按如下方式扩展应用:

      # scale up
      heroku ps:scale worker=1 -a {appname}
      

      在此处阅读有关工人测功机的更多文档:https://devcenter.heroku.com/articles/background-jobs-queueing

      我的建议?如果您不需要显示 Web 内容,请使用每天在给定时间定期关闭的工作测功机。既然你似乎在使用 node.js,也许可以使用 setInterval 来检查时间?

      【讨论】:

      • 感谢您的回答!它清除了很多。因此,如果我将 Heroku 用于 Discord 机器人(它只在 Discord 中运行命令,因此不托管 Web 内容),它只会使用 worker dynos。自动关机听起来很方便,可以限制使用的测功机时间,但不幸的是,这听起来仍然像我必须手动启动它,这是不切实际的。如果是这种情况,我要么必须关联我没有的信用卡,要么寻找其他提供商。
      • 是的。您没有托管 Web 内容,因此请使用工作人员测功机。确认您所说的,您需要添加一张信用卡来设置自动关机(Heroku Scheduler 插件)。所以如果你想使用 Heroku,你真的只有两个选择:找到一种方法以编程方式检查不和谐程序的时间,或者记住每天手动关闭它。否则,您可能需要寻找其他提供商。希望这可以解决所有问题
      猜你喜欢
      • 2010-12-10
      • 2013-02-06
      • 2016-12-12
      • 2021-04-12
      • 2014-10-28
      • 2012-08-27
      • 2010-11-12
      • 2011-03-18
      相关资源
      最近更新 更多