公司 Zalando 地点 柏林,德国 行业 在线时尚

挑战

Zalando 作为欧洲领先的在线时尚平台,自 2008 年成立以来经历了指数级增长。2015 年,Zalando 计划进一步扩展其原有电商网站,增加新的服务和产品,于是开始了一场彻底的转型,组建了自主的自组织团队。这一变革需要能够随着工程组织的增长而扩展的基础设施。Zalando 的技术部门开始重写其应用程序以适应云环境,并开始将其基础设施从本地数据中心迁移到云端。虽然最初并未立即考虑编排,但随着团队迁移到 Amazon Web Services (AWS),“我们看到团队在使用 AWS 的基础设施和 Cloud Formation 时遇到了很多困难,”开发者生产力负责人 Henning Jacobs 说,“团队仍然面临过多的运维开销和合规问题。”为了提供更好的支持,他们引入了集群管理。

解决方案

该公司目前使用 Kubernetes 编排在 AWS 上运行其 Docker 容器。

影响

Jacobs 说,在旧的基础设施下,“很难真正拥抱新技术,而且 DevOps 团队被认为是瓶颈。”他说:“现在,有了这种云基础设施,他们有了这种打包格式,可以包含任何可以在 Linux 内核上运行的东西。这让很多人感到非常高兴。工程师们热爱这种自主性。”

Henning Jacobs 于 2010 年加入 Zalando 时,这家公司刚成立两年,拥有 180 名员工,为欧洲消费者运营一个在线时尚商品商店。

Zalando 开发者生产力负责人 Jacobs 说:“它最初是一个 PHP 电商网站,易于入门,但无法随着业务需求扩展。”

当时,公司开始将业务从德国扩展到其他欧洲市场。快进到今天,Zalando 现有员工超过 14,000 人,2016 年营收达 36 亿欧元,业务遍及 15 个国家。他说:“业务在各个维度上都在增长,并且持续扩展,这真是一生难遇的经历。”

对于像 Jacobs 这样的基础设施专家来说,这更是一个独特的机会。在他加入后不久,公司就开始内部重写所有应用程序。他说:“这通常是我们的战略。例如,我们一开始就有自己的物流仓库,但起初并不知道如何开发物流软件,所以使用了一些供应商提供的软件。然后我们用自己的软件取代了它,因为现成的软件让你没有竞争力。你需要根据自己特定的业务需求优化这些流程。”

在重写应用程序的同时,Zalando 设定了一个目标,即超越基本的电商业务,扩展到一个提供多租户、大幅增加商品种类和款式、当日达配送甚至您自己的在线私人造型师的平台。

对扩展的需求最终引领公司走向了云原生之旅。同时,公司还采用了基于微服务的软件架构,这让工程团队拥有了更多的自主性和项目所有权。Jacobs 说:“迁移到云端是必要的,因为在数据中心,你无法拥有自主的团队。你拥有相同的基础设施,而且非常同质化,所以你只能运行你的 Java 或 Python 应用程序。”

Zalando 开始将其基础设施从两个本地数据中心迁移到云端,这需要对旧应用程序进行迁移以使其适应云环境。Jacobs 说:“我们决定彻底改变。”“我们的 Amazon Web Services 基础设施是这样设置的:每个团队都有自己的 AWS 账户,这是完全隔离的,这意味着没有‘照搬’(lift and shift)。你基本上必须重写你的应用程序,使其适应云环境,甚至包括持久层。我们勇敢地回到了起点,重做了一切,首先选择 Docker 作为通用的容器化技术,然后在此基础上构建基础设施。”

公司最初决定暂缓使用编排技术,但随着团队迁移到 AWS,Jacobs 说:“我们看到了团队在使用 AWS 的基础设施和 Cloud Formation 时遇到的困难。”

Zalando 的 200 多个自主工程团队决定使用哪些技术,并且可以使用自己的 AWS 账户来操作其应用程序。这种设置被证明是一个合规性挑战。即使有严格的规则和自动化的合规性检查,工程团队和 IT 合规部门也因处理合规性问题而不堪重负。Jacobs 说:“对于不合规的行为会出现违规情况,我们在扫描云基础设施时会检测到这些情况。一切皆有可能,但没有任何强制措施,所以你不得不容忍违规情况(并解决它们),而不是从一开始就防止错误发生。这意味着团队、合规和运维部门都会增加开销。在 AWS 上启动新的 EC2 实例也需要时间,这会影响我们的部署速度。”

Jacobs 说,团队意识到他们需要“利用集群管理带来的价值”。当他们在 2015 年首次考察平台即服务 (PaaS) 选项时,市场是分散的;但“现在似乎出现了一个明显的赢家。选择 Kubernetes 似乎是一个不错的选择。”

