简记erlang的热更新分析

本文介绍了Erlang的热更新机制,探讨了code server如何在不停止系统的情况下进行代码更新。文章详细讲解了Erlang的启动模式、代码加载方式、代码版本切换,并特别提醒了在控制台进行热更新时的安全指令。通过对code:purge()和code:soft_purge()的比较,强调了在热更新过程中保证数据完整性的关键点。
摘要由CSDN通过智能技术生成

   Erlang原本脱胎于电信行业,Jow Armstrong 在描述Erlang的设计要求时期中就提到了“软件维护应该能在不停止系统的情况下进行。”在实践中,我们也因为这种不停服务的热更新获益良多,终于不用再等到半夜没人的时候再做更新了,对于一些紧急的bug修复,热更新实在是一把圣剑(至秦玩dota的时候喜欢出圣剑),热更新的具体使用,以及它具体的运行过程是怎样的呢?

   在我们自己使用热更新之前,曾经读过这么一篇博客,博主叫 坚强2002,博文叫 erlang热更新,在这篇博文中,对erlang的 code server 对于运行的代码进行热更新的细节作了很详细的分析,非常感谢这位坚强2002热心的分享,结合这篇图文并茂的博文和erlang的官方文档上的介绍后,我才得以对erlang 的热更新有更为直观的印象。

  erlang 热更新的秘密都集中在code模块,code模块是Erlang code server 暴露出来的对外接口,其职责就是把已经编译好的模块加载到运行时环境。在erlang 的内核kernel中有着这么一个code server 它负责代码的运行时管理,我们在erlang的控制台输入 appmon:start().

然后点击kerner 我们就能看到神秘的code server 模块了

最左边的就是了。

 

代码的加载方式:

erlang在启动系统时,有embedded和interactive两种启动模式,默认是interactive模式启动,也可以通过设置启动参数把它设置成embedded启动:%erl  -mode embedded

这些在官方文档中都有说明。这两种方式有什么区别呢?

embedded模式受应用场景的先知,模块的加载都是需要显示指定code server 加载模块的顺序,一般在启动脚本中指定加载顺序。当然也可以在启动之后再使用code模块的函数来作明确的加载。

然而

interactive模式在系统启动的时候只有部分代码会被加载,通常都是一些运行时自己需要的模块,其他的代码模块都是在第一次被调用的时候动态加载,当调用一个方法时发现一个模块没有加载,code server 就会搜索并加载模块。

在interactive模式下,code server维护了一个搜索代码路径的列表,通常称作 code path, code 模块的 set_path(Path) , get_pat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值