c++程序的热更新一直是让c++开发者头疼的事情,一般场景下若线上业务逻辑需要修复,常规更新方式是重启进程,整体风险较高。
造成这种现象原因之一是c++比较“古老和灵活“。区别于脚本语言以及一些现代诞生出来就支持热更新的语言,它有其特有的适用场景与技术积累(褒义和贬义都有)。
写这篇文章的时候,c和c++两兄弟仍然可以位居编程语言流行榜前5:
一些成熟的c++热更新方式
这里热更新定义范围会放的宽一些,理解成对业务影响小的更新方式。
虽然c++自身不具备热更新的能力,但是也有一些其他手段来达到此目标:
- 逻辑设计成无状态,平滑重启,现在随着容器与无服务推广,应用面更广了;
- 子进程替换,nginx在使用;
- 所有逻辑编入动态库,利用动态库热加载机制;
- 利用lua脚本语言处理逻辑,skynet在使用,很多游戏服务器在使用此方案;
这篇文章会介绍一种基于动态库的方式,和上面第3点主要区别在于对于原工程侵入较小,底层机制也有所不同。
Read More →