我想用微服务方法创建一个webapp。
它将包含一组作为Erlang应用程序的独立服务,我将能够单独启动和停止。在他们面前,将有nginx服务器作为反向代理。
我是否应该将所有这些服务放在一位上帝监督下,还是应该让他们分开担任主管?
根据我应该做出这个决定的事实?
答案 0 :(得分:0)
通过使每个服务成为Erlang应用程序,您已经得到了答案:每个应用程序都有一个单独的监督树。
答案 1 :(得分:0)
在我看来,答案取决于独立运行应用程序的能力(或必要性)。
如果服务需要由于可能发生变化的接口而保持一致,那么拥有一个或有限数量的监督树(和应用程序)会更容易。服务的启动和停止是您的应用程序的界面。
如果您的服务是独立的,或者它们具有非常稳定的接口(例如使用标准),或者您不关心在运行中发布,那么每个服务的应用程序似乎是首选解决方案。
答案 2 :(得分:0)
主管有明确的目标:让您控制在出现错误时管理您的州的方式。
如果您有两个部分(A和B)的申请。每个都存储一些状态:SA和SB。您可以根据一个问题来决定如何构建监督树:如果没有国家的其他部分,这部分国家是否有意义?如果A重新启动且SA已清除但B未重新启动且SB未清除,我的应用程序是否可以继续正常工作?
在观察主管时,人们通常会考虑重启和重启速度。可以说,这是主管不太重要的一部分。你应该真正关心的是什么是开始的和以什么顺序。什么应该重新启动,以什么顺序?
主管提供三种重启策略。
我非常喜欢的其他概念是"error kernel"。如果rest_for_one,左边的孩子是你的“错误内核”。
你必须要知道的另一件重要的事情是,主管按照从左到右,深度优先的顺序启动所有孩子。并以相反的顺序停止它们。