谷歌的服务为什么从来不会崩溃?
谷歌的服务为什么从来不会崩溃?
【中国经营网注】把开发和运维结合起来,乃至把运维融合到代码之中,谷歌以此来调和开发与运维之间的结构性冲突。本文来自钛媒体。
对于身处墙外以及自备科学上网技能的你,还记得上一次是什么时候,你想上谷歌搜索点什么结果网页崩溃了吗?
真相是,这个答案本身就不成立,因为谷歌似乎一直都在那里,从来没有宕机过,除非你连不上网。而除了搜索引擎,谷歌提供的各种线上服务,无论是Gmail、Google Docs还是其他,都似乎是同样地稳定可靠。根据谷歌提供的统计数字,在2015全年99.97%的时间里,你都能畅通无阻地使用包括Gmail和Docs在内的全套谷歌应用。
似乎全世界的用户都对此习以为常,但这完全称得上是非常了不起的成绩,只是使用谷歌的我们很少会去思考,这家公司是怎样把“奇迹”变成日常的。
谷歌只用了短短三个词来解释:网站可靠性管理(Site Reliability Engineering,简称SRE)。
听起来没什么厉害的,但谷歌在十几年前就提出了这一影响深远的设想。这种管理哲学其实意蕴深厚且适用范围广泛,简而言之,可以归结为这么一个中心思想:
不要让擅长管理网络服务的IT人员来管理你司的网络服务。让编写软件的程序员自己来管理。
这么做的话,程序员就会自己开发有助于程序运作的工具,而不需要其他人另外花力气找bug。
“我们期待着有朝一日,不需要人进行任何管理。”
——TODD UNDERWOOD,谷歌网站可靠性主管
谷歌工程副总裁Ben Treynor Sloss在新近的一篇文章里写到:“我们的方法呈现出来的效果是,整个团队的成员都会对手动执行任务很快地产生厌倦,也因此都掌握了编写程序的能力来代替之前的手动操作。”
对许多硅谷中的人来说,这并不算什么新鲜的观点。或者这么说,从亚马逊到Box.com,整个科技界基本上都是这么干的。人们称之为DevOps,即开发(development)和运维(operation)的合并,整合编程人员的技术与系统管理员的目标。不过,这场DevOps运动的发展虽然源自谷歌内部的SRE管理体系和亚马逊内部类似的管理原则,但也大有不同并自成一体。只是谷歌一直都秘而不宣,就像人们好奇谷歌高效的线上运维是怎么实现的时候,他们还是保持低调行事。
但谷歌已经进入了新时期,现在的它比以前更愿意对这类话题开门见山展开讨论,很大一部分原因在于谷歌想借此推广自家的云服务,以引进更多外部的公司,在谷歌的数据和机器网络之上运行他们的软件,甚至还出了一本专门论述SRE内功心法的书,就叫《网站可靠性管理》。
无论是科技业的从业人士还是圈子外的每一个小白,系统管理或曰运维都是计算机技术领域最无趣的一个方面,往往出了问题才会事后诸葛亮。然而,负责谷歌日常运作的副总裁Sloss可不这么认为。恰恰相反,他认为网站可靠性是“任何一款产品最基础的特性”,毕竟“如果没人能用得上,这个系统就毫无用处。”
从无到有的SRE
Sloss算是这场SRE运动的“发起人”。一开始,谷歌把他招进来负责运维,正是他后来提出了SRE这个词。“SRE就是你让一个软件工程师去设计一个运维团队,”他说,“我假设自己就是一个SRE系统,并按着那样的方式来设计并管理我的团队。”
而对Todd Underwood来说,公司聘请Sloss这样的程序员是再自然不过的事。他向《连线》杂志表示,“当谷歌还处于创业阶段的时候,其实还有很多其他的优秀软件工程师,他们更清楚问题可能以怎样的形式出现,也更明白整个工程该怎么做好。但没有人真的想去亲手落实。”
这是非常“谷歌”的一种现象。配置管理工具Chef的首席技术官Adam Jacob非常同意Underwood的看法并解释道,当线上的运营成长到足够大的体量时,这是一种意料之中的转型。“把软件开发和实际运营结合起来,乃至让二者密不可分,这是很自然要讨论的问题。全面地看问题才能有更好的产出。”
若联想到开发和运维原本是两个“死对头”,这种转型就显得格外有趣了。开发团队希望开发新软件,并尽可能快地让公众得到不同的体验,但运维人员更希望确保万事俱备、毫无差错,最好的办法就是尽可能减少变化。