在分布式系统中,因为涉及到大量的机器,所以部署略微有些繁琐。
使用Erlang开发的系统,我们可以通过boot_server来加载我们的代码,免去了ssh登陆服务器,更新代码这样繁琐的步骤。我们只需要将最新的beam文件放到一个server,作为Erlang的boot_server,其他的机器启动Erlang时,通过连接这个Boot Server加载最新的应用代码,完成程序的启动。
架设Server ip为:8.17.85.135
其中一个Client为: 124.118.219.104
启动一个Boot Server涉及的主要模块为erl_boot_server,我们可以通过erlang_boot_server:start/1启动boot server,通过erl_boot_server:add_slave/1加载一个slave,也就是允许连接本机从而加载代码的client。我们也可以通过kernel config来启动boot server,这样更简单:
bserver.config:
[
{kernel, [{start_boot_server, true} ,
{boot_server_slaves, [{124,118,219,104}]}]}
].
(注:根据Erlang 文档,slave可以采用atom, string, tuple多种方式来表示,可是我尝试只能使用tuple,不知是否bug?)
随后启动
erl -setcookie "cookie" -config bserver
至此,我们的boot server就启动成功了,接下来让我们的client从boot server启动。
client:
erl -loader inet -hosts "8.17.85.135" -id node1 -setcookie "cookie"
很遗憾,在我的机器,没有启动成功,因为我client是widnows xp系统。
boot server启动对client的要求
1. Slave在Boot Server的Slaves列表中
2. Erlang OTP版本相同
3. Cookie设置相同
4. 路径一致
以上4点不一定准确,需要我回头在家中的linux上进行尝试,呵呵,本人保留对以上4点要求修改的的权力
根据文档循规蹈矩的走了一遍,有很多疑问和不解,需要去代码中遨游一翻了。
根据init.erl, kernel.erl, erl_prim_loader.erl我简单的罗列了下面的启动过程:
erl启动过程:
1. shell中输入 erl ......
2. emulator调用init:boot/1启动(通过 erlang:whereis(init)返回pid为<0,0,0>,init是第一个process)
3. 启动erl_prim_loader,其负责获取具体的文件从本地(efile)或远程的boot_server(inet)
4. 根据-boot选项,获取boot script文件名称,通过erl_prim_loader获取boot脚本
5. 解析boot script,调用init:eval_script/8执行对应的语句
6. boot script执行完成后,调用init:start_em/1启动erl参数中-s -run对应的模块
7. 执行完毕,启动完成
对于Erlang系统的启动是根据boot script,通过erl_prim_loader从local或server获取具体的module BinCode
随后通过erlang:load_module加载。
有个问题,这里的erl_prim_loader,要么是通过efile,要么是通过inet,有没有一个hybrid的版本呢,我可以让部分 module通过inet加载,而部分通过local加载,通过修改boot.script可以么?这个需要寻找一个好的方案,期待答案....
分享到:
相关推荐
通用 TCP 服务器 通用 TCP 服务器( gen_tcp_server ) 是一种 Erlang 行为,提供快速简便的方法将 TCP 服务器功能添加到您的应用程序。 它被实现为管理 TCP 连接的主管,因为它是孩子。如何使用它? 运行make来构建。...
实现了Erlang B/C功能,支持大容量计算
Erlang emulator 实现分析Erlang emulator 实现分析
erl_nif 扩展erlang的另外一种方法
关于在 Erlang 风格的 gen_server 上进行 Ocaml/Async 尝试。
erlang_ale, Erlang嵌入式框架嵌入式框架的Erlang Actor库 用于嵌入式的/ale Erlang erlang/jar提供了高级抽象,用于嵌入式平台上通过 I2C 。SPI和kdb与硬件外设接口。正在启动erlang/ale同时支持rebar3和 erlang.mk...
erlang程序设计第二版课后习题源码,源码实现
erlang tcp_servererlang tcp_servererlang tcp_server
温馨提示:软件为window版本的。 rabbitmq_3.7.9+erlang_20.1
使用Erlang开发web应用,书中范例所使用的webserver为Yaws
erlang C matlab code for graph
cp _build/default/rel/erlang_release_example/erlang_release_example-0.1.0.tar.gz deploy/ (cd deploy && tar xzf erlang_release_example-0.1.0.tar.gz) ./deploy/bin/erlang_release_example console (erlang_...
一个Megaco实现源代码,用Erlang环境完成的。
对于Erlang发展前景的描述和Eralng的优点
esl-erlang_23.0和rabbitmq-3.8.4windows版本 直接下载安装就行,可以直接下载就可安装,非常的方便 ,欢迎大家下载 注意事项: 1. Erlang版本和RabbitMQ版本要配套 (Erlang23.0, RabbitMQ3.8.4) 2. amd芯片请乖乖...
erlang_otp_win64_25.0
是erlang_otp_20.3 的win64安装包,内为exe文件,一路next即可安装完成 是适用于多线程、分布式开发的语言,也是如rabbitmq等重要工具的必须品 使用前需要配置环境变量:1.变量名为ERLANG_HOME,变量值为安装Erlang...
erlang_ls 一个实现微软语言服务器协议 3.15 的 Erlang 服务器。最低要求 快速开始编译项目: make要在/usr/local/bin安装生成的erlang_ls escript: make install命令行参数这些是可以提供给erlang_ls脚本的命令行...
对文件进行遍历,以行为单位进行输出,没一行构成一个列表元素,最终拼成一个列表。