高维度生物的系统运维 3月01

Tags

Related Posts

高维度生物的系统运维

花了几天时间一口气读完了刘慈欣《三体》三部曲以及加来道雄的《平行宇宙》,对其中关于高维度宇宙的描述很是印象深刻。

根据弦论以及两本书里的描述:我们所处的宇宙可能是9+1维时空中的D3膜,从高维度世界去观察低维度世界,可以获得全面、清晰的全景视图,所有低维度世界的信息在高维度面前都无法隐藏,被一览无遗。正如我们生活在第三维度世界中,如果去观察一个存在于平面上的第二维度世界,那么我们可以清晰地观察到这个世界里的每一条信息、每一个分子。因为在我们看来,二维世界的一切都是平铺在一张白纸上的,毫无疑问,我们只需瞄一眼,就可以准确掌握二维世界中我们所感兴趣的一切。

由此让我联想到我们的IT系统。如果我们每天面对、运维的IT系统是一个独立的世界,我们是否有机会可以获得更高维度的视角,来全面审视、评估这个世界的一切?我们能否像高维度的生物去审视低维度世界一般,来审视我们的IT系统?如果对于我们的IT系统,我们真的能站在更高的维度去运维、管理它,岂不是令人非常愉快吗?

回顾IT系统运维发展的历史,在企业IT系统管理的早期,更侧重于对网络、服务器等设备的管理。管理员利用SNMP协议,来读取访问设备上的MIB,以达到设备运行状态可视化的效果。如此一来,我们所得到的运维视角,便是一个个的“点”,每一个“点”即代表独立运行的一台设备,这些设备之间存在连接关系,但却没有被关联起来。这种运维视角像是一张二维视图,假如我们的IT系统是一个三维系统,二维视图只能反映出IT系统全景的一个“面”,我们只能通过这张视图窥探到系统基础架构独立的运行情况,但实际上远没有获得系统的全景立体视图。

二维的运维方式无疑为我们的系统运维增加了一个有效手段,通过基于SNMP的管理软件,我们可以窥探到我们的IT系统中一个个点的运行情况,并把这些点形成单独的二维“面”,让我们不至于对我们的IT系统运行状态一无所知。但是,对于一个三维的IT系统而言,仅仅获得它的二维视角,是不能完全准确地了解其整体的运行细节的。这就好比我们从单一的角度去观察一个三维物体,任何时候我们都只能看到它的一个单一“面”,对于IT系统运维而言,二维的管理方式让我们一直凝视系统的一个“面”,而这个“面”就包含了这个系统里每个“点”的内存、CPU、磁盘使用情况信息,然而系统的背面是什么,内部在运行什么、做什么操作,我们一无所知。

日复一日,我们发现二维的IT系统运维方式不能完全满足我们的需求,一个个独立点形成的“面”过于单一,我们活动在这个单一的“面”上,简直就像是一个二维生物,要运维我们三维的IT系统,只能望洋兴叹。

于是,我们开始寻找能看到IT系统另外几个“面”的方法,通过各个“面”的组合,来帮助我们建立一个完整的三维视图,站在系统的同一个维度来对它进行观测。第一种方法是深入地挖掘每个“点”的信息,以形成一个更详细的“面”,来让我们获得IT系统的更多信息。这种方式包括代码植入,或是在主机上安装Agent等多种方式,通过这些方式,我们可以更深入地了解每个“点”:应用代码在主机上的运行情况,应用进程占用系统资源的情况,应用日志中是否出现Error、Warn等错误信息等等。看起来我们获得了一个新的“面”、新的视角。然而,这个“面”只是在原有二维面的基础上进行了加强,我们似乎还是没有把系统的全貌描绘出来,而只是在原有的“面”上,把每个“点”的信息补充了一番,各个点的关联性没有被体现出来,我们还没有完成从“点”到“面”再到全局的升华,这种IT系统的运维方式似乎还不是真正的三维视角。

第二种方式是基于网络流量的性能分析,我们在原有关注IT系统中每个“点”管理方式的基础上,开始关注连接每个“点”的“线”。通过分析网络数据包的交互方式,我们可以分析“点”之间相互通信的情况,了解“点”之间的通信是否正常高效,了解这些连接的“线”是否处于存在异常。如此一来,我们获得了全新信息的“面”,加上原有的一个“面”,一个“面”由“点”的信息组成,而新的“面”则由“线”的信息组成。有了两个各自独立的“面”,我们开始拥有了三维的视角:我们不仅可以了解IT系统中每个“点”独立的运行状态,还可以给这些“点”建立起关联,了解它们协同工作的状态,了解连接它们的“线”的情况。

