一个服务器系统,承担着大量的客户业务,当服务模块业务变更时,通常需要停止服务升级系统。
如何建立动态热插拔的模块更换,使得服务器在不影响业务运行时升级功能,这里提供一种方法。
例子是在linux环境,用.so实现。WINDOS用DLL实现也是一样的。
建立两个库目录,一个运行库目录库,一个就绪库目录。
在客户端请求调用某个模块时,服务器在运行库目录中寻找模块并加载到内存。使用完毕驻留。
每个客户端进来使用这个模块,引用计数+1,使用完毕引用计数-1.
当需要更换模块时,先把新模块放到就绪库目录。
然后管理者向服务器发一个更换某模块的指令。这个指令导致运行时目录里的该模块被移动到备份库,以便降级回滚。新模块拷贝到运行库目录。
然后等待引用计数归零。
归零后,从内存中删除该模块。
原理很简单,麻烦的是各种环节的各种锁。
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*