饭中淹的避难所~~~~~

偶尔来避难的地方~

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  94 随笔 :: 0 文章 :: 257 评论 :: 0 Trackbacks
用c++和c#开发应用服务器的时候,会遇到这种情况,知道当前运行的服务器逻辑有bug,但是却无法及时的停机替换有bug的服务,而导致问题的扩大话或者其他不良的后果。为此,我考虑了运行时逻辑替换的可能性。
首先,设计逻辑的时候,把数据和逻辑分开。这样,可以在替换逻辑的时候减少数据的交互,降低bug的出现几率。
其次,逻辑模块间使用接口来进行交互。这样的好处是其他逻辑模块不依赖编译器生成的代码,也不会进行inline优化,以便于能够完全的替换掉逻辑模块。
再次,逻辑模块内的不同部分,最好也使用接口来进行交互。这样可以最大程度上提高灵活性,降低替换成本。
最后,逻辑接口实现完全的状态拷贝的功能。这个是最后最关键的一步。
实现了这些东西后,我们的逻辑模块就可以方便的进行替换。提高了服务器的灵活性,也提升了服务的稳定运行时间。
不过,需要注意的是,在没有这些需求的情况下,最好不要进行这种危险的行动。因为稍微不小心,就可能在状态拷贝的时候,漏掉一个或者多个关键状态而引起服务器发生意想不到的问题。

posted on 2010-02-02 07:28 饭中淹 阅读(1459) 评论(2)  编辑 收藏 引用

评论

# re: 服务器程序运行时逻辑替换 2010-02-12 11:48 金庆
如果逻辑模块是个脚本,脚本热替换应该没有一点问题. 如果是进程,热替换是很麻烦的。  回复  更多评论
  

# re: 服务器程序运行时逻辑替换 2010-02-15 17:41 饭中淹
@金庆
我是以对象为单位的替换。只要接口不修改,以及状态拷贝正确,替换还是很简单的。
  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理