gpt4 book ai didi

erlang - 如何在节点之间分发应用程序而不必在分布式握手过程中启动所有应用程序

转载 作者:行者123 更新时间:2023-12-04 04:26:26 24 4
gpt4 key购买 nike

背景

  • 我有一个在启动节点(使用.rel,.boot等)时自动启动的应用程序
  • 如果第一个节点出现故障,我希望应用程序故障转移到备用节点。
  • 我使用Erlang的分布式应用程序功能来处理故障转移和接管。

  • 问题
    问题在于,分布式应用程序协商的一部分是,当节点握手确定哪个节点将保持正常运行以及哪个节点将被静默时,该应用程序将在所有节点上启动。如果可能,我需要该应用程序不要在多个节点上运行。
    问题
  • 除了参与分布式应用程序启动协商时,是否可以让节点自动启动我的应用程序?或者,
  • 如何实现以无人参与的方式启动我的应用程序并进行故障转移而又不要求我的应用程序在多个节点上启动(甚至短暂运行)
  • 最佳答案

    不幸的是,如今,Erlang的接管和故障转移功能非常有限,因此您需要使应用程序在所有节点上运行才能使这些功能正常工作。

    我想到的唯一想法有点疯狂,涉及到更高级别的间接访问,但实际上可能有用。

    您可以编写一个假的,轻量级的包装器应用程序,然后在所有节点上启动该应用程序。该应用程序使用标准的Erlang分发功能。然后,您只需启动原始应用程序即可实现接管/故障转移策略:

    -module(wrapper).
    -behaviour(application).

    [...]

    start({takeover, _Node}, _Args) ->
    application:start(original_app).

    [...]

    另外,请记住,当您在所有节点中为分布式应用程序键入 application:start(my_app)时,该应用程序并不会在所有节点上启动。您可以通过在每个节点上键入 application:which_applications()进行验证。您会注意到该应用程序如何在单个节点上运行。

    最后,请问为什么您不能在多个节点上启动应用程序?

    关于erlang - 如何在节点之间分发应用程序而不必在分布式握手过程中启动所有应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12417006/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com