公司 Booking.com 地点 荷兰 行业 旅游

挑战

2016年,Booking.com 迁移到了 OpenShift 平台,这让产品开发者能够更快地访问基础设施。但由于 Kubernetes 对开发者进行了抽象,基础设施团队在遇到挑战时成为了“知识瓶颈”。尝试扩展这种支持是不可持续的。

解决方案

在运行 OpenShift 一年后,平台团队决定构建自己的原生 Kubernetes 平台,并要求开发者学习一些 Kubernetes 知识以便使用它。“这不是一个神奇的平台,”Booking.com B 平台技术方向首席开发者 Ben Tyler 说,“我们不声称你可以闭着眼睛使用它。开发者需要学习一些东西,我们将尽一切努力确保他们能够获得这些知识。”

影响

尽管存在学习曲线,新 Kubernetes 平台的采用率大幅提升。在使用容器之前,如果开发者了解 Puppet,创建新服务可能需要几天时间,如果他们不了解,则可能需要几周。在新平台上,最短只需10分钟。前8个月内,平台上构建了大约500个新服务。

Booking.com 在 Kubernetes 领域有着悠久的历史:2015年,该旅游平台的一个团队基于 Mesos 和 Marathon 构建了一个容器平台的原型。

该团队对其提供的技术印象深刻,但考虑到其规模(该网站平均每天处理超过150万间夜预订),需要企业级功能,因此决定采用 OpenShift 平台。

这个平台采用 Heroku 风格的高级 CLI 界面包装,“绝对受到我们产品开发者的欢迎,”Booking.com B 平台技术方向首席开发者 Ben Tyler 说。“我们让他们更快地访问基础设施。”

但是,他补充道,“无论什么时候,只要事情稍微偏离轨道,开发者就没有任何所需的知识来支持自己。”

在运行这个平台一年后,基础设施团队发现自己成为了“知识瓶颈”,他说。“大多数使用它的开发者不知道底层是 Kubernetes。应用程序故障和平台故障看起来都像是那个 Heroku 风格工具的故障。”

扩展必要的支持似乎不可行也不可持续,因此平台团队需要新的解决方案。他们在运营 OpenShift 平台期间获得的 Kubernetes 知识让他们有信心构建自己的原生 Kubernetes 平台,并根据公司需求进行定制。

"对于进入这个领域来说,OpenShift 绝对非常有帮助,”Booking.com B 平台技术方向高级系统管理员 Eduard Iacoboaia 说。“它向你展示这项技术能做什么,并让你轻松使用它。在使用一段时间后,我们意识到我们需要更好地学习 Kubernetes,以便充分利用它的潜力。那时,我们决定转向构建自己的 Kubernetes 平台。迈出这一步并投入时间获取这些知识,从长远来看我们肯定受益匪慢。”

Iacoboaia 的团队定制了很多 OpenShift 工具,以便它们在 Booking.com 运行,“那些集成点有点脆弱,”他说。“我们花了更多时间了解 Kubernetes 的所有组件,它们如何工作,以及它们之间如何互动。”这项研究促使团队从 OpenShift 内置的 Ansible playbooks 转向 Puppet 部署,这也被用于 Booking 其他基础设施。控制平面也从集群内部移到了裸金属上,因为公司运行着数万台裸金属服务器以及一个庞大的应用程序运行基础设施。(Booking 在多个数据中心和多个区域的多个集群中运行 Kubernetes。)“我们决定尽可能保持简单,同时使用我们最熟悉的工具,”Iacoboaia 说。

另一个重大变化是,产品工程师必须学习 Kubernetes 才能上手。“这不是一个神奇的平台,”Tyler 说。“我们不声称你可以闭着眼睛使用它。开发者需要学习一些东西,我们将尽一切努力确保他们能够获得这些知识。”这包括培训、博客文章、视频和 Udemy 课程。

尽管存在学习曲线,新 Kubernetes 平台的采用率大幅提升。“我认为我们能够成功达成这项交易的原因在于,我们没有要求他们学习专有应用程序系统,”Tyler 说。“我们要求他们学习开源的东西,其中的知识是可转移的。通过学习 Kubernetes,他们正在投资自己的职业生涯。”

一个明确的迹象表明这项策略取得了成功,那就是在支持渠道中,当用户提出问题时,其他产品工程师会主动介入解答。“我以前从未在公司内部看到过围绕特定平台产品有这种社区参与度,”Tyler 说。“可见,它在公司外部是一个生态系统标准,这很有帮助,因此人们认为投资于这些知识并与他人分享是有价值的,这非常非常强大。”

还有其他可量化的证据:在使用容器之前,如果开发者了解 Puppet,创建新服务可能需要几天时间,如果他们不了解,则可能需要几周。在新平台上,只需10分钟。“我们有一个教程。你跟着教程操作。你的代码就能运行了。然后,就可以进入业务逻辑开发时间了,”Tyler 说。“获取资源所需的时间大大减少了。”前8个月内,平台上构建了大约500个新服务,每天有数百次发布。

平台提供了不同的“契约层,可以说是这样,”Tyler 说。“最基础的是,它就是 Kubernetes。如果你是 Kubernetes 高级用户,这里有一个 Kubernetes API,就像你在 GKE 或 AKS 上获得的那样。我们正在努力成为同等水平的提供商。但我们在公司内部的全部工作是提供比原生基础设施更大的价值附加,所以我们为我们的主要技术栈 Perl 和 Java 提供了基础镜像。”

并且“随着我们的用户学习 Kubernetes 并成为更成熟的 Kubernetes 用户,他们向我们施压,要求我们提供更好、更原生的 Kubernetes 体验,这很棒,”Tyler 说。“这是一种非常健康的动态。”

该平台还包括其他 CNCF 技术,例如 Envoy、Helm 和 Prometheus。Booking.com 大多数关键服务流量通过 Envoy 路由,Prometheus 主要用于监控基础设施组件。Helm 作为打包标准使用。团队还开发并开源了 Shipper,它是 Kubernetes 的一个扩展,用于添加更复杂的发布策略和多集群编排。

当然,内部曾讨论过从头构建 Kubernetes 平台的明智性。“这并不是我们的核心竞争力——Kubernetes 和旅游,它们相差甚远,对吧?”Tyler 说。“但我们对 CNCF 组件进行了一些押注,这些组件对我们来说效果非常好。特别是 Envoy 和 Kubernetes,对我们的组织非常有益。我们能够定制它们,或者因为我们可以查看源代码,或者因为它们有扩展点,而且我们能够非常快速地从中获得价值,而无需改变内部的任何范式。”