GUI 时代的终结
我们不妨先来铺垫一下背景,看看围绕 GUI 及其在系统管理领域中所扮演角色的一些历史脉络。
在“远古时代”,我们在任何计算机上都没有图形用户界面,更不用说在我们的服务器上了。在 GUI 开始于最终用户设备上流行起来很久之后,服务器仍然没有 GUI。在 20 世纪 80 年代和 90 年代,相对于一台机器的总计算能力而言,生成一个 GUI 所需的计算开销是相当可观的,而用本就所剩无几的算力去生成一个 GUI 是相当不切实际的,往往即便不是完全不可能也相去不远。系统管理这一领域正是在这样的背景下成长起来的,人们之所以从命令行工作,是因为我们当时没有其他可用的选择。人们当时并不普遍渴望在系统管理中使用 GUI,也许是因为这个念头还没有在人们脑海中出现过。
在 20 世纪 90 年代中期,Microsoft 连同其他一些厂商,开始为入门级服务器市场引入由 GUI 驱动的系统管理这一理念。起初,这种做法并不怎么受欢迎,因为它与经验丰富的管理员在市场上的工作方式并不相符。但慢慢地,随着新一代 Windows 管理员、以及在某种程度上 Novell Netware 管理员开始“伴随”着对基于 GUI 的管理工具的使用而“成长”起来,这些系统在服务器市场中开始拥有了一席之地。在 20 世纪 90 年代中后期,UNIX 及其他非 Windows 服务器完全主导着市场。即便是 VMS 当时仍是重要的参与者,而在小型企业和商用服务器一侧,Novell Netware 在 90 年代中期是占主导地位的参与者,到了 90 年代末期仍然是一个非常有力的竞争者。Netware 提供了一种 GUI 体验,但那是一种非常轻量的体验,与 Windows NT 至迟在 1996 年所提供的丰富 GUI 体验相比,恐怕只能算是“半 GUI”——在某种程度上,NT 3.x 家族更早一些就已经提供了这种体验,尽管在 NT 4 发布之前,Windows NT 才刚刚开始在世界上找到自己的位置。
即便在当时,由 GUI 驱动的管理市场仍然主要是一潭无人问津的死水。Microsoft 和 Windows 在服务器一侧仍然没有什么举足轻重的地位,但已经开始通过小型企业市场打开局面,在那里,它们低成本、易于使用的产品很有道理。然而,真正促成了向 GUI 驱动型管理市场的显著增长与转变的,是 20 世纪 90 年代末由若干因素共同引发的恐慌与市场扩张:千年虫(Y2K)恐慌、互联网泡沫,以及 Microsoft 出色的产品开发与市场营销。
20 世纪 90 年代末 IT 市场的大规模扩张意味着,没有足够的时间或资源来培训新进入 IT 行业的人员。包括 Solaris 和 Netware 在内的许多系统,其学习曲线都非常陡峭,而行业所需的人员数量之庞大堪称史诗级,需要让这些人以快于当时现有平台所能实现的速度,从零成长为“能够胜任的 IT 专业人员”。市场增长呈爆炸式,在 IT 行业工作能赚到的钱如此之多,以至于根本没有可用的资源来切实有效地培训那些本应进入 IT 行业的新人——因为任何有资格承担教育职责的人,同样也能够在行业内工作而赚得多得多,远胜于从事教育工作。随着市场的增长,成熟、经验丰富的专业人员变得极为抢手,因为在整个不断扩张的领域中,他们变得越来越稀缺。
市场以许多方式回应了这一需求,但其中最重要的方式之一,便是从根本上改变了 IT 的处理方式。市场没有推动 IT 专业人员去攻克传统的学习曲线、培养出有效管理当时市面上那些系统所需的技能,而是改变了他们所使用的工具,以迁就经验更少、知识更欠缺的 IT 人员。更简单、往往也更昂贵的工具——通常带有 GUI 界面——开始充斥市场,使得那些训练和经验更少的人,即便此前从未见过某款产品,也至少能够几乎立即开始变得有用、有产出。
这一变化恰好与计算机硬件性能的自然进步相吻合。正是在这一时期,许多系统的性能首次达到这样一种水平:尽管 GUI 仍然对性能造成相当显著的影响,但支持人员成本的降低以及系统得以部署和管理的速度,通常足以抵消 GUI 所占用的这部分计算能力的损失。GUI 迅速成为各类系统的标准配置,而仅仅几年前,这些系统是绝不会配备 GUI 的。
为了提升这些新 IT 专业人员的能力并把他们火速推向市场,行业也在很大程度上转向了认证——这在当时多少算是一项新生事物——它使得新晋 IT 人士(往往毫无任何实际操作经验)能够确立某种程度的胜任资格,而且通常无需像大学课程那样,需要与现有 IT 专业人员进行任何实质性的互动或投入。基于 GUI 的管理市场以及认证产业双双蓬勃发展,IT 的面貌也随之发生了显著变化。
其结果当然是大量未经培训或仅受过少量培训的新 IT 专业人员以创纪录的速度涌入市场。在短期内,这一变化对行业是奏效的。这一领域以比原本可能实现的速度快上数年的进度,从严重人手不足走向了相对人手充足。但没过多久,这种对新人的急速吸纳所带来的代价便开始显现。
对行业最大的影响之一,是出现了一场全行业范围的“婴儿潮”,并伴随着随之而来的种种成长阵痛。整整一代 IT 专业人员是在 20 世纪 90 年代末那些训练营和速成“认证培训”项目中成长起来的。这造成了一种长期影响:那个时代常见的各种经验法则和通行做法往往被固化下来,几乎到了一种近乎宗教信仰的程度,而无论是更早还是更晚的做法都不会落到这种地步。由于教育往往进行得既快又浅,许多概念不得不靠死记硬背来掌握,而对其背后的基本原理却缺乏理解。随着“1998 届”这批人日后逐渐成长为各自公司里的资深 IT 专业人员,他们成了一代又一代新人的导师,而那种陈旧的死记硬背式学习,在此后的岁月里通过类似的做法非常明显地层层传递了下来——即便在相关知识早已过时或不切实际之后依然如此,而且在许多情况下,这些知识被以可预见的方式错误地解读,甚至对于其所诞生的那个时代而言也是错的。
那个时代所习得的内容中,有一部分是一种普遍的认同:GUI 不仅是可以接受的,而且是实用的、理所应当的。婴儿潮效应意味着来自前一时代的指导寥寥无几,先前确立的实践和规范往往被一扫而空。婴儿潮效应意味着,这个行业与其说是重塑了自身,不如说仅仅是为自身注入了大量投入。甚至连“信息技术”作为一个独立自成的行业这一概念本身,也正是在这场新旧交替之中确立了其当前的形态、并在公众意识中扎下根来。IT 不再是其他部门或学科的附庸,而是自成一体;但它在这样做的同时,缺少了若以更有机的方式成长本应具备的成熟积淀与实践延续,这或许使得这个行业所处的境地,比起它若以一种连贯的方式发展所能达到的境地还要更糟一些。
20 世纪 90 年代末 IT 繁荣所留下的影响,将在很长一段时间内持续被人感受到,因为要让那个时期的种种趋势、信念和假设最终被一扫而空,需要历经许多代人。慢慢地,新的概念和做法正在站稳脚跟,而这往往只有在旧技术消失、新技术被引入、从而打破了传统的桎梏之时才会发生。其中之一,便是关于“GUI 是完成系统管理的主导方式”这一观念。
正如我们之前所指出的,GUI 在其诞生之初,是区分旧系统与 20 世纪 90 年代末新世界的一个分水岭。但自那以后,GUI 管理工具在其可获得性上已变得无处不在。每一个重要的平台都拥有、而且早已长期拥有图形化的管理选项,因此 GUI 不再以任何显著的方式将某个平台区别开来。这意味着,不再有哪个厂商怀着明确的意图去推动 GUI 这一理念。GUI 的营销价值实际上已经消失。同样地,那些先前缺乏强大 GUI 的系统不仅几乎都开发出了 GUI(甚至不止一种),而且那些原本没有强大命令行工具的、基于 GUI 的系统也回过头来开发了命令行工具,并围绕它们发展出了新的专业生态。潮水千真万确地转了向。
不仅如此,在过去近二十年里,非 GUI 世界的那套主张已经开始深入人心。无论在哪个平台上,那些立足于精通命令行的系统管理员,通常都胜过他们的同行,从而获得更多的职业机会、更具挑战性的岗位以及更高的收入。专注于命令行管理的公司会发现,自己拥有技能更高的员工以及更高的管理密度,而这反过来又降低了总体成本。
仅凭这一点,就足以使 GUI 的地位开始动摇。但一直以来都有一个老论调:GUI 即便在 20 世纪 90 年代末,也只占用少量的系统资源,只增加极小的额外攻击面。即便不打算使用它,又何妨“以防万一”而把它装上呢?随着 CPU 越来越快、内存越来越大、存储越来越便宜,以及系统设计的不断改进,GUI 所造成的影响变得越来越小,于是这套“让 GUI 随时可用”的论调也就越发有力。尤其有力的,是这样一种提议:GUI 也能让初级人员去完成任务,从而使他们更加有用。但在这种情形下,资深人员往往把 GUI 当作拐杖一直依赖着,这种情况实在太过常见。
随着虚拟化在商用服务器领域的到来,这一切开始发生改变。GUI 的代价突然又变得引人注目了。一台运行二十个虚拟机的系统,相比单个 GUI 实例,会突然占用二十倍的 CPU 资源、二十倍的内存以及二十倍的存储容量。GUI 的占用又一次变得显眼起来。随着虚拟机密度开始攀升,GUI 的相对影响也随之上升。
虚拟化催生了云计算。云计算提高了虚拟机的部署密度,并暴露出 GUI 在性能上的其他影响,主要体现在更长的实例构建时间以及更为复杂的远程控制台访问上。需要 GUI 的系统,开始在采用率和能力上明显落后于它们没有 GUI 的同类。
但更为重大的因素,是云计算标准计费方式所带来的产物。由于云计算通常以一种原始、完全可见的方式呈现每个实例的成本,IT 部门便没有办法去蒙混或忽视 GUI 部署的成本,而这些部署所带来的额外开销往往甚至会令单个云实例的成本翻倍。财务部门会非常清楚地看到,GUI 系统的账单远高于它们没有 GUI 的同类。即便是非技术团队,也能看出 GUI 的成本正在累积——这还没把管理成本算进去。
随着我们朝着容器技术迈进,这一成本还在持续上升,因为单个实例的规模变得越来越小,而规模越小就意味着 GUI 的相对开销变得越发显著。
但真正的冲击——可能也是对围绕 GUI 驱动型系统的种种问题最大的一次暴露——是行业向 DevOps 系统自动化模式的转变。如今,只有相对一小部分公司正在积极转向完全云化、可弹性伸缩的 DevOps 系统管理模式,但这一趋势已经存在,而这种模式把 GUI 管理员及其系统彻底甩在了后面。在 DevOps 模式下,直接访问机器不再是一种标准的管理方式,系统比起单纯从命令行工作走得更远,已经发展到完全以代码来构建,这意味着在 DevOps 世界里工作的系统管理员,不仅需要在命令行层面与其系统交互,而且必须以编程的方式来进行。
市场正在迅速朝着如下方向发展:由更少、技能更高的系统管理员,去管理远比以往任何时代都多得多的“每位管理员所辖”的服务器。“单个系统管理员只能管理区区几十台服务器”这一在 GUI 世界中常见的看法,即便在传统的“雪花式”命令行系统管理中也早已受到挑战,相应数字轻松攀升至数百台之多。而 DevOps 模式或类似的自动化模式,则把这些数字推向了每位管理员数千台服务器。GUI 的开销正变得越来越显而易见。
随着云、容器和 DevOps 自动化模式等新技术变得无处不在,工作负载的自然“蔓延”也随之而来。这意味着,各种规模的公司都在见证需要管理的工作负载数量的增加。那些传统上只有两三台服务器的公司,如今可能拥有十个或二十个虚拟实例!只需要一两个虚拟机的公司数量正在日益减少。
这一切几乎并不意味着 GUI 管理会在不久的将来、甚或遥远的将来消失。对“一次性”系统管理的需求将会一直存在。但是,能够以 GUI 管理这种“一次性”方式工作的管理员,与那些需要通过命令行、尤其是通过脚本化乃至完全自动化的系统(诸如 Puppet、Chef、Ansible)来工作的管理员,二者之间的比例,已经在以惊人的速度迅速倒向非 GUI 系统管理与 DevOps 实践这一边。
这一切对身处现实世界第一线的我们意味着什么呢?它意味着,即便是那些传统上很少乃至无需在命令行下工作的岗位,例如小型企业的 Windows 管理,也需要重新审视我们工作中对本地服务器 GUI 的依赖。命令行工具和流程正变得日益强大、日益为人所熟知,并日益成为我们被期望采用的工作方式。在 UNIX 世界里,命令行始终得以保留,而需要依赖 GUI 工具几乎总是会被视为一项重大的短板。这一印象如今也开始适用于 Windows 世界。慢慢地,那些完全依赖 GUI 工具的人正被视为二等公民,并越来越多地被打发到更初级的岗位和更小的组织中去。
脚本与自动化工具的改进还意味着,规模所带来的价值正变得越来越好,以至于按每个工作负载来计算,管理少量服务器的成本正变得非常高昂,这意味着存在一种非常强烈的激励,促使较小的公司转向通过使用外部供应商来实现管理上的整合——这些供应商能够专精于大规模系统管理,并借助脚本和自动化技术,使其成本更趋近于大型企业的成本水平。随着时间推移,借助外部供应商来确立规模、或近似地达到某种规模的能力,对于较小的企业而言将非常重要,它能让这些企业在 IT 需求方面保持成本竞争力,同时仍然获得与大型企业如今开始体验到的同一种计算优势。
应当指出的是,与这场行业向命令行和自动化工具的转变同时发生的,还有向更现代、更强大、且以远程为主的 GUI 的迁移。这是一场远没有那么剧烈的转变,但也是一场不应被忽视的转变。诸如 Microsoft 的 RSAT 和 Server Administrator 之类的工具,提供了一种在底层利用命令行和 API 接口的 GUI 视图。同样地,Canonical 的 Ubuntu 世界如今也有了 Landscape。这些工具在企业级市场中不那么流行,但开始使更广大的 SMB 市场能够在管理更大规模的服务器实例集合的同时,仍然保持对 GUI 的依赖。这类 GUI 工具的进步,或许是全方位放缓命令行工具普及进程的最强力量。
无论我们感兴趣的,是把从命令行到 GUI、再回到命令行这一历程,当作信息技术作为一个行业的发展史中一个有趣的产物来看待;还是把这看作一种途径,借以理解系统管理作为一条职业道路或一种业务方法是如何演进的,以供我们自身所用——对我们而言,去体会促成这一切发生的种种因素,去体会为何行业的潮起潮落如今正再次把我们带回命令行的汪洋大海,都是大有裨益的。通过理解这些力量,我们便能更切实地评估未来将把我们引向何方、潮水何时可能再度转向、如何最好地经营我们自己的职业生涯,或者如何为我们的组织在技术与人才两方面做出抉择。

