挑战
Ancestry 是全球领先的家族史和消费基因组学公司,利用先进的工程技术和科技帮助世界各地的每个人探索自己的起源故事。30 多年来,该公司一直致力于创新和构建核心产品和技术,以激发真实而感人的情感共鸣。Ancestry 目前拥有超过 260 万付费订阅用户,保存有 200 亿份历史记录、9000 万份家谱,其 AncestryDNA 网络中有超过 400 万人,使其成为全球最大的消费基因组 DNA 网络。该公司热门网站 ancestry.com 早在大数据一词流行之前就已经开始处理海量数据。该网站构建在数百种服务、技术和传统的部署方法之上。Ancestry 软件工程师兼架构师 Paul MacKay 表示:“过去它运行良好,但在处理方面变得相当繁琐,而且非常耗时。作为一家主要的在线服务公司,我们不断寻找加快交付解决方案和产品的方法,以便更加敏捷。 ”
解决方案
该公司正在向云原生基础设施转型,使用 Docker 进行容器化,使用 Kubernetes 进行编排,并使用 Prometheus 进行集群监控。
成效
MacKay 说:“Ancestry 的每一款产品、我们做出的每一个决定,都致力于通过让客户发现关于自身和家人的私密、有时甚至改变人生的秘密,让他们感到惊喜。随着公司不断发展,使用 Kubernetes 带来的生产力提升帮助 Ancestry 更快地让客户获得新发现。例如,通过转向 Docker 容器化,部署一段新代码的时间从 20 到 50 分钟缩短到大部分代码只需不到一分钟。除了云原生和 Kubernetes 类技术提供的各种功能和优势外,我们确实节省了大量时间。”
自十年前推出以来,“摇动叶子”图标已成为 Ancestry 的标志性功能之一,它向用户发出信号,表明有可以用来了解更多关于您的家谱的有用提示。
因此,当公司决定开始将其基础设施迁移到云原生技术时,第一个在 Kubernetes(用于在主机集群上管理应用容器的开源平台)上启动的服务就是这个提示系统。可以把它想象成亚马逊的推荐商品,但公司推荐的不是商品,而是记录、故事或家族联系。Ancestry 软件工程师兼架构师 Paul MacKay 说:“这是网站非常重要的一部分,但同时也足够小,可以作为一个试点项目,我们知道可以用非常合适、安全的方式来处理它。”
MacKay 补充道:“当它在 2016 年初顺利上线时,我们这项服务的部署时间确实从 50 分钟缩短到了 2 到 5 分钟。开发团队非常高兴,因为我们专注于为客户提供卓越的体验。这意味着功能、稳定性以及一流运营所需的一切。”
“摇动叶子”的稳定性是 MacKay 及其团队的一个信号,表明他们拥抱云原生技术的决定对公司来说是正确的。Ancestry 拥有自己的私有数据中心,网站(于 1996 年推出)构建在数百种服务、技术和传统的部署方法之上。MacKay 说:“过去它运行良好,但遗留系统的总和在处理方面变得相当繁琐,而且非常耗时。我们正在寻找其他方法来加快交付解决方案和产品,以便更加敏捷。”
这一需求促使他们在 2015 年探索容器化。Ancestry 工程师此前一直在 Linux 上使用 Java 和 Python 等技术,因此部分决策是为了让基础设施更加 Linux 友好。他们很快决定采用 Docker 进行容器化,但 MacKay 说:“要真正实现它,总是归结于编排部分。”
他的团队考察了 Docker Compose、Mesos 和 OpenStack 提供的编排平台,甚至开始原型化一些自研解决方案。然后他们开始听到 Kubernetes v1.0 即将发布的传闻。他说:“最重要的是,我们正在考虑 secret store (秘钥存储),这样我们就无需自己管理所有这些东西,还有 config maps (配置映射),以及无缝部署策略的方法。我们发现 Kubernetes 在处理其资源、类型、标签和界面方面比我们见过的其他东西都要先进得多。功能上非常契合。”
这并不是说采用新技术没有带来一些挑战。MacKay 说:“改变是困难的。不是因为技术本身困难或技术不好。只是因为人们喜欢按照以前的方式做事。有早期采用者,也有后来者。这对双方来说都是一个学习过程。”
找出最适合 Ancestry 的部署操作是采用云原生基础设施所需工作的重要部分。MacKay 说:“我们希望确保流程简单,同时以允许我们达到我们和客户所要求的最高安全级别的方式进行控制。对于 Kubernetes 和其他产品,有一些好的解决方案,但需要一些‘粘合剂’将其融入公司流程和治理体系中。这就像拥有一副通用的手套,但当您真正想抓住某样东西时,您必须将其定制化,使其适合您。这就是我们必须做的。”
他们的最佳实践包括允许开发人员部署到开发阶段和生产环境,但随后控制需要治理和审计的方面,例如 secrets (秘钥)。他们发现每个服务有一个 namespace (命名空间) 对于实现 secrets (秘钥) 和 config maps (配置映射) 的隔离很有用。而对于他们的需求来说,每个 pod (容器组) 有一个容器使得管理更容易,并且拥有更小的部署单元。
随着该流程的建立,某些服务的部署时间缩短到不到一分钟。MacKay 说:“作为程序员,我们有 REPL:读取、评估、打印和循环 (read, evaluate, print, loop),但有了 Kubernetes,我们有了 CDEL:编译、部署、执行和循环 (compile, deploy, execute, loop)。这是一个非常快速的反馈循环,理解到我们的服务在生产环境中部署时与在预生产环境中测试时的版本一致,这是一大好处。云原生方法为 Ancestry 提供了更好的扩展能力,并能根据工作负载变化适应业务需求。”
Ancestry 在 Kubernetes 上首次部署提示系统的成功,为这项技术的更广泛采用创造了动力。MacKay 说:“工程师喜欢写代码,喜欢开发功能,他们不喜欢坐等部署,也不想担心如何横向或纵向扩展及缩减。过了一段时间,工程师们成为了我们的倡导者。在培训课程上,开发团队总是会说,‘Kubernetes 极大地节省了我们的时间;它是一个赋能者;它真是太不可思议了。’随着时间的推移,我们说服了管理层,让他们相信这是行业正在发生的转型,而我们需要参与其中。”
一年后,Ancestry 已将相当数量的应用迁移到 Kubernetes。MacKay 说:“我们的许多不同服务共同构成了网站在 DNA 和家谱方面的丰富环境。我们的集群中有前端堆栈、后端堆栈和后端处理类型的堆栈。”
公司继续权衡哪些服务将迁移到 Kubernetes,哪些将保持原样,以及哪些将在未来被替换从而无需迁移。MacKay 估计,公司“即将完成需要迁移的功能的一半”。我们不再需要做太多说服工作。现在更多是关于时间问题,需要让产品管理和工程人员获得他们所需的知识和信息。
展望未来,MacKay 认为 Ancestry 将在 2017 年最大限度地发挥 Kubernetes 的优势。他说:“到年底,我们非常有希望将所有应该或可以在 Linux 友好世界中的事物都迁移到 Kubernetes 中。”他补充说,他期待着目前正在开发中的 federation (联邦) 和 horizontal pod autoscaling (水平 Pod 自动扩缩容) 等功能。“Kubernetes 对我们来说非常棒,我们将继续顺应这股浪潮。”
他指出,这股浪潮与充满活力的 Kubernetes 社区息息相关,自 Ancestry 作为早期采用者加入以来,社区发展迅猛。MacKay 说:“这只是一个非常粗略的判断方法,但在 2015 年 6 月的 Slack 上,也许只有 500 人。我上次看的时候,仅在 Slack 频道上就有大约 8,500 人。现在有这么多大公司和不同类型的公司参与进来。贡献者的多样性、贡献者的数量,以及这个极具能力且友好的社区。”
尽管他和 Ancestry 的团队受益于他称之为社区中“许多人的善良和技术能力”,他们也贡献了关于最佳实践的信息,记录了 bug 问题,并参与了开源讨论。他们也一直积极参与 线下聚会,以帮助教育犹他州的本地技术社区并回馈社区。MacKay 说:“我们正在尝试通过分享经验来回馈社区,而不仅仅是代码。”
当他与考虑采用云原生基础设施的公司会面时,他根据 Ancestry 的 Kubernetes 之旅给出的最佳建议是:“从小处着手,但要解决困难的问题。”他说。并且,“你需要一位理解容器化愿景的‘赞助人’,来帮助你解决在需要变革时可能出现的政治及其他技术障碍。”
随着 MacKay 团队在过去一年半中主导的变革,云原生将在未来多年成为 Ancestry 技术谱系的一部分。MacKay 如此大力倡导这项技术,以至于他说人们曾开玩笑地指责他纹了 Kubernetes 纹身。
他笑着说:“我真没有。但我充满热情。我不局限于任何技术;我使用任何能够帮助我们变得卓越的东西。如果有别的东西,我也会用。但目前我坚信 Kubernetes。我相信容器化。我认为如果我们能够实现这一点并在这个领域站稳脚跟,我们将在敏捷性和我们谈论的所有其他方面取得更大的进展,并且会持续前进。”
他停顿了一下。他说:“所以,是的,我想你可以说我是 Kubernetes 的‘布道者’。但我不会去纹身!”