挑战
过去几年,为全球旅游业提供 IT 解决方案的 Amadeus 发现自己需要一个新的平台来支持其面向服务的架构 (service-oriented architecture) 中的 5,000 项服务。这家拥有 30 年历史的公司在德国运营着自己的数据中心,内部和外部对其解决方案的要求不断增长,这些解决方案需要地理上分散部署。更普遍地说,“我们的目标是实现更高的可用性 (highly available),” Amadeus 分布式系统高级专家 Eric Mountain 说。公司的目标包括:提高基础设施管理的自动化水平,优化工作负载分布,更高效地使用数据中心资源,以及更轻松地采用新技术。
解决方案
Mountain 一直在监督公司向 Kubernetes 的迁移,使用的是 OpenShift Container Platform,Red Hat 的企业级容器平台 (enterprise container platform)。
成果
团队在 Kubernetes 中部署的首批项目之一是 Amadeus 航空公司云可用性解决方案 (Amadeus Airline Cloud Availability solution),它有助于管理不断增长的航班搜索量。“它现在在生产环境中每秒处理数千笔事务 (transactions per second),并且已部署在全球多个数据中心,” Mountain 说。“这不是现有工作负载的迁移;这是一个全新的工作负载 (workload),否则我们不可能实现。[这个平台] 为我们提供了以前没有的市场机会 (market opportunities)。”
回想当年,他负责了公司从 Unix 迁移到 Linux 的工作,现在他正监督着迈向云原生 (cloud native) 的旅程。“技术不断变化,我们欣然接受,”他说。“今年我们庆祝公司成立 30 周年,我们将继续发展和创新,以保持成本效益 (cost-efficient),提升所有人的旅行体验,同时不中断依赖我们技术的客户的工作流程。”
这就是 Amadeus(为全球旅游业提供 IT 解决方案,涵盖航班搜索、酒店预订和客户反馈等)在 2014 年面临的挑战。技术团队意识到,他们需要一个新的平台来支持其面向服务的架构中的 5,000 项服务。
转折点出现在他们开始收到大量内部和外部请求时,这些请求要求解决方案在地理上部署在公司位于德国的主要数据中心之外。“有些请求是希望在客户本地部署我们的应用程序,” Mountain 说。“我们也在考虑提供一些新的服务,这些服务要求响应时间达到几百毫秒级别,这是跨大西洋流量无法实现的。或者至少,如果不占用我们应用程序处理单个查询可用的大部分时间,也无法实现。”
更普遍地说,公司有兴趣提高高可用性水平,增加基础设施管理的自动化程度,优化工作负载的分布,并更高效地使用数据中心资源。“我们有成千上万台服务器,” Mountain 说。“这些服务器被分配了角色,因此即使配置高度自动化,机器仍然有一个固定的角色。这在很多层面都是浪费。”例如,应用程序不一定能非常优化地使用机器。虚拟化能帮一点忙,但它不是万能药。如果那台机器坏了,你仍然想修复它,因为它有那个角色,你不能简单地说,“好吧,我拿另一台机器来,给它那个角色。”这不快。这不高效。所以我们想要更高层次的自动化。
虽然主要使用 C++ 和 Java,Amadeus 也希望能够更轻松地采用新技术。他说,一些开发人员已经开始使用像 Python 这样的语言和像 Couchbase 这样的数据库,但 Mountain 希望有更多选择,“以便更好地根据我们提供的产品调整我们的技术解决方案,并为我们的开发人员开启全新的可能性。”使用最新的技术和新颖的事物也能更容易地吸引新人才。
所有这些需求促使 Mountain 和他的团队寻找新的平台。他说:“我们在相当短的时间内进行了一系列研究和概念验证 (proofs of concept),考虑了很多技术。”“最后,我们剩下三个选择:完全在本地构建 (on premise),在我们看来 Kubernetes 缺少什么就在其之上构建什么,或者选择 OpenShift,然后在那里构建剩余的部分。”
团队决定不自己构建一切——尽管他们过去做过类似的事情——因为“人们已经发明了看起来不错的东西,” Mountain 说。
最终,他们选择了 OpenShift Container Platform,Red Hat 基于 Kubernetes 的企业级产品 (enterprise offering),而不是在 Kubernetes 之上自行构建,因为“我们想要的东西与 Red Hat 预期 OpenShift 的发展方向之间有很多协同效应 (synergy),” Mountain 说。“他们显然在开发 Kubernetes,并且在 OpenShift 中提前开发了一些对我们很重要的东西,比如更强的安全性。”
希望这些特定的功能最终会内置到 Kubernetes 中,就安全性而言,Mountain 觉得这已经实现了。“我们意识到,总会有一定程度的自动化 (automation) 是我们可能不得不自己开发来弥补某些不足 (gaps) 的,” Mountain 说。“我们自己做得越少,对我们就越有利。我们希望,如果我们在别人构建的基础上进行开发,我们所做的工作实际上可以向上游贡献 (upstream-able)。随着 Kubernetes 和 OpenShift 的发展,我们看到我们确实能够移除一些为了弥补早期发现的不足而实现的额外层 (additional layers)。”
团队着手的第一个项目是他们知道必须在德国数据中心之外运行的项目。Mountain 说,由于项目的需求,“我们不能仅仅依赖内置的 Kubernetes 服务发现 (service discovery);我们必须在其之上再增加一层服务发现,以便在我们的系统内部的操作层面实现负载均衡 (load balance)。”他们还构建了一个专门用于监控 (monitoring) 的流程,当时 Kubernetes 或 OpenShift 生态系统还没有提供这个功能。Mountain 说,既然 Prometheus 和其他产品已经可用,公司可能会重新评估他们的监控系统:“我们显然总是乐于利用 Kubernetes 和 OpenShift 能够提供的功能。”
第二个项目反而首先投入生产:Amadeus 航空公司云可用性解决方案,它有助于管理不断增长的航班搜索量,并部署在公有云 (public cloud) 中。Mountain 说,该解决方案于 2016 年初启动,现在“在生产环境中每秒处理数千笔事务,并且已部署在全球多个数据中心。”“这不是现有工作负载的迁移;这是一个全新的工作负载,否则我们不可能实现。[这个平台] 为我们提供了以前没有的市场机会。”
经历过不止一次这样的技术演进,Mountain 对如何处理文化变革 (cultural changes) 有一些建议。他说:“这是一个我们可以逐步解决的方面。”“我们必须继续为客户提供现有产品的新功能,并且必须保持现有产品的正常运行。所以我们不可能一天之内做完所有事情。我们也不能那样宣传。”
那么,首要任务是选择一两个应用程序来证明这项技术可行。Mountain 的团队没有选择高影响、高风险的项目,而是选择了一个复杂性能够代表公司所有其他应用程序的小型应用程序:“我们只是确保选择一个足够复杂的项目,然后证明它是可以做到的。”
接下来是说服人们。Mountain 说:“在运维团队 (operations side) 和研发团队 (R&D side),有些人会理所当然地说,‘系统运行得好好的,为什么要改变?’”“真正能说服人们的唯一方法是向他们展示价值。”对 Amadeus 而言,人们意识到现有的系统无法将航空公司云可用性产品部署到公有云上。他说,问题就变成了:“我们是否要进行全面的迁移 (migration)?这是否合理?”
他说:“归根结底,我们想要这些多数据中心能力 (multi-data center capabilities),而且我们的主流系统 (mainstream system) 也需要这些能力。”“我们认为以前的系统无法实现这些。我们需要 Kubernetes 和 OpenShift 带来的新自动化 (automation)、同质性 (homogeneity) 和规模 (scale)。”
那么,如何让所有人都支持呢?他说:“确保你的研发团队 (R&D) 和运维团队 (operations) 之间有良好的沟通。”“还要确保尽早与投资者 (investors) 和利益相关者 (stakeholders) 沟通。弄清楚他们对你有什么期望,什么能说服他们或不能说服他们,证明这是公司正确的方向。”
他的另一个建议是:简单地让人们可以尝试这项技术。他指出:“Kubernetes 和 OpenShift Origin 是开源软件 (open source software),所以没有复杂的许可证密钥 (license key) 用于评估期 (evaluation period),你也不受 30 天的限制。” 除此之外,他补充道:“你必须准备好重新思考做事的方式。当然,让你的应用程序尽可能地云原生 (cloud native) 才能获得最大收益:12 因子 (12 factors),CI/CD,也就是持续集成 (continuous integration)、持续交付 (continuous delivery),还有持续部署 (continuous deployment)。”
当他们探索技术的这一方面时,Mountain 和他的团队很可能正在实践他向其他踏上云原生旅程的人所宣扬的理念。他说:“看看你把它弄坏会发生什么,因为了解系统的局限性很重要。”或者更确切地说,他指出,是它的优点。“在 Kube 上弄坏东西实际上是它的一大优点之一——它能自行恢复。这是你能看到你可能可以做事 (指系统能力) 的唯一真正方式。”