Erlang应用程序设计(如何短路)

时间:2019-05-02 10:12:47

标签: erlang

我对如何设计erlang应用程序存在疑问:

我通常创建一个应用程序,启动一个主管和一些工作人员。 除了监督树之外,我还有带有功能(duh)的模块。 我也有一个Web API,可以从应用程序的模块中调用函数。 当我停止应用程序(application:stop(foo).时,Web服务器仍可以调用foo的函数。

我发现无法为foo应用安装合适的断路器是“不习惯的”。

这是否意味着foo中的每个公共职能都应在其主管的监督下产生一个进程?

谢谢, 巴斯蒂安

1 个答案:

答案 0 :(得分:5)

不一定,有两个原因:

foo应用程序将具有两种功能:要求运行工作进程的功能和不运行的功能(很可能是纯功能)。如果应用程序已停止,则显然前者在调用时将失败,而后者仍将工作。按照Erlang的“让它崩溃”的理念,这只是Web服务器需要处理(或不处理)的另一个错误条件。如果纯功能仍然有效,则没有理由禁止Web服务器调用它们:这意味着系统的大部分功能正常。

在Erlang节点中,停止应用程序通常不是您要做的。 Erlang应用程序声明依赖关系,即需要运行才能使其正常运行的应用程序。您会注意到,如果尝试在依赖项之前启动应用程序,它将拒绝启动。尽管可以手动停止应用程序,但这意味着节点的状态不再符合应用程序模型的假设。在构建由一组Erlang应用程序组成的“发行版”时,通常它们都将以permanent应用程序的形式启动,这意味着如果任何一个应用程序崩溃,整个Erlang节点将退出,以免违反此假设