免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6695 | 回复: 6
打印 上一主题 下一主题

[C] 如何用动态库实现热部署? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-21 11:34 |只看该作者 |倒序浏览
我有个应用一直跑着,接收外部输入,根据所需功能和配置用dlopen...调用对应动态库。假设现在有个功能所在的动态库已被dlopen打开并使用中,我想不停机发布该动态库的新版本,且做到发布前已加载的输入用旧代码,发布后再收到的输入用新代码,不能出现coredump或内存泄漏,可否做到?做法应该是怎样呢?还请解释一下,包括文件权限设置等,谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-10-21 12:15 |只看该作者
风险也太大了。

更新动态库,不如更新进程。

一直跑着的进程和被更新的进程之间,
通过标准输入输出传递数据。

这样热部署比较有保障。

论坛徽章:
0
3 [报告]
发表于 2011-10-21 12:34 |只看该作者
被更新的进程是不定的,通过配置才能知道,所以采用动态库。

论坛徽章:
0
4 [报告]
发表于 2011-10-21 12:41 |只看该作者
把不同版本的动态库直接看成不同的动态库好了,做一个动态库管理模块,动态增加新的动态库,然后做个策略选择合适的动态库来使用。同时记录动态库的引用计数。

更新动态库时,相当于加载一个新的动态库,然后新的任务使用新的动态库。同时标记旧的动态为待删除,当旧任务完成,旧动态库的引用计数归0时,就可以卸载旧动态库了

论坛徽章:
0
5 [报告]
发表于 2011-10-21 13:42 |只看该作者
好主意啊,谢谢了!
另外,记得IBM有网页说动态库的权限等设置问题,可否提供相关地址?

论坛徽章:
0
6 [报告]
发表于 2011-10-26 10:09 |只看该作者
我们的做法比较土,多进程,直接替换旧动态库,然后启新进程,停旧进程,启一个停一个。 这样可保证应用不停。

论坛徽章:
0
7 [报告]
发表于 2011-10-27 10:47 |只看该作者
回复 6# fengogo008

停止旧进程,那进程的状态岂不是全部被丢弃了,新进程从零开始运行?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP