挑战
Zalando 是欧洲领先的在线时尚平台,自 2008 年成立以来,该公司经历了指数级增长。2015 年,为了进一步扩展其最初的电子商务网站以包含新的服务和产品,Zalando 开始进行彻底转型,从而形成自主的自组织团队。这种转变需要一个能够随着工程组织的增长而扩展的基础设施。Zalando 的技术部门开始将应用程序重写为云就绪,并开始将其基础设施从内部数据中心迁移到云。虽然最初没有考虑编排,但当团队迁移到 Amazon Web Services (AWS) 时:“我们看到了团队在 AWS 上使用基础设施和云形成遇到的困难,”Zalando 开发者生产力主管 Henning Jacobs 说。“对于团队和合规性来说,操作开销仍然过高。”为了提供更好的支持,引入了集群管理。
解决方案
该公司现在使用 Kubernetes 编排在 AWS 上运行其 Docker 容器。
影响
使用旧的基础设施,“很难正确地采用新技术,DevOps 团队被认为是瓶颈,”Jacobs 说。“现在,有了这个云基础设施,他们拥有这种打包格式,它可以包含在 Linux 内核上运行的任何内容。这使得很多人感到很高兴。工程师们喜欢这种自主性。”
“它最初是一个 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 基础设施的全球标准,并对继续前进感到兴奋。"