最近一直看一些思想和概念性质的文章,略有感想,不敢私藏,愿分享之。

鄙人窃以为作为运维,不应该仅仅只是搬机器的,不应该仅仅只是排障救火的,也不应该仅仅只是去维护自己支持的应用而已,而更应该着眼于一些更高层次的东西,比如我所领悟的,考虑将企业的IT系统改造成一个由一台台机器设备组成的自运转的IT生态系统。

什么是IT生态系统?

所谓生态系统,在wiki的定义是:生态系统(Ecosystem)是指在一个特定环境内,其間的所有生物和此一环境的統稱。其中,值得一提的是,生态系统内的所有生物体应该是具有自然能量上的交互关系,而且相互之间能够形成一个有机的整体。

那么,让我们再来回顾下IT技术的发展过程,就机器的资源分配技术而言,从最早的大型机——X86物理机——虚拟机——Docker容器,正是一个不断将物理资源抽象的过程,下面鄙人借用代码的方式描述一下IT生态系统的抽象定义~

var Machines = "土地资源";
var Networks = "风、水、阳光等流动性资源";

/*
  这里可能会造成一些困惑;
  为什么OS代表自然界法则?
  实际上也容易理解,OS即完成一些资源的调度;
  而这在自然界的体现便是一些常识性的自然规律;
  比如水的流动,土地的演变,树木的生长;
  一切的迭代变换都是遵循自然界的普遍规律自然而然的运转;
  
  相应的,OS承载的应用便是一个个的生物体,它们只能通过特定的自然规律去摄取大自然的营
  养,正如应用只能直接或间接地通过OS(或者类似的存在,诸如数据库这样的系统应用其实也要
  通过一个中间层来消费硬件资源)来消费计算、缓存、网络等资源那样。
*/
var APP = "生物体";

function OS(){
	//代表自然规律;
    //调度自然界的资源;
}

//大家应该想到了,其实这上述的代码应该用class nature{ ... } 来包含的,现实世界便是这样class的一个实例。
//Ps. 这便是面向对象的魅力所在吧 :)

The Key: Orchestration & Configmanagement(流程编排 & 配置管理)

好吧,上面一节提到了IT生态系统的抽象概念,那么有了这个概念之后,再尝试谈些具象的东西吧。实现IT生态系统的基石是什么? 鄙人认为是Infrastructure!

所谓的Infrastructure包含对服务资源的池化管理(不仅仅是服务器,也可以是Memcached,MySQLDB等资源)、服务的注册和管理(Etcd的概念?)以及这里需要谈及的Orchestration & Configmanagement。

Configmanagement即配置管理,通俗讲,就是按照所定义的那样使得一台设备处于某种特定的配置状态。本来也想写点个人的见解,但是由于这块涉及很多具体的技术细节,而且网络上存在很多技术先驱分享的见解,暂且这里先跳过。

再说orchestration,顾名思义,便是一个流程的编排,一般来说是和配置管理相对独立而又紧密结合的一个概念。鄙人依稀记得在某个技术博客网站上看到这样的话:“Almost everyone tried to setup its own orchestration system.”(Ps. 不大记得原话了,大致是这个意思..)

那么, 根据鄙人个人理解,Orchestration用通俗的话讲,便是“编排一个做事的流程,做好一件事情并且可以追溯和回滚”,具体的,Orchestration又可以分为三块:

  • 对IT服务请求处理(上线申请机器、申请各种权限、申请各种组件的服务、etc..)的流程编排;
  • 对IT组件变更处理(集群的迁移、机器的扩容等变更性操作)的流程编排;
  • 对IT故障事件处理(突发的集群节点故障、硬件故障、网络故障等)的流程编排;

其中,服务请求和组件变更应该是最容易实现自动化的(也即是近些年来大多数企业运维自动化的主要着力点),因为它们很多时候具有普遍的重复性和可API化的特点。

那么,问题来了…… 实现自动化能改变什么?

实际上,鄙人认为,自动化便是由人去拨动Orchestration的发起点,而后面的事情,由机器之间的自主交互完成,换句话说,从“生态系统”的视角来看,不正是让生态系统内的各个生物体充分建立交互关系,从而使得他们相互成一个生态平衡吗? 在这里面,运维充当的角色是“造物主”,是掌控生物体命运起点和终点的全能的“上帝”。

实例——建立应用数据流向可视化的构想

尝试把每台机器看做live的生命体,把整个IT系统看做是一个由人推动运转的生态系统,也许可以有诸多的创意和灵感迸发。

鄙人最近有所感悟的一个idea便是:尝试抓取某个机器或者某个应用的对应数据流向(网络层面或者OS层面,Whatever),并从而建立一个对应数据流向的示意图。(用生态系统的角度解读,便是探寻一个生物体的活动范围和影响对象)

举例来说,鄙人搭建了一个Tomcat Web应用,它对外提供服务,并将一些数据通过网络吐到后台的其他组件用作数据库存档以及数据分析,那么通过建立一个机制,探索这个应用本身的数据流向,确定其流入源、流出源等,便可以解答以下几个问题:

  • 该应用停止服务会对整个IT系统产生何种变化和影响? (通过上下游的连锁探寻,便可以确定应用当机的波及范围和大致影响)
  • 该应用在整个IT系统中所处的位置? (据此,来评估该应用的weight,也即是对整个IT系统的重要程度)

进一步——建立整个企业IT系统的可视化

进一步的,假使我们已经对IT系统内部的全部组件均做到了数据流向可视化,那么描绘出整个IT系统的架构图便不再是梦,这也即是描绘出整个生态系统的“社交关系网”。(用社交也许不大恰当? 哈哈)

这其实存在一个显而易见的好处,那便是:

对整体架构的直观展示 & 考量 & 反思

而且,我们可以和Orchestration System结合起来,每次流程编排的动作对整个体系产生的震荡理论上来说都可以记载下来(生物体命运轨迹的描绘?)。

理想化的机器世界

To be continue..

个人的感想

实际上,现实世界才是我们最值得学习的对象,有人说,艺术源于生活,而又高于生活,我觉得,科技也是如此。飞机也好,计算机也好,一切一切的发明与创造都是源自对伟大的自然世界的发掘和学习。

感恩生活!