- 浏览: 286868 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
langzhe:
Mac 下用 sudo cpan Template,依然不能 ...
第一次 使用 tsung -
langzhe:
<server host='127.0.0.1' por ...
ejabberd/tsung 做压力测试万万不可忽视测试工具问题 -
dlliwei:
jabberd_register.xml 内容如下(我的ser ...
ejabberd/tsung 做压力测试万万不可忽视测试工具问题 -
dlliwei:
你好,我安装tsung后执行命令: tsung -f jabb ...
ejabberd/tsung 做压力测试万万不可忽视测试工具问题 -
bit1129:
这么复杂的一个东西,一句话说完了?
keepalive
最近几天看了一下erlang的代码热替换,原本计划三天。现在花了快5天了,才刚刚有点对头。
开始我搜了一下,没有找到前人的例子,Erlang程序设计上面的热代码替换例子只不过是个替换思想,实际的应用替换要复杂的多。
我只好从API gen_server中Module:code_change/3开始看。找到OTP Design Principles (http://www.erlang.org/doc/design_principles/release_handling.html#instr)
。本以为就可以解决此问题了,后来发现只不过是个小小的救命草,接下来看了Release Handling,Releases,Appup Cookbook,systools,reltool等。
整个过程遇到了unpacke_release,install_release两个最耽误时间错误。
出现unpacke_release,install_release操作错误的原因是我没有发布第一个版本,(创建第一个版本:http://www.erlang.org/doc/system_principles/create_target.html)。
应用部署与热替换大体步骤:
一、发布第一个版本 (详细参考:http://www.erlang.org/doc/system_principles/create_target.html)
1>创建 发布.rel文件
{release, {"sellaprimeA", "1"}, {erts, "5.7.5"}, [{kernel, "2.13.5"}, {stdlib, "1.16.5"}, {sasl, "2.1.9"}, {sellaprimeA,"1.0"}]}.
2>创建第一个发布版本程序
target_system:create("sellaprimeA").
3>安装
target_system:install("sellaprimeA", "/usr/local/target_sellaprime").
4>启动程序
/usr/local/target_sellaprime/bin/erl -boot /usr/local/target_sellaprime/releases/1/start
留心:需要注意的是 target_system.erl 并没有在erlang lib中 ,需要自安添加编译。
二、代码热替换 (详细参考:http://www.erlang.org/doc/design_principles/release_handling.html#id2273657)
1>创建 发布.rel文件
2>创建 启动脚本 systools:make_script/1
3>创建 relup文件 systools:make_relup/3
4>创建 tar包 systools:make_tar/1
5>复制到发布目录下
6>解包 release_handler:unpack_release/1
7>安装 release_handler:install_release/1
8>持久化 release_handler:make_permanent/1
9>删除老的版本 release_handler:remove_release/1
三、未解决的问题:
1> 执行 unpacke_release、install_release函数操作时,必须在特定的shell下,就是启动一个发布程序的shell下。
如果我是在noshell下启动的话,我就无法执行热代码替换了。有没有其他方法?请老师赐教,谢谢!
如我必须在/usr/local/target_sellaprime/bin/erl -boot /usr/local/target_sellaprime/releases/1/start启动的shell。
2> 更新 new_area_server.erl模块时,state状态丢失,即ets:new(?MODULE,[])内存表被清空。
根据API中的设计原则上配置的sellaprime.appup(我没有看出哪里有错).
{"6",
[{"5",[{update, new_area_server,{advanced,Extra}}]}],
[{"5",[{update, new_area_server,supervisor}]}]
}.
-module(new_area_server). -behaviour(gen_server). -export([area/1, start_link/0]). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). %% @type Thing()=autom() %% @doc langxianzeu area(Thing) -> gen_server:call(?MODULE, {area, Thing}). init([]) -> %% Note we must set trap_exit = true if we %% want terminate/2 to be called when the application %% is stopped process_flag(trap_exit, true), io:format("~p starting add ets table~n",[?MODULE]), {ok, ets:new(?MODULE,[])}. handle_call({area, Thing}, _From, State) -> Reply = compute_area(Thing), ets:insert(State,{Thing,Reply}), io:format("~n==[handle_call]=======tab=~p=====~n",[ets:tab2list(State)]), {reply, Reply, State}. handle_cast(_Msg, N) -> {noreply, N}. handle_info(_Info, N) -> {noreply, N}. terminate(_Reason, _N) -> io:format("~p stopping~n",[?MODULE]), ok. code_change(_OldVsn, N, _Extra) -> {ok, N}. compute_area({square, X}) -> io:format("~n===[new_area_server:compute_area-code_chanage-06~p~n====",[X*X]),X*X; compute_area({rectongle, X, Y}) -> X*Y.
3> 当 new_area_server中的(改变进程状态的存储方式)
init([]) ->
process_flag(trap_exit, true),
io:format("~p starting add ets table~n",[?MODULE]),
{ok, 0}.
替换为
init([]) ->
process_flag(trap_exit, true),
io:format("~p starting add ets table~n",[?MODULE]),
{ok,
ets:new(?MODULE,[])
时如何保存以前的状态
4> 其他模块的热替换还没有实践,继续实践!
5>
release_handler:unpack_release("ch_rel-2").
{error,{enoent,"/opt/target/releases/ch_rel-2.rel"}}
出现上面error的其中一个原因就是权限不足,需要用root权限
- src.tar.gz (8.9 MB)
- 下载次数: 22
发表评论
-
分析 mnesia 索引慢的问题,结果出乎意料.
2015-12-15 15:09 1365分析 mnesia 索引慢的 ... -
keepalive
2014-08-12 17:30 1259{keepalive, Boolean}(TCP/IP so ... -
erlang 手动回收内存
2014-01-20 16:39 1611%%% Garbage collection may ta ... -
Erlang内存分布
2014-01-17 20:18 2022此文来自:https://blog.heroku.com/ ... -
flush 方法小用和pid()方法
2014-01-08 19:23 10271> flush(). ok 2> Pi ... -
Erlang bit语法入门-1
2013-05-14 12:18 904Erlang bit语法入门 1> Red ... -
++操作与lists:concat操作比较 (lists:concat运算结果)
2013-04-11 14:53 1184测试环境 Linux jason-lxw 3.2.0-3 ... -
解决错误src/rabbit_networking.erl:49: type hostname() undefined
2013-02-21 12:31 1041使用 make USE_SPECS=false 参数编译 ... -
我的第一个escript
2013-02-21 11:38 9691 #!/usr/bin/env escript ... -
不要忽略任何一个错误提示,更要找到原因linked websocket controlling loop crashed with reason: kille
2013-02-20 14:29 1110开发程序的时候,好几次都看到后台打出下面的错误日志。 ... -
ets:update_counter实现数字循环
2013-01-18 17:33 2060首先初始化为1 ets:insert(?MODULE, ... -
Re 从表头合理取出host
2013-01-17 15:46 915hd(re:split(Host, ":" ... -
测试 erlang:monitor
2012-11-28 18:59 978测试代码 1 -module(testmonito ... -
lcnt工具
2012-11-20 13:54 749lcnt工具可以统计虚拟机内部的锁使用次数和冲突次数指导系统的 ... -
数字前面补零
2012-11-16 17:04 778lists:flatten(io_lib:fwrite(&qu ... -
get uuid
2012-11-02 10:56 12461、 string:strip(os:cmd("u ... -
apns推送
2012-10-26 11:51 1254%%%------------- ... -
make rel Command 'generate' not understood or not applicable
2012-09-21 11:14 1931今天 编译riak时遇到了 Command 'gene ... -
Did you notice the concept of "save queue"?
2012-09-14 17:36 627Did you notice the concept o ... -
Erlang截取中文问题
2012-08-20 15:06 1488NewSummary = xmerl_ucs:to_utf8( ...
相关推荐
Erlang是一种面向并发的、轻量级的、函数式编程语言,...总之,理解和掌握Erlang的应用部署与热代码替换对于开发高可用、高并发的系统至关重要。通过实践和不断学习,我们可以利用这些特性构建出更健壮、更灵活的系统。
在Erlang编程环境中,模块级别的热部署是一项关键特性,它允许开发者在不中断系统运行的情况下更新或替换已加载的模块。这对于实时系统和高可用性服务尤其重要,因为它们需要持续提供服务而不能因为代码更新而停机。...
- **应用场景**: 代码的热替换场景。 #### 21. Erlang消息监听器调试 - **工具**: `erl_snooper`。 - **功能**: 监听Erlang进程之间的消息传递。 - **应用场景**: 调试复杂的分布式系统。 #### 22. Erlang网络程序...
4. **热代码替换**:Erlang支持在不中断服务的情况下更新运行中的代码,这是其高可用性的一个关键特性。这使得开发者可以在生产环境中修复bug或优化性能而无需停机。 5. **模式匹配**:Erlang的函数调用允许模式...
6. **热更新**:Erlang系统支持运行时代码替换,无需停止服务即可更新或升级系统,这对于保持服务连续性至关重要。 7. **OTP(Open Telecom Platform)**:OTP是Erlang的标准库,提供了一套用于构建可靠、可扩展、...
热部署和代码替换 热部署(hot code replacement)是Erlang的一大特色,使得在不停机的情况下更新系统成为可能。这对于维护和升级大规模运行的应用系统尤其重要。 #### 12. IO和并发 Erlang的IO系统与其它语言相比...
Erlang以其强大的错误恢复能力、热代码替换以及对大规模并发的支持而闻名,是构建高可用性、容错性强的系统的一个优秀选择。 在本书中,读者将了解到Erlang的核心概念和语法特性,包括: 1. **函数式编程基础**:...
同时,Erlang社区提供了许多工具,如Rebar3和ERTS(Erlang Run-Time System),它们对于构建、测试和部署Erlang应用至关重要。 【压缩包子文件的文件名称列表】"rw_file"可能表示这个压缩包包含了一些关于读写文件...
4. **热更新**:Erlang OTP提供了代码替换(Code Replacement)功能,允许程序在运行时升级代码而无需停机,这在维护大型系统时非常关键。 5. **模式匹配**:Erlang的函数调用支持模式匹配,使得代码更加简洁和易于...
此外,Erlang还支持热代码替换,使得在不中断服务的情况下更新应用程序成为可能。 Erlang的BEAM虚拟机是其运行时系统的核心,负责管理内存、调度进程和执行代码。理解BEAM的工作原理对于编写高效、健壮的Erlang代码...
Erlang采用函数式编程范式,提供了轻量级进程、热代码替换和故障隔离等特性,使得在RabbitMQ这样的系统中处理大量并发连接和快速消息交换变得可能。 RabbitMQ的安装通常包括两个主要步骤:首先,你需要安装Erlang...
Erlang以其轻量级进程、热代码替换以及内置的分布式计算能力而著称,这些特性使其成为构建高可用性和容错性的网络应用的理想选择。`otp_win64_24.0.exe`是Erlang/OTP(Open Telecom Platform)的Windows 64位版本,...
- **分布式编程**:Erlang内置了对分布式系统的支持,可以很容易地将进程部署到不同的节点上,并通过网络进行通信。 通过以上介绍,我们不难看出,Erlang作为一种专为高并发、容错性强的应用场景设计的语言,其核心...
2. **热代码升级**:开发者可以在运行时替换和更新代码,无需重启系统,这对于维护大规模服务至关重要。 3. **故障恢复**:Erlang的错误处理机制鼓励进程间隔离,一个进程的崩溃不会影响其他进程,增强了系统的健壮...
在实际开发中,结合版本控制系统(如 Git)和持续集成/持续部署(CI/CD)流程,Erlang 模块模板可以进一步提升开发效率和代码可维护性。开发者可以将模板与项目代码一起版本化,确保在项目的不同阶段都能保持代码...
Erlang以其强大的并发处理能力、轻量级进程、热代码替换以及高效错误恢复机制而闻名。在现代IT行业中,Erlang被广泛应用于实时系统、大规模并发服务、云计算平台以及分布式数据库等领域。 "erlangsoft.rar"是一个...
2. **热代码替换**:Erlang 支持运行时代码更新,无需停止整个系统,这对于CI服务器来说意味着可以在不影响服务的情况下进行升级和调试。 3. **分布式**:Erlang系统可以轻松地跨多台机器分布式部署,这对于构建...
- **Mix简介**:Mix是Elixir的官方构建工具,用于编译、打包、部署Elixir应用程序。 - **Mix常用命令**:如`mix new`用于创建新项目,`mix compile`用于编译项目等。 #### 十五、元编程 - **元编程概念**:元编程...
3. **热代码替换**:Erlang支持在运行时更新代码,无需停机即可升级系统,这对于维护大型服务至关重要。 4. **简单错误处理**:Erlang使用模式匹配和异常处理机制,使得错误处理更加直观和简洁。 5. **OTP(Open ...