基于网络流量的性能分析还解决了另外一个问题:假如我们把“时间”作为IT系统的第四维度,那么基于网络流量的性能分析便使我们一下跨入到了四维时代。这是因为,无论是基于SNMP的基础管理工具,还是代码植入、安装Agent的管理方式,都存在时间精确度的问题。SNMP基础管理工具的通常运行方式是每隔一段特定的时间读取一遍设备的MIB库,从而获得主机的运行信息,信息的准确性取决于时间间隔,也就是采样频率越高,所获得的信息才能越准确;而代码植入、安装Agent的方式,其时间维度问题则有两方面,一是依赖代码或Agent程序记录事件的频率,二是事件信息时间戳的精准度(事件时间戳精度往往只有秒级甚至分钟级,同时要保证时间戳的准确性,还需保证所有主机的系统时间高度同步)。而基于网络流量的性能分析在处理时间维度的问题上则显得严谨得多。首先是流量的实时同步采集,保证了信息的完整性,所有的系统通信流量都是被全时地采集下来,这解决了SNMP基础管理工具的数据采样频率问题;而数据包由于都是由流量采集系统统一打上时间戳,精度往往可以达到毫秒级以上,这又解决了代码植入、安装Agent方式的时间戳精准度问题。可以说,基于网络流量的性能分析这种方式,使我们获得了时间维度的可视能力。

进一步,是否还有更高维度的运维手段?

前文提到,从高维度的空间去观察低维度的世界,将会获得全面的可视能力,低维度世界的所有信息在高维度生物的眼前显露无遗。假如IT系统是一个三维空间的事物,而我们希望能够对它获得高维度的视角,通过一些信息来对其整体运行状况进行判断,那么这些信息应该是什么?细想一下,IT系统最终都是为业务服务的,IT系统是为了支撑业务运行而存在的,那么我们运维的高维度视角,是否可以理解为业务视角?我们通过对IT系统的每个组件、环节进行监测,了解其实时的业务运维状况,了解其业务的成功率、延迟、响应率等业务信息,同时,当我们的业务出现异常时,我们还可以通过关联分析,迅速了解异常的环节。如此一来,我们便可以对IT系统的业务性能一目了然,我们在进行日常运维工作时,获得了更高维度的运维视角。

然而,如何实现?代码植入、安装Agent的方式似乎有机会完成,然而各类系统的复杂性及高度差异化使得这种方法变得无比艰辛:当我们的主机运行Linux系统,安装MQ中间件时,我们需要开发一套适用的植入代码或Agent程序;而当我们系统的另外一个环节使用了Windows系统,运行Tomcat的WEB服务,我们又需要开发另一套适用的植入代码或Agent程序。同时,这种方式还是无法解决时间维度的问题,如此一来,也无法保证更高维度信息的准确性。

基于网络流量的性能分析方式似乎提供了这种可能性。如今,IT系统通各个组件通过网络连接在一起,孤立于网络之外的独立自治系统已经基本不存在,网络流量贯穿全局,而网络流量中携带了大量业务信息,在保证时间维度准确性的基础上,网络数据报文上应用层中的高维度信息值得让我们好好深入开发和利用。网络报文采用了统一的TCP/IP模型,业务信息被封装在网络通信报文的应用层,通过一定的应用层协议规范进行排列组合。当我们理解了这些规则时,我们便可以报文的应用层数据中提取出我们所需要的业务数据,并将它们抽象成为几个具体的业务指标:业务量、成功率、响应时间、响应率、返回码,利用这些指标,我们不仅可以了解IT系统各个组件实时的业务运行情况,还可以通过关联分析,了解系统性能瓶颈,快速定位异常环节。如此一来,站在更高的业务层面,对运行于IT系统之上的业务信息一目了然,我们便获得了更高维度的系统运维视角。

也许,在我们现在所处的三维宇宙中,我们没有机会成为一名来自高维度宇宙的Super Hero,但在面对我们的IT系统,我们的运维工作时,我们却完全有机会发挥我们丰富的想象力,充分利用我们已有的丰富资源,成为一个拥有高维度运维视角的Super Engineer。

——By Peter