数据库 频道

关键应用的可观测性能力设计应该引起关注

我以前比较关注IT基础设施的可观测性,因为这些年我们并没有承担应用系统开发的工作,更多的注重于IT基础设施。不过我一直认为数据库这样的IT基础设施与应用软件一样,都是程序,因此在IT基础设施领域的一些方法针对应用软件也是有效的。复杂的应用系统特别是平台型的应用系统是十分复杂的,向外可能和网络、安全设备、客户端有关;本身又涉及复杂的业务逻辑和组件间的交互协同;向内与IT基础组件甚至IT基础设施相关联。一个稍微大一点的平台型应用系统,可能比一套分布式数据库还复杂。

昨天参加了一个系统故障的分析会,最终定位了原因后再来分析问题并不困难,因为一个网络抖动触发了一系列的问题,最终因为软件设计方的一些小瑕疵导致了最终的问题。不过整个定位过程十分复杂,因为所涉及的网络、云平台、数据库、中间件等环境十分复杂,一个个排查过来,就花了好几个小时。对于一个关键的系统,这种定位速度是无法满足运营的需求的。开发商十分坦诚的承认了软件的缺陷是导致问题的根因,并提出了整改的方案。不过这并不能彻底的杜绝类似问题的发生。下一次另外一个BUG导致了新的问题的时候,还是需要如此冗长的排查过程。

这个平台系统对于客户来说十分关键,今后数百个大大小小的系统都要使用这个平台,几个小时的故障排查无法满足用户的SLA,因此如何提高问题排查的速度,甚至实现故障自愈是十分关键的。虽然目前使用的一些排查手段都可以做成自动化工具,不过哪怕所有的排查都自动化了,解决故障所需的时间仍然太长了。怎么才能解决这个问题呢?

二十年前我曾经参与了某银行的大前置IPP的研发,设计了IPC、多优先级队列、服务路由等模块,并亲自动手编写了共享内存管理模块。因为IPP是CORE BANKING的核心组件之一,因此在设计这个模块的时候在IPC层面做了大量的统计指标、故障侦测和故障自愈的设计。系统运行的状态可以通过大量的统计数据得以反馈,而一些已知故障都能够被后台进程发现并实施预设的自愈程序,因此这套系统从出厂后就相当稳定。

从上面的案例可以看出,要想让应用系统运行得更稳定,或者说要提高应用系统的业务连续性,应用的可观测性至关重要。如果在设计阶段,就能够像数据库等IT基础设施一样,设计大量的可观测性接口,将日志、指标、跟踪能力原生态的实现出来,那就会大大的提高应用的可用性,也可以大大缩短应用故障时的故障定位时间。

应用的可观测性能力来自于四个方面,日志告警自不必说,所有的应用系统都会有各种日志,应用软件如果不能认认真真的写日志,那就丧失了快速定位问题的能力。不过应用系统的日志更为复杂,不仅仅要考虑应用系统本身的日志,还要关注其运行环境中的各个IT基础设施的日志,一个统一日志工具是必不可少的。除了统一采集日志外,还要实时的分析和处理日志,将日志中的关键信息变成结构化的数据,以便于后续的自动化分析预警与根因定位。

指标体系是目前大多数应用系统中欠缺的东西,针对应用系统的特点,编制一套可用于故障分析与预警的指标体系其实相当重要。应用系统的指标一定要实用,要选择能够反映出系统运行健康状态的数据作为指标。仅仅有指标还不够用,还需要通过指标构建一系列的健康模型与故障模型。当某些现象发生时,可以自动告警。当故障发生时,也可以通过模型快速找到诊断路径。

完成指标与模型后,就可以根据异常检测、基线等方法发现其中的异常,并且动态生成各种运营事件,并通过各种规则引擎和算法对这些事件进行联动分析,从而对系统进行十分全面的健康分析与隐患预警。

在金融、证券、互联网等企业中,平台型的应用系统的可观测性做得相对来说比较到位,而大多数传统企业的系统中,这方面是比较薄弱的。随着企业数字化转型的深入,关键的平台型应用会越来越多,其可靠性要求也越来越高,在系统中做好可观测性能力设计也就越来越重要了。

0