【问题标题】:Backend process VS scheduled task后端进程 VS 定时任务
【发布时间】:2012-04-16 09:40:40
【问题描述】:

我有许多 24/7 全天候运行的后端进程(Java 应用程序)。为了监控这些后端(即检查进程是否没有响应并通过 SMS/EMAIL 通知),我编写了另一个应用程序。

旧的后端现在会定期记录心跳,而新的应用程序会检查它们是否定期进行,并在必要时通知。

现在,我们有两个选择

  • 要么将其作为计划任务运行,该任务将在每(假设)15 分钟后运行并在完成其工作后停止,要么
  • 将其作为另一个后端进程运行,睡眠时间为 15 分钟。

我们现在可以预见的问题是,如果这个监控应用程序进入无响应状态怎么办?所以,我的问题是这两种情况有什么区别还是两者都一样?哪种选择更适合我的情况?

请注意,这是一种特殊情况,与thisthis 不同

环境: Java,托管在 LINUX 服务器上

【问题讨论】:

    标签: java monitoring scheduled-tasks backend


    【解决方案1】:

    调度任务是指由系统调度程序触发,还是作为现有后端进程中的调度线程?

    要捕获意外终止或无响应状态,您最好运行一个单独的进程而不是线程。但是,调度线程可以让您以更少的 IPC 开销与拥有的进程进行更密切的交互。

    我会同时实现这两个。维护每个后端进程中的本地状态记录,每个进程中的计划任务触发线程更新该节点的当前状态。此更新可能相当频繁,因为它比与单独进程通信更便宜。

    使用您单独的“监控应用”进程定期收集有关所有后端进程的信息。这应该不那么频繁地发生 - 进程是否一直在运行,或者由 cron 作业调度是无关紧要的,因为状态保存在每个后端进程中。如果其中一个后端变得无响应,此监控应用程序将能够确定没有响应并执行一些有意义的探测以确定问题所在。该组件将通知您的 SMS/Email 实用程序发送报告。

    【讨论】:

    • 监控进程在这两种情况下都将作为一个单独的进程运行。在第一种情况下,它会在每 x 分钟后由系统调度程序触发。在第二种情况下,将是 24/7 运行的单独进程,睡眠时间为 x 分钟。
    • 好的,正如我在回答中解释的那样,监控过程的执行方法是学术性的,只要它没有状态。就我个人而言,我可能会将其设为由 cron 作业触发的短期任务,以确保我不必担心需要长时间运行的可执行文件(监控应用程序也可能崩溃)。但是,完全没有报告应该足以警告那里有问题。
    【解决方案2】:

    我会选择后端进程,因为它可以保持状态 看看 terracotta 的石英调度器 http://terracotta.org/products/quartz-scheduler

    它将对瞬态条件具有弹性,您只需要提供一个简单的包装,因此监视器应用程序应该是健壮的,前提是您在quartz.properties 文件中获得正确的线程内容。

    【讨论】:

    • 对不起,我不明白这如何适用于我的情况。这些后端是托管在第三方服务器上的应用程序的一部分。
    • 你已经写好了应用,让quartz管理监控类的调度调用。
    • 使用 cron 调用东西会给您带来灵活性问题 - 计划维护开始时会出现大量邮件
    • 我们已经有一个独立的(SMS/EMAIL)通知。我们只需要一个可以告诉通知者何时通知的进程。我们想让它变得简单且成本更低。无论如何,非常感谢您的建议:)
    【解决方案3】:

    您可以使用 nagios 核心作为核心并使用 Naptor 来监控您的应用程序。它易于设置并嵌入到您的应用程序开发中。

    您可以在此链接中查看: https://github.com/agunghakase/Naptor/tree/ver1.0.0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2012-09-16
      • 1970-01-01
      • 2012-12-13
      • 2020-04-18
      相关资源
      最近更新 更多