Sni*_*gus 1 erlang distributed erlang-otp nodes gen-server
我有一个Erlang应用程序,它有点太资源不足以留在一个节点上.我正在使gen_servers从一个进程转移到另一个进程 - 结果相对容易.我处于最后一个障碍:获取创建这些gen_servers的工厂进程以在远程节点而不是本地节点上生成它们.start_link的默认行为显然只在本地启动,但我没有看到任何更改它的选项.
似乎我必须要有创造力的解决方案,并想看看是否有人已经实现了这样的事情,并取得了任何成功.IOW,推荐的解决方案是什么?
编辑
我正在查看通过调用触发的调用链:
gen_server:start_link(?Module, Args, [])
Run Code Online (Sandbox Code Playgroud)
gen_server:START_LINK/3:
start_link(Mod, Args, Options) ->
gen:start(?MODULE, link, Mod, Args, Options).
Run Code Online (Sandbox Code Playgroud)
创:启动/ 5:
start(GenMod, LinkP, Mod, Args, Options) ->
do_spawn(GenMod, LinkP, Mod, Args, Options).
Run Code Online (Sandbox Code Playgroud)
创:do_spawn/5:
do_spawn(GenMod, link, Mod, Args, Options) ->
Time = timeout(Options),
proc_lib:start_link(?MODULE, init_it,
[GenMod, self(), self(), Mod, Args, Options],
Time,
spawn_opts(Options));
Run Code Online (Sandbox Code Playgroud)
proc_lib:START_LINK/5:
start_link(M,F,A,Timeout,SpawnOpts) when is_atom(M), is_atom(F), is_list(A) ->
Pid = ?MODULE:spawn_opt(M, F, A, ensure_link(SpawnOpts)),
sync_wait(Pid, Timeout).
Run Code Online (Sandbox Code Playgroud)
这最终让我们感到有趣.有一个匹配的spawn_opt/4:
spawn_opt(M, F, A, Opts) when is_atom(M), is_atom(F), is_list(A) ->
...
...
Run Code Online (Sandbox Code Playgroud)
但是,有一个对我有用的东西:
spawn_opt(Node, M, F, A, Opts) when is_atom(M), is_atom(F), is_list(A) ->
...
...
Run Code Online (Sandbox Code Playgroud)
令人难以置信的是,这并没有暴露出来.我意识到,粗心的程序员可能会尝试gen_server:start_link一个正好在火星上运行的erlang节点上的进程,阻止了半小时的调用,但当然,这是程序员的了望.我是否真的坚持修改OTP或编写某种特殊解决方案?
我们不start_link直接在远程节点上安装服务器.为了获得良好的程序结构和简单性,我们在远程节点上启动一个单独的应用程序,并将远程进程的创建委托给在远程应用程序中运行的某个进程.
由于链接到流程主要是为了监督或监控,我们更喜欢与本地主管而不是远程流程进行链接.如果您需要任何远程进程的活动状态,我建议erlang:monitor和erlang:demonitor.
典型的分布式设置:
Node1
+---------------+ Node2
| App1 | +---------------+
| Supervisor1 | Proc Creation Request | App2 |
| Processes | -----------------------> | Supervisor2 |
| ...... | | |
| ...... | | | Create Children
| ...... | Monitor | V
| ...... | -----------------------> | Processes |
+---------------+ | ...... |
+---------------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2028 次 |
| 最近记录: |