Erlang OTP:如何监督非OTP组件?

Erlang OTP:如何监督非OTP组件?,erlang,high-availability,otp,erlang-supervisor,mochiweb,Erlang,High Availability,Otp,Erlang Supervisor,Mochiweb,我正在构建一个Erlang/OTP系统,它由一个MochiWeb web服务器、一些自定义Erlang/OTP应用程序和一些非本机组件组成,如下所示: 存储MochiWeb服务器状态和持久数据(用户、帐户等)的CouchDB数据库 用于存储其他实体(订单、账户等;客户要求:无法迁移到CouchDB,数据应按原样使用)的旧式PostgreSQL数据库 星号服务器,用于向系统用户提供电话通知 我希望实现高水平的正常运行时间和可用性,因此我想知道监控系统中非Erlang/OTP元素的最佳方法是什么

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

  • 存储MochiWeb服务器状态和持久数据(用户、帐户等)的CouchDB数据库
  • 用于存储其他实体(订单、账户等;客户要求:无法迁移到CouchDB,数据应按原样使用)的旧式PostgreSQL数据库
  • 星号服务器,用于向系统用户提供电话通知
我希望实现高水平的正常运行时间和可用性,因此我想知道监控系统中非Erlang/OTP元素的最佳方法是什么。基本上,我希望系统的每一个元素都能得到监督、监控,并在需要时重新启动。对于Erlang/OTP应用程序很容易实现,但我不知道如何使用非Erlang组件实现这一点


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

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

最著名的做法是什么?

答案是这取决于:p


两种方法我都见过,但我不太确定其中一种是否比另一种有优势。我的直觉是选择从erlang中通过端口管理应用程序的方法。这样,您就有了一种很好的集中方式,可以知道是否出现了问题,并且可以轻松地解决问题。

因此,换句话说,我通过端口将所有非OTP软件打包到OTP应用程序中,并将其添加到我的OTP监管树中,对吗?这是一种方法是的。另一种方法是通过,比如说,
monit
在系统外保持运行。多亏了对monit的引用!它甚至似乎有一些基本的重启策略,可以通过它的控制文件来实现。我怀疑我是否能够通过Erlang端口启动Django或Asterisk。