25、Elixir 系统进程管理与动态启动实践

Elixir 系统进程管理与动态启动实践

1. 数据库工作进程监督

1.1 引入独立监督者的原因

在系统中,为了减少单个进程问题对整个系统的影响,我们引入独立的监督者来管理数据库工作进程池。如果将过多的子进程放在同一个监督者下,当重启过于频繁时,监督者可能会放弃并终止所有子进程,导致系统大部分进程重启。而使用独立监督者,可将数据库重启失败的影响限制在数据库操作范围内。

1.2 数据库模块改造

我们将 Todo.Database 模块改造成监督者,以下是具体代码:

defmodule Todo.Database do 
  @pool_size 3 
  @db_folder "./persist" 

  def start_link do 
    File.mkdir_p!(@db_folder) 

    children = Enum.map(1..@pool_size, &worker_spec/1) 
    Supervisor.start_link(children, strategy: :one_for_one) 
  end 

  defp worker_spec(worker_id) do 
    default_worker_spec = {Todo.DatabaseWorker, {@db_folder, worker_id}} 
    Supervisor.child_spec(default_worker_spec, id: worker_id) 
  end 

  def child_spec
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值