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

挑战

Zalando 是欧洲领先的在线时尚平台,自 2008 年成立以来,该公司经历了指数级增长。2015 年,为了进一步扩展其最初的电子商务网站以包含新的服务和产品,Zalando 开始进行彻底转型,从而形成自主的自组织团队。这种转变需要一个能够随着工程组织的增长而扩展的基础设施。Zalando 的技术部门开始将应用程序重写为云就绪,并开始将其基础设施从内部数据中心迁移到云。虽然最初没有考虑编排,但当团队迁移到 Amazon Web Services (AWS) 时:“我们看到了团队在 AWS 上使用基础设施和云形成遇到的困难,”Zalando 开发者生产力主管 Henning Jacobs 说。“对于团队和合规性来说,操作开销仍然过高。”为了提供更好的支持,引入了集群管理。

解决方案

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

影响

使用旧的基础设施,“很难正确地采用新技术,DevOps 团队被认为是瓶颈,”Jacobs 说。“现在,有了这个云基础设施,他们拥有这种打包格式,它可以包含在 Linux 内核上运行的任何内容。这使得很多人感到很高兴。工程师们喜欢这种自主性。”

Henning Jacobs 于 2010 年加入 Zalando 时,该公司只有两年历史,拥有 180 名员工,运营着一个在线商店,供欧洲购物者购买时尚商品。

“它最初是一个 PHP 电子商务网站,很容易上手,但无法满足业务的需求,”Zalando 开发者生产力主管 Jacobs 说。

在那时,该公司开始从德国扩展到其他欧洲市场。快进到今天,Zalando 现在拥有超过 14,000 名员工,2016 年的收入为 36 亿欧元,并在 15 个国家/地区运营。“在所有维度上的增长以及持续的扩展,这是一种千载难逢的体验,”他说。

更不用说像 Jacobs 这样的基础设施专家独特的机遇了。在他加入后不久,该公司开始内部重写他们所有的应用程序。“这通常是我们的策略,”他说。“例如,我们从自己的物流仓库开始,但最初你不知道如何做物流软件,所以你会有一些供应商软件。然后我们用自己的软件替换了它,因为使用现成的软件你无法竞争。你需要根据你特定的业务需求优化这些流程。”

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

扩展的需要最终将该公司引向了云原生之旅。其对基于微服务的软件架构的采用也是如此,这种架构为工程团队提供了更多自主权和对项目的拥有权。“这种向云的迁移是必要的,因为在数据中心,你无法拥有自主团队。你拥有相同的基础设施,它非常同质,因此你只能运行你的 Java 或 Python 应用程序,”Jacobs 说。

Zalando 开始将其基础设施从两个内部数据中心迁移到云,这需要迁移旧的应用程序以使其成为云就绪。“我们决定干净利落地断开,”Jacobs 说。“我们的 Amazon Web Services 基础设施的设置如下:每个团队都有自己的 AWS 帐户,它是完全隔离的,这意味着没有‘提升和迁移’。你基本上必须将你的应用程序重写为云就绪,即使是持久性层也是如此。我们勇敢地重新开始,并重新设计了一切,首先选择 Docker 作为通用容器化,然后从那里构建基础设施。”

该公司决定在开始时推迟编排,但当团队迁移到 AWS 时,“我们看到了团队在 AWS 上使用基础设施和云形成遇到的困难,”Jacobs 说。

Zalando 的 200 多个自主工程团队决定使用哪些技术,并且可以使用自己的 AWS 帐户运行自己的应用程序。这种设置被证明是一个合规性挑战。即使制定了严格的游戏规则和自动合规性检查,工程团队和 IT 合规性也负担过重,无法解决合规性问题。“违规行为会因不符合规定的行为而出现,当我们扫描云基础设施时,我们就会检测到这种行为,”Jacobs 说。“一切皆有可能,但没有强制执行,因此你必须忍受违规行为(并解决它们),而不是首先阻止错误。这意味着团队的开销——以及合规性和运营的开销。在 AWS 上启动新的 EC2 实例也需要时间,这会影响我们的部署速度。”

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

