挑战
AppDirect 为基于云的 产品和服务提供端到端的商业平台。 软件开发总监 Pierre-Alexandre Lacerte 在 2014 年开始在那里工作时,该公司有一个部署在“tomcat 基础设施”上的单体应用程序,他说:“整个发布过程对于它应该做的事情来说太复杂了。 涉及许多手动步骤,一个工程师构建一个特性,然后另一个团队接手更改。 因此,在将特性发布到生产环境的流程中存在很多瓶颈。” 同时,工程团队也在不断壮大,公司意识到需要更好的基础设施来支持这种增长并提高速度。
解决方案
Lacerte 说:“我的想法是:让我们创建一个环境,让团队能够更快地部署其服务,他们会说,‘好吧,我不想再在单体应用程序中构建了,我想构建一个服务。’” 他们考虑并原型化了几种不同的技术,然后决定在 2016 年初采用 Kubernetes。 Lacerte 的团队还将 Prometheus 监控集成到平台中;接下来是跟踪。 如今,AppDirect 在全球拥有超过 50 个生产环境中的微服务和 15 个 Kubernetes 集群,这些集群部署在 AWS 和内部。
影响
Kubernetes 平台帮助支持了工程团队在过去几年中 10 倍的增长。 考虑到他们一直在不断添加新特性,Lacerte 说:“我认为,如果没有这个新的基础设施,我们的速度会大大降低。” 迁移到 Kubernetes 和服务意味着部署速度大幅加快,因为减少了对使用 SCP 命令的定制、脆弱的 shell 脚本的依赖。 部署新版本的 时间已从 4 小时缩短到几分钟。 此外,公司投入了大量精力来使开发者能够自助服务。 Lacerte 说:“引入新服务不需要 Jira 票证或与三个不同的团队会面。” 如今,该公司每周有 1600 次部署,而之前只有 1-30 次。 公司还通过将其市场和计费单体应用程序从遗留 EC2 主机迁移到 Kubernetes,以及利用自动缩放来节省成本,因为在工作时间内流量较高。
软件开发总监 Pierre-Alexandre Lacerte 在 2014 年开始在那里工作时,该公司有一个部署在“tomcat 基础设施”上的单体应用程序,他说:“整个发布过程对于它应该做的事情来说太复杂了。 涉及许多手动步骤,一个工程师构建一个特性,然后创建一个拉取请求,QA 或另一个工程师验证该特性。 然后它被合并,其他人会负责部署。 因此,在将特性发布到生产环境的流程中存在很多瓶颈。”
与此同时,由 40 人组成的工程团队正在不断壮大,公司希望为其产品添加更多特性。 作为平台团队的一员,Lacerte 开始从多个团队那里听到,他们希望使用不同的框架和语言部署应用程序,从 Node.js 到 Spring Boot Java。 他很快意识到,为了支持增长并提高速度,公司需要更好的基础设施,以及一个团队能够自主、进行自己的部署并负责生产环境中服务的系统。
Lacerte 说,从一开始,“我的想法是:让我们创建一个环境,让团队能够更快地部署其服务,他们会说,‘好吧,我不想再在单体应用程序中构建了,我想构建一个服务。’” (Lacerte 在 2019 年离开了公司。)
Lacerte 的团队与运营团队合作,获得了更多对公司 AWS 基础设施 的控制权和访问权,并开始原型化了几种编排技术。 他说:“那时候,Kubernetes 还处于地下,鲜为人知。 但我们查看了社区、拉取请求的数量、GitHub 上的速度,我们发现它正在获得牵引力。 我们发现它比其他技术更容易管理。”
他们使用 Chef 和 Terraform 配置在 Kubernetes 上启动了前几个服务,随着添加更多服务,也增加了更多自动化。 Lacerte 说:“我们在世界各地都有集群——在韩国、澳大利亚、德国和美国。 自动化对我们来说至关重要。” 他们现在主要使用 Kops,并且正在考虑使用几个云提供商提供的托管 Kubernetes 产品。
如今,虽然单体应用程序仍然存在,但提交和特性越来越少。 现在,所有团队都在新的基础设施上部署,服务成为常态。 AppDirect 现在拥有超过 50 个生产环境中的微服务和 15 个 Kubernetes 集群,这些集群部署在 AWS 和全球内部。
Lacerte 的策略最终奏效,是因为 Kubernetes 平台对部署时间产生了非常实际的影响。 由于减少了对使用 SCP 命令的定制、脆弱的 shell 脚本的依赖,部署新版本的 时间已从 4 小时缩短到几分钟。 此外,公司投入了大量精力来使开发者能够自助服务。 Lacerte 说:“引入新服务不需要 Jira 票证或与三个不同的团队会面。” 如今,该公司每周有 1600 次部署,而之前只有 1-30 次。
此外,Kubernetes 平台帮助支持了工程团队在过去几年中 10 倍的增长。 与 Lacerte 一同参与这项工作的软件开发人员 Alexandre Gervais 说:“AppDirect 的核心价值观是所有权,体现在我们能够独立于单体代码库交付服务的能力。 小团队现在拥有我们业务领域模型的关键部分,他们在自己的解耦的专业领域内运作,对整个代码库的了解有限。 这减少并隔离了一些复杂性。” 考虑到他们一直在不断添加新特性,Lacerte 说:“我认为,如果没有这个新的基础设施,我们的速度会大大降低。”
该公司还通过将其市场和计费单体应用程序从遗留 EC2 主机迁移到 Kubernetes,以及利用自动缩放来节省成本,因为在工作时间内流量较高。
AppDirect 的云原生堆栈还包括 gRPC 和 Fluentd,该团队目前正在着手设置 OpenCensus。 该平台已经集成了 Prometheus,因此“当团队部署其服务时,他们会收到通知、警报和配置,”Lacerte 说。 “例如,在测试环境中,我希望在 Slack 上收到消息,在生产环境中,我希望收到 Slack 消息,并且我还希望收到页面通知。 我们与 pager duty 集成。 团队对自己的服务拥有更多所有权。”
当然,这也意味着更多责任。 Gervais 说:“我们要求工程师拓展他们的视野。 我们从仅限于‘在分支中推送代码’的文化转变为代码库之外令人兴奋的新职责:特性和配置的部署;应用程序和业务指标的监控;以及在发生故障时进行值班支持。 这是一个巨大的工程文化转变,但它在规模和速度方面的益处是不可否认的。”
随着工程队伍不断壮大,平台团队面临着一个新的挑战,即确保 Kubernetes 平台对所有人来说都是可访问的且易于使用。 Lacerte 说:“我们如何确保,当我们在团队中增加更多人时,他们能够高效、高产,并且知道如何快速上手平台? 因此,我们有传道者、文档和一些项目示例。 我们进行演示,举办 AMA 会议。 我们正在尝试不同的策略来引起所有人的注意。”
在他们使用 Kubernetes 的三年半时间里,Gervais 认为 AppDirect“在正确的时间做出了正确的决定”,他说。 “Kubernetes 和云原生技术现在被视为事实上的生态系统。 我们知道在哪里集中精力,以便应对我们在扩展时遇到的新一波挑战。 该社区非常活跃且充满活力,这对我们出色的内部团队来说是一个很好的补充。 展望未来,我们的重点将真正放在利用生态系统来为我们日常运营提供额外的业务价值上。”