分布式系统的监控和可维护性

当一个100万行以上代码的分布式系统或者复杂的生产系统部署上去后,监控和维护便会成为很大的问题,

如旺旺/QQ 这样的大型IM系统,或者 Alimail这样的邮件系统,以及taobao.com这样的网站。

当生产系统中的进程以百为单位时,没有很好的监控和维护系统,PE人员的维护将成为灾难。如一次大的升级或者

机房搬迁非常容易出问题。

 

为了解决该问题,需要系统的架构师在设计系统的开始就需要考虑维护和升级问题。解决的办法为

系统自带监控管理自检系统。

如该分布式系统是C++写的自定义协议的分布式程序,则系统中的每个进程都必须从一个框架继承过来,而该框架拥有

自带进程识别信息(进程的Size,SVN版本,以及API的调用次数和Costtime)上报给监控中心,并且定义好每个角色的

Instance数目。这样当生产环境中某个进程的版本不符合时就会马上报警,避免生产环境中部署了错误版本的进程。

另外由于有Instance数目的监控,这样当进行大规模升级或者机房搬迁时不会由于某个进程忘了部署而导致业务出问题。

 

另外监控系统自身还带有API 调用关系图,实现的方法如在RPC Call的Message头中加入Caller的信息,以及在Message的Response中

加入Responder的信息,并把Call信息采样上报给监控中心后就可以自动根据Message流动画出API 流程图。

这样也就很容易知道某个API有哪些APP在调用,以及依懒哪些APP了。

 

另外由于每个API都有最大/最小/平均响应时间上报给监控中心,这样就可以根据响应时间来自动推测系统的健康状况,以及是否有异常。

如某个API的次数突然过高,或者过低,则监控中心就可以发送Alarm给相关的维护人员PE. 而PE收到报警后可以根据API Call图马上定位问题。

 

你可能感兴趣的:(分布式系统的监控和可维护性)