`
litaocheng
  • 浏览: 337691 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

boot_server 及 Erlang emulator启动过程

阅读更多
在分布式系统中,因为涉及到大量的机器,所以部署略微有些繁琐。

使用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可以么?这个需要寻找一个好的方案,期待答案....
分享到:
评论
2 楼 mryufeng 2009-04-08  
loader可以是一个外部port  你想如何处理你的beam都是可以的
1 楼 mryufeng 2009-02-24  
现在多了个可以从zip文件加载的模块

相关推荐

    Erlang-Formula.zip_Erlang B _Erlang-B_erlang_erlang B计算_erlang C

    Erlang B 和 Erlang C 是在电信领域中广泛使用的两个数学公式,用于预测和管理电话交换系统的呼叫处理能力。这两个公式由丹麦工程师 Agner Krarup Erlang 在20世纪初开发,对于理解通信系统中的呼叫占用率、阻塞率和...

    gen_tcp_server:Erlang 应用程序的通用 TCP 服务器

    通用 TCP 服务器 通用 TCP 服务器( gen_tcp_server ) 是一种 Erlang 行为,提供快速简便的方法将 TCP 服务器功能添加到您的应用程序。 它被实现为管理 TCP 连接的主管,因为它是孩子。如何使用它? 运行make来构建。...

    xiandiao_erlang_Erlang课后习题_

    "xiandiao_erlang_Erlang课后习题_"这个压缩包文件包含了Erlang程序设计第二版的课后习题源码,这对于学习和深入理解Erlang编程至关重要。 Erlang的特点: 1. **函数式编程**:Erlang基于函数式编程范式,强调无副...

    gen_server:Erlang 的 gen_server 的(不完整的)OcamlAsync 实现

    《Erlang gen_server在OcamlAsync中的实现探索》 Erlang的gen_server是其并发模型的核心组件,它提供了一种强大的状态管理和错误处理机制。而在OCaml语言中,尽管有着自己的并发库如Async,但直接移植或模仿Erlang...

    otp_win64_20.3-Erlang.zip

    标题中的"otp_win64_20.3-Erlang.zip"表明这是一个包含Erlang编程语言特定版本的Windows 64位版本的压缩文件。OTP(Open Telecom Platform)是Erlang的主要实现,它是一个用于构建高度并发、容错且可扩展的系统平台...

    Erlang emulator 实现分析

    Erlang emulator 实现分析Erlang emulator 实现分析

    erlang_otp_win64_25.0

    在"erlang_otp_win64_25.0"这个标题中,我们可以提取出几个关键点: 1. **Erlang**:这是一种函数式编程语言,以其在处理并发性和容错性方面的强大能力而闻名。Erlang的设计理念是让程序员能够轻松地构建能够并行...

    HW2.rar_erlang_erlang C

    标题中的“HW2.rar_erlang_erlang C”可能是指一个关于Erlang C模型的作业或项目,存储在名为“HW2”的RAR压缩文件中。Erlang C是一种用于预测电话交换系统中呼叫中心拥塞的数学模型,由通信工程师Agner Krarup ...

    erlang_ale, Erlang嵌入式框架嵌入式框架的Erlang Actor库.zip

    erlang_ale, Erlang嵌入式框架嵌入式框架的Erlang Actor库 用于嵌入式的/ale Erlang erlang/jar提供了高级抽象,用于嵌入式平台上通过 I2C 。SPI和kdb与硬件外设接口。正在启动erlang/ale同时支持rebar3和 erlang.mk...

    erl_nif 扩展erlang的另外一种方法

    2. **NIF的生命周期**:涵盖NIF的加载、初始化、使用和卸载过程,以及这些阶段需要注意的问题,如安全性和同步。 3. **编写NIF**:详述如何创建和注册NIF,包括C语言接口的设计,Erlang端的调用方式,以及如何处理...

    gen_server tasting 之超简单名称服务(续)

    在IT行业中,`gen_server`是Erlang OTP(开放电信平台)框架中的一个核心组件,它提供了一种模式化的方式来实现服务器进程。本篇博客“gen_server tasting 之超简单名称服务(续)”主要探讨了如何使用gen_server来...

    megaco_session-0.5.rar_erlang_erlang Megaco_megaco

    “erlang_erlang_megaco”标签进一步强调了这个项目与Erlang语言以及Megaco协议的关联。Megaco(也称为H.248)是一种通信协议,主要用于在多媒体网关控制器(MGC)和多媒体网关(MG)之间进行交互,以控制VoIP...

    Erlang_B_model.rar_Erlang B _Erlang B model_Wireless Handbook_e

    在这个压缩包中,我们有一个名为"Erlang_B_model.pdf"的文件,它很可能是这样的手册的一部分,提供了关于Erlang B模型的理论、公式以及查表方法。 **Erlang B公式**表达了一个服务系统(如电话交换机)在固定数量的...

    why_i_choose_Erlang

    ### Erlang:面向并发编程与高可靠性解决方案 #### 引言 随着信息技术的快速发展,特别是互联网服务的大规模扩张,对编程语言的需求也在不断变化。Erlang作为一种专注于高并发、分布式处理、持续服务以及热升级等...

    building_web_applications_with_erlang.pdf

    - **启动Yaws**: 文档介绍了如何开始使用Yaws Web服务器,这是构建在Erlang之上,为高效处理HTTP请求而设计的一个Web服务器。 - **服务静态文件**: Yaws可以用来服务静态文件,这意味着它支持常规的静态网页内容...

    erlang_gproc_扩展实现Erlang的全局ets

    Erlang是一种面向并发的、函数式编程语言,被广泛应用于分布式系统和高可用性服务。在Erlang中,ETS(Erlang Term Storage)是内置的一种高效、内存中的数据库,用于存储和检索Erlang术语。然而,ETS的一个限制是它...

    for_each_file 用erlang代码实现遍历文件

    在Erlang编程语言中,`for_each_file`是一个自定义函数,用于遍历指定目录下的所有文件,并对每个文件执行特定的操作。在这个场景中,它读取每个文件的内容,以行为单位处理每一行,将每一行作为一个列表元素,最后...

    erlang_release_example:ErlangOTP版本处理示例

    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_...

    otp_Erlang_win64_22.1下载地址.txt

    otp_win64_22.1的官方地址下载太慢,共享一下otp_Erlang_win64_22.1百度云下载地址

Global site tag (gtag.js) - Google Analytics