运行gen的最佳方式是什么?
我正在Erlang建立一个监控工具。 在群集上运行时,它应该在所有节点上运行一组数据收集功能,并在单个“记录器”节点上使用RRD记录该数据。
当前版本在主节点( rolf_node_sup
)上运行一个管理程序,该管理程序试图在集群中的每个节点上运行第二个管理程序( rolf_service_sup
)。 然后,每个节点监控程序都应该启动并监控将消息发送回主节点上的gen_server( rolf_recorder
)的一堆进程。
这只适用于本地。 没有管理员在任何远程节点上启动。 我使用以下代码尝试从记录器节点加载节点监督器:
rpc:call(Node, supervisor, start_child, [{global, rolf_node_sup}, [Services]])
我发现有几个人认为主管们确实只是为本地流程而设计的。 例如
实现我的要求以监督在集群中所有节点上运行的代码的最有效的OTP方式是什么?
proc_lib:spawn_link
在每个节点上启动一个监督器来创建一组受监督的“代理”进程(每个节点一个进程)。 如果某个节点出现问题,代理进程应该死掉,然后由其监控程序重新启动,这又会重新启动远程进程。 从模块在这里可能非常有用。 一些要求:
有趣的挑战,有多种解决方案。 以下是我的建议,希望能让您更好地选择如何编写程序。
据我了解你的程序,你想有一个主节点,你开始你的应用程序。 这将在集群中的节点上启动Erlang VM。 pool
模块使用slave
模块执行此操作,这需要在两个方向上进行基于密钥的ssh通信。 它还要求你有适当的DNS工作。
slave
的缺点是,如果主人死亡, slave
也会死亡。 这是完全设计的,因为它可能完全适合原始用例,但在您的情况下,它可能很愚蠢(例如,即使主服务器已关闭,您仍可能仍要收集数据)
至于OTP应用程序,每个节点都可以运行相同的应用程序。 在您的代码中,您可以使用配置或发现来确定集群中的节点角色。
我建议使用一些操作系统工具或daemontools或类似的工具启动Erlang虚拟机。 每个虚拟机将启动相同的应用程序,其中一个将作为主机启动,其余的作为从机启动。 这样做的缺点是难以在群集中的机器上“自动”运行软件,就像您可以对slave
机执行一样,但它也更加健壮。
在每个应用程序中,您都可以根据节点的角色拥有合适的监督树。 消除节点间的监督和产卵使系统变得更简单。
我也建议让所有节点都推送给主人。 通过这种方式,主机并不需要关心从机中发生了什么,甚至可以忽略节点关闭的事实。 这也允许添加新的节点而不需要对主设备进行任何改变。 该cookie可以用作身份验证。 多个主人或“录音机”也相对容易。
然而,“从属”节点需要注意主站正在下降并采取适当的行动,比如存储监控数据,以便在主站备份后可以发送。
我会研究riak_core。 它提供了一个用于管理分布式应用程序的基础设施层,这些应用程序在erlang和otp本身的原始功能之上。 在riak_core下,不需要将节点指定为主节点。 没有节点是otp意义上的中心,任何节点都可以接管其他失败的节点。 这是容错的本质。 此外,riak_core提供了优雅的节点加入和离开集群的处理,而不需要诉诸主/从策略。
虽然这种“拓扑”分散是方便的,但分布式应用通常需要逻辑上特殊的节点。 出于这个原因,riak_core节点可以通告它们提供了特定的集群服务,例如,如您的用例所示,结果收集器节点。
另一个有趣的功能/体系结构的后果是,riak_core提供了一种机制,通过“八卦”协议维护集群成员可见的全局状态。
基本上,riak_core包括一堆有用的代码来开发高性能,可靠和灵活的分布式系统。 你的应用程序听起来很复杂,以至于拥有一个强大的基础将会比以后付出更多的报酬。
otoh,几乎没有文件。 :(
这里有一个人谈论他用riak_core写的一个内部AOL应用程序:
http://www.progski.net/blog/2011/aol_meet_riak.html
以下是关于钢筋模板的说明:
http://lists.basho.com/pipermail/riak-users_lists.basho.com/2011-March/003632.html
......这里是关于该钢筋模板的一个分支的文章:
https://github.com/rzezeski/try-try-try/blob/7980784b2864df9208e7cd0cd30a8b7c0349f977/2011/riak-core-first-multinode/README.md
...在riak_core上聊天:
http://www.infoq.com/presentations/Riak-Core
... riak_core公告:
http://blog.basho.com/2010/07/30/introducing-riak-core/
链接地址: http://www.djcxy.com/p/38241.html