【问题标题】:Elixir/Phoenix Nodes Clustering Scheduled TasksElixir/Phoenix 节点集群调度任务
【发布时间】:2016-03-16 00:37:59
【问题描述】:

我正在使用具有 2 个节点的 Phoenix 框架开发应用程序。应用程序需要每 10 分钟运行 N 个计划任务。每个任务都有自己的上下文。我需要连接节点,以便我可以平衡两个节点之间的计划任务。什么是实现这一点的好方法?

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    只要网络环境设置正确(允许在正确的端口范围内的主机之间连接等),一个节点上的进程就可以向任何其他节点上的进程发送消息。 Erlang 的位置透明保证确保了这一点。

    查看这篇文章了解更多详情:http://tjheeta.github.io/2014/12/05/elixir-inter-node-communication/

    此外,Erlang Port Mapper Daemon (EPMD) (http://erlang.org/doc/man/epmd.html) 处理通信,并可配置为使用特定范围的端口等:

    iex --erl "-kernel inet_dist_listen_min 9001 inet_dist_listen_max 9001" ...
    

    另外,请参阅 9.8 和 9.9:http://erlang.org/faq/problems.html

    【讨论】:

      【解决方案2】:

      我相信this question 的答案可能正是您想要的。

      TL;DR 使用 cookie iex --cookie 启动每个节点,然后从 iex 中运行 Node.connnect 以连接到另一个节点。我相信您可以通过iex -S mix启动每个凤凰应用程序

      顺便说一句,即使通过此过程,您也无法在节点之间共享进程。这是有意为之的——节点之间的共享进程会很危险、很脆弱并且会阻碍扩展。

      【讨论】:

      • “共享进程”是什么意思?节点之间的进程可以透明地链接、相互发送消息等。 erlang.org/doc/reference_manual/distributed.html
      • 我指的是他 (@ed1t) 在他的问题中使用的一个短语。这取决于他所说的“分享”是什么意思。我假设他的意思是能够从两个节点访问相同的进程——这当然是不可能的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多