向 Kubernetes 的过渡始于 2016 年,当时 Zalando 举办了黑客周,参与者将他们的项目部署到 Kubernetes 集群。从那里,技术基础设施部门的 60 名成员加入了——然后一次将工程团队带入。“我们总是先与他们交谈,并确保每个人的期望都明确,”Jacobs 说。“然后我们进行一些 Kubernetes 培训,这主要是针对我们的 CI/CD 设置的培训,因为我们的用户界面主要通过 CI/CD 系统。但他们必须了解基本的 Kubernetes 概念和 API。接下来是每周与每个团队同步,检查他们的进度。一旦他们在生产环境中部署了某些东西,我们想看看一切是否正常,以及我们可以在哪些方面进行改进。”

目前,Zalando 正在运行最初的 40 个 Kubernetes 集群,并计划在可预见的未来进行扩展。一旦 Zalando 开始将应用程序迁移到 Kubernetes,结果就立即显现。“Kubernetes 是我们无缝端到端开发人员体验的基石。我们能够使用单个一致的声明性 API 将想法交付到生产环境,”Jacobs 说。“自我修复的基础设施提供了一种无摩擦的体验,它建立在低级最佳实践之上的更高级别的抽象。我们设想所有 Zalando 交付团队都将在 Kubernetes 提供的最先进、可靠和可扩展的集群基础设施上运行其容器化应用程序。”

使用旧的内部基础设施,“很难正确地采用新技术,DevOps 团队被认为是瓶颈,”Jacobs 说。“现在,有了这个云基础设施,他们拥有这种打包格式,它可以包含在 Linux 内核上运行的任何内容。这使得很多人感到很高兴。工程师们喜欢这种自主性。”

Zalando 的 Kubernetes 实施中存在一些挑战。“我们是一个由七人组成的团队,为不同的工程团队提供集群,我们的目标是为他们所有人提供可靠的体验,”Jacobs 说。“我们不想使用宠物集群。我们不想了解他们有什么工作负载;它应该开箱即用。考虑到这一点,集群自动扩展非常重要。有许多不同的集群管理方法,这并不属于核心。因此,我们创建了两个组件来配置集群,为集群提供注册表,以及管理整个集群生命周期。”

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

最终,Kubernetes 使 Zalando 能够引入并维护该公司设想用于扩展其平台的新产品。“时尚建议 产品使用了 Scala,而且我们之前的基础设施很难实现这一点,”Jacobs 说。“这是一个变通方法,该团队需要越来越多地从平台团队那里获得支持,仅仅因为他们使用了不同的技术。现在有了 Kubernetes,它变得自主。无论工作负载是什么,该团队都可以自行处理,Kubernetes 阻止了其他瓶颈。”

展望未来,Jacobs 将 Zalando 的新基础设施视为该公司正在进行的其他工作的有力推动力,从其新的物流软件到连接品牌的平台功能,再到数据科学家梦寐以求的产品。“一个愿景是,如果你观看下一部詹姆斯·邦德电影,看到他穿的西装,你应该能够自动订购它,并在一个小时内送达你,”Jacobs 说。“这是关于连接整个时尚领域。如果你在同一个数据中心中运行,并且因此受到极大的限制,那么这绝对不可能实现。你需要基础设施来扩展每个自主团队的想法。”

对于其他正在考虑这项技术的公司,Jacobs 表示他不会建议完全照搬 Zalando 的方式。"如果你准备好在某些方面失败,这样做是可以的。"他说。"你需要设定正确的预期。并非所有事情都能成功。重写应用程序和这种类型的组织变革可能会带来干扰。我们迁移的第一个产品至关重要。它有许多依赖关系,而且花费的时间比预期更长。也许我们应该从一些不那么复杂、对业务不那么关键的事情开始,只是为了试水。"

但是,一旦他们到达另一边,"每个人都很清楚,没有更好的选择。"Jacobs补充道。"Kubernetes API 允许我们在与云提供商无关的方式运行应用程序,这使我们能够在未来几年重新审视 IaaS 提供商。Zalando Technology 迁移到 Kubernetes 带来了好处,因为我们可以利用现有的知识创建一个工程平台,为工程师提供灵活性和速度,同时显著降低运营成本。我们预计 Kubernetes API 将成为 PaaS 基础设施的全球标准,并对继续前进感到兴奋。"