【问题标题】:OTP: how to supervise non-OTP components?OTP:如何监管非 OTP 组件?
【发布时间】:2013-07-08 14:47:12
【问题描述】:

我正在构建一个 Erlang/OTP 系统,它由 MochiWeb Web 服务器、一些自定义 Erlang/OTP 应用程序和一些非本地组件组成,如下所示:

  • 一个 CouchDB 数据库,用于存储 MochiWeb Web 服务器的状态和持久数据(用户、帐户等)
  • 旧版 PostgreSQL 数据库,用于存储一些其他实体(订单、帐户等;客户要求:无法迁移到 CouchDB,数据应按原样使用);
  • Asterisk 服务器,用于向系统用户提供电话通知。

我想实现高水平的正常运行时间和可用性,因此我想知道监控系统中那些非 Erlang/OTP 元素的最佳方法是什么。基本上,我希望系统的每个元素都受到监督、监控并在需要时重新启动。对于 Erlang/OTP 应用程序来说很容易实现,但我不知道如何使用非 Erlang 组件来实现。


我应该将它们包装为 Erlang/OTP 应用程序并包含到 OTP 监督树中吗?

或者我应该使用一些第三方软件工具来监控和监督 Erlang/OTP 系统的那些非 Erlang/OTP 组件?

最好的做法是什么?

【问题讨论】:

    标签: erlang high-availability erlang-otp erlang-supervisor mochiweb


    【解决方案1】:

    答案是视情况而定 :P

    我已经看到使用这两种方法,但我不太确定一种方法是否比另一种更有优势。我的直觉是选择一个通过 erlang 中的端口管理应用程序的应用程序。这样,您就有了一种很好的集中方式来了解是否出现问题,并且可以轻松解决问题。

    【讨论】:

    • 所以,换句话说,我将每个非 OTP 软件通过端口封装到 OTP 应用程序中,并将其添加到我的 OTP 监督树中,对吗?
    • 这是一种方法,是的。另一种方法是通过系统外部的monit 等保持运行。
    • 感谢对monit的引用!它甚至似乎有一些可以通过其控制文件实现的基本重启策略。我怀疑我是否能够通过 Erlang 端口启动 Django 或 Asterisk。
    猜你喜欢
    • 2020-10-04
    • 2018-01-31
    • 2011-05-07
    • 2011-05-24
    • 2014-07-10
    • 2022-08-16
    • 2022-08-16
    • 2016-08-02
    • 2021-02-15
    相关资源
    最近更新 更多