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