Log技术在维护一些分布式系统时,是一个很好的手段。特别是在一些分布式/多模块的系统中,Log经常是解决问题首选的方式。因为在分布式/多模块的系统里,发现问题后最复杂的部分往往在于定位上。问题由哪个模块导致,在哪个模块开始体现,出现问题模块的输入数据来源...
个人遇到的一个实际的例子是,一个分布式的系统,由时差在6-8小时的3个team分别维护3个模块。3个模块的接口分别是:
1. 一个Session Message Framework,负责在模块间分发消息
2. 一个数据库访问API, 使用Session Message Framework接受高层用户的数据库访问请求,处理后返回结果
3. 应用层,使用数据库API访问数据库
由于3个team之间时差相差太大,很难有3个模块负责人直接交流的机会,Email成为唯一的解决方案。每次发现问题由其他模块引起时,必须有明确的模块间通讯的数据log, 否则会发现问题总是在几个小组之间来回传递。不能定位问题产生的模块,解决就是空谈。
使用Log方式,找到有问题的数据点, 很容易就能定位到出错模块;更重要的是,能够证据确凿地将问题移交给该模块负责人,避免踢皮球的情况。