在 Elixir 中实现分布式池化

主要观点:

  • 在 Elixir 中设置集群后,在集群的其他节点上运行代码很容易,介绍了一种类似 FLAME 但无自动缩放的 API。
  • 实现了一个分布式池(DistributedPool),通过 DynamicSupervisor 和 pg 来管理节点和进程,包括加入池、查找可用监督者、在监督者下放置子进程等操作。
  • 与 FLAME 相比,此系统在处理进程超时和链接父进程与子进程方面有所不同。

关键信息:

  • 可通过 Node.spawn 在集群节点上运行代码,还希望有更好的 API,如 FLAME。
  • FLAME 可通过指定池名运行函数,无需硬编码节点名。
  • 实现的分布式池 API,包括 callplace_child 等函数。
  • 分布式池的实现细节,如节点启动 DynamicSupervisor 加入进程组等。
  • 查找可用监督者的方法,通过查询每个监督者的子进程数量来选择。
  • 放置子进程时设置进程组领导等操作。

重要细节:

  • 示例代码展示了如何在分布式池中运行函数和放置子进程。
  • 提到当前设置只有少量节点,暂用当前查询每个监督者的方式。
  • 与 FLAME 的差异,如有无 Terminator 进程和是否链接父进程与子进程。
  • 作者正在寻找下一份工作,欢迎推荐合适机会。
阅读 15
0 条评论