冰果

技术群:26678700     
交流QQ: 704839634
合作: 1) 可兼职远程办公开发; 2) 有一套Go+Python开发的行业短信云平台可合作;3)目前正在开发物联网、大数据平台。

守护与程序稳定性

       在我的技术交流群里,看到有朋友讨论实现重连问题,说说我自己对这个问题的浅见。
       重连接不如重启;尽力维持稳定不如让它崩溃。
       当程序内部状态已经紊乱,而我们无法控制,或许这是第三方库或框架的问题,或许这是其它同事学艺不精的问题。与其我们花费大量精力去解决,想方设法找一种让程序永久不停的解决方案,不如我们使用简单的脚本语言写一个简单的守护,由这个守护程序去重启动我们的应用程序,那么我们的应用程序就可以轻松的退出,就在它无法维持正确状态的时候。简单了就使程序容易控制,bug相对少而且容易查找,那么我们就能保证守护程序相对稳定,因此把一个小小的守护程序做稳定,远比把一个不停变化的应用系统搞稳定容易得多。
      守护程序不稳定怎么办?很多新手担心应用系统和守护一起死掉,有这种担心是正确的。为解决这个担心,一般采用两级守护:一级守护,负责守护应用系统;二级守护,负责守护一级守护程序。这样就把同时死掉的几率下降很多了。那是不是为了安全,我们搞个十级、二十级守护,这就繁琐到杞人忧天的地步了,如果真有那么不稳定,我们应该检查程序,提高我们代码质量,好好考虑开发人员的素质和工作态度了。
 

      当然,简单的程序退出,是否影响应用系统的业务逻辑完整性?是不是我们的应用系统本身不允许简单的退出?这个问题很复杂,看你自己怎么设计这个系统的。为了达到能简单的退出,一个可能的解决办法就是,在架构上保证,在协议上保证,遵循《unix编程艺术》上的设计原则是很重要的。
      早年我力求把程序写得很稳定,也要求周围的人把程序写得很稳定,回头看其实从来没达到过。主要是技术不行,别人就更无法把握,就算自己是主管,也逼迫不了别人。
       记得曾经有一个客户端是用java写的,它本身是一个后台服务,收集地市服务器的日志和运行状态,当时采用mina框架,v0.9的版本。为了socket断开后的重连接,程序员写了很多代码,两三个while循环,最后竟然不稳定。写了这么多代码,能达到预期目的还好,达不到还费力,就郁闷了。我也没时间去查什么bug, 是不是mina使用不对啊什么的。后来,我直接叫他们把那些检测和重连的代码删除,程序一旦发现连接不了中心服务器,直接退出算了,我使用bash写了一个简单的守护,负责重启动它。这个问题就这样简单的解决了,本来这个后台服务也要求不高,直接退出没有什么业务逻辑问题。
      守护是不可靠的,最终还是需要人来维护。守护配合一定的监控报警手段,让维护人员及时发现问题初现,及时解决软硬件问题,才是解决之道。
      当然,程序稳定性还是要程序本身稳定,如果程序不停core,守护不停重启,有什么作用呢。

posted on 2011-05-04 00:19 冰果 阅读(2047) 评论(2)  编辑 收藏 引用 所属分类: 其它

评论

# re: 守护与程序稳定性[未登录] 2011-05-05 00:41 nscboy

这个观点我非常赞同.与其费劲力气写看门狗程序,还不如尽力完善原来程序的逻辑.  回复  更多评论   

# re: 守护与程序稳定性[未登录] 2011-05-09 09:10 zhang

相对的。不能走极端  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理