向 Kubernetes 的过渡始于 2016 年 Zalando 的“黑客周”(Hack Week),参与者将他们的项目部署到了一个 Kubernetes 集群上。从那时起,技术基础设施部门的 60 名成员被引入,然后工程团队被一个接一个地引入。“我们总是先和他们交流,确保每个人的期望都明确,”Jacobs 说。“然后我们进行一些 Kubernetes 培训,这主要是针对我们的 CI/CD 设置的培训,因为我们用户的用户界面主要通过 CI/CD 系统。但他们必须了解基本的 Kubernetes 概念和 API。之后,每周会与每个团队进行同步,检查他们的进展。一旦他们的项目投入生产,我们就会检查一切是否顺利,以及我们还能在哪里改进。”

目前,Zalando 正在运行最初的 40 个 Kubernetes 集群,并计划在可预见的未来进行扩展。一旦 Zalando 开始将应用程序迁移到 Kubernetes,效果立竿见影。Jacobs 说:“Kubernetes 是我们实现无缝端到端开发者体验的基石。我们能够使用一个统一且声明式的 API 将想法交付到生产环境。”“自愈基础设施在低层最佳实践的基础上构建了更高层次的抽象,提供了流畅的体验。我们设想所有 Zalando 交付团队都能够在由 Kubernetes 提供的最先进、可靠且可扩展的集群基础设施上运行其容器化应用程序。”

Jacobs 说,在旧的本地基础设施下,“很难真正拥抱新技术,而且 DevOps 团队被认为是瓶颈。”他说:“现在,有了这种云基础设施,他们有了这种打包格式,可以包含任何可以在 Linux 内核上运行的东西。这让很多人感到非常高兴。工程师们热爱这种自主性。”

Zalando 在实施 Kubernetes 方面遇到了一些挑战。Jacobs 说:“我们是一个七人团队,为不同的工程团队提供集群,我们的目标是为他们所有人提供坚如磐石的体验。我们不想要需要特别照顾的集群(pet clusters)。我们不想必须理解他们的工作负载是什么;它应该开箱即用。考虑到这一点,集群自动扩缩容就很重要。集群管理有许多不同的方法,这不属于核心部分。因此,我们创建了两个组件来配置集群,建立集群注册表,并管理整个集群生命周期。”

Jacobs 的团队还致力于改进 Kubernetes 与 AWS 的集成。“因此,你非常受限。你需要基础设施来扩展每个自主团队的想法。”此外,Jacobs 说,“仍然缺少许多最佳实践。”例如,团队最近解决了一个 Pod 安全策略问题。他说:“Kubernetes 中已经有一个概念,但它没有文档,所以有点棘手。”庞大的 Kubernetes 社区对解决这个问题提供了很大的帮助。为了帮助其他公司走上同样的道路,Jacobs 将其团队的经验总结在一份名为《在生产环境中运行 Kubernetes》的文档中。

最终,Kubernetes 使 Zalando 能够引入和维护公司为发展其平台而设想的新产品。Jacobs 说:“时尚建议产品使用了 Scala,在我们的旧基础设施下,要实现这一点非常困难。这是一种权宜之计,而且那个团队需要平台团队越来越多的支持,就因为他们使用了不同的技术。现在有了 Kubernetes,它是自主的。无论工作负载是什么,那个团队都可以按自己的方式进行,Kubernetes 可以避免其他瓶颈。”

展望未来,Jacobs 认为 Zalando 的新基础设施为公司正在进行的许多其他项目提供了强大的助力,从新的物流软件,到连接品牌的平台功能,再到数据科学家构想出的产品。Jacobs 说:“一个愿景是,如果你看下一部詹姆斯·邦德的电影,看到他穿的西装,你应该能够自动订购,并在一个小时内送到你手上。这关乎连接整个时尚领域。如果你在同一个数据中心运行所有东西,从而形成瓶颈且非常受限,这绝对是不可能的。你需要基础设施来扩展每个自主团队的想法。”

对于正在考虑这项技术的其他公司,Jacobs 表示他不会一定建议完全按照 Zalando 的方式去做。他说:“如果你准备好在某些事情上失败,那么这样做是可以的。你需要设定正确的期望。并非所有事情都会顺利进行。重写应用程序和这种类型的组织变革可能会带来颠覆。我们迁移的第一个产品是关键性的。它有很多依赖项,花费的时间比预期要长。也许我们应该从一些不那么复杂、业务重要性较低的项目开始,只是为了先试水。”

但一旦他们成功转型,“每个人都清楚,没有更好的替代方案了,”Jacobs 补充道。“Kubernetes API 让我们能够以云厂商无关的方式运行应用程序,这使我们能够在未来几年内重新考虑 IaaS 提供商。Zalando 技术部门受益于迁移到 Kubernetes,因为我们能够利用现有知识创建一个工程平台,为我们的工程师提供灵活性和速度,同时显著降低运维开销。我们期望 Kubernetes API 成为 PaaS 基础设施的全球标准,并对未来的旅程充满期待。”