Google App引擎如何可靠地支持每天1千亿的请求?

站点可靠性工程(Site Reliability Engineering 简称SRE)是如何保证Google App Engine每天能够支持千亿级的请求调用?

站点可靠性工程是一系列工程目标与技术,能够让任何人运维更好的产品系统,它与DevOps理念一起拥有更广泛的IT社区用户,它很有趣因为它是一个相对直接更大规模地提升性能和可靠性的方法。对于任何公司都是有用的,SRE技术能够增加计算服务系统运维的有效性。

以下是对在Google从事了9年的SRE站点可靠性工程师 Chris Jones的采访,原文来自:
Google Cloud Platform Blog: Lessons from a Google

Q: Chris, 能告诉我在App Engine有多少SRE操作以及是怎样的一个规模?
CJ: 在App Engine上我们有数百万个App,每天服务超过千亿请求,这些都是由很多SRE支持的。

Q: SRE人员如此少,该怎么做?
CJ: SRE是一种工程目标,用来实现大规模分布式计算服务。 使得系统高标准是关键,这意味着所有系统工作都必须以彼此相似的方式运行,也就是说,只需要很少的人手就可以了,因为没有太多复杂性需要理解和处理。

自动化运维也很重要: 我们的turn-up处理过程是用于自动增加新容量或扩展自动负载平衡,这样我们就可以很好实现计算机的自动扩展,无需任何人工介入,因此不需要太多人。

如果你投入一个处理过程一个人力,那么这个处理工程是乏味重复,而使用自动处理,当遭遇错误时,计算响应失败的时间要比人工快得多,当通知我们出错时,计算机自己已经将流量导入到另外一个数据中心,继续保持服务启动和运行,人做自己擅长的事情,机器做它们擅长的事情。

Q: 在SRE模型后面是否有其他目标?
CJ: 因为有SRE团队工作于许多Google服务,我们能够跨产品扩展这些标准原理,SRE-built 工具原来用于部署Gmail的新版本,作为特例,需要扩展到适合其他地方的更普遍性上,这就意味着每个团队并不需要它们自己的部署升级方式了,这就能确保每个产品都能获得工具升级带来的好处,导致整个组织的工具越来越好。

另外,软件工程和系统工程两个知识都集合在SRE中,这将综合利用两者的优点,比如谷歌的软件网络负载平衡 Maglev,它是谷歌云负载平衡的基础技术。

Q: 这些方式如何影响App Engine和运行在App Engine上的客户应用?
CJ: 这里有一个很好的故事,在2013夏天我们将所有App引擎从美国一个地区迁移到另外一个地区,没有发生任何当机时间。

Q: 如何做到的?
CJ:我们关闭了一个App Engine集群, 按照设计要求,运行在这个集群上面的应用就自动迁移到剩下还在运行的集群上,我们提前在目标地区数据中心创建了美国地区的高复制数据存储(High Replication Datastore)的拷贝,这样这些应用数据就到了迁移的目标地区,迁移到新的数据存储几乎是实时的,以便符合时间一致性,当到时间启动新地区的App引擎时,应用会从备份的集群自动迁移到新地区的引擎上,并且数据也已经准备好,我们就这样重复这样的处理过程直至全部完成。

更高级的准备则是结合广泛的测试和因对意外的计划,当出现问题时,我们能处于就绪状态以便应对,从而对客户影响最小。我们会将所有的工序放在一个内部的验收步骤,这是SRE另外一个关键步骤,理解哪里出了错误,以及如何在将来解决它。

Q: Very cool. 如何能了解关于SRE更多情况?
CJ: Sure. 如果你有兴趣学习更多SRE,可以查看这个网站:https://landing.google.com/sre/,包括SREcon