公司 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 名員工,經營著一家供歐洲購物者購買時尚商品的線上商店。

「它最初是一個 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 的 Hack Week,參與者將他們的專案部署到 Kubernetes 叢集。從那裡,技術基礎架構部門的 60 名成員加入了—然後工程團隊也一個接一個地加入。「我們總是先與他們交談,並確保每個人的期望都很明確」,Jacobs 說。「然後我們進行一些 Kubernetes 訓練,這主要是針對我們的 CI/CD 設置的訓練,因為我們使用者的使用者介面主要透過 CI/CD 系統。但他們必須了解基本的 Kubernetes 概念和 API。接下來是每週與每個團隊同步,以檢查他們的進度。一旦他們有東西在生產環境中運行,我們想看看一切是否正常,以及我們可以改進哪些方面。」

目前,Zalando 正在運行最初的 40 個 Kubernetes 叢集,並計劃在可預見的未來進行擴展。一旦 Zalando 開始將應用程式遷移到 Kubernetes,結果立竿見影。「Kubernetes 是我們無縫端到端開發者體驗的基石。我們能夠使用單一一致且宣告式的 API 將想法交付到生產環境」,Jacobs 說。「自我修復的基礎架構提供了流暢的體驗,較高層次的抽象概念建立在低層次的最佳實務之上。我們預想所有 Zalando 交付團隊都能在由 Kubernetes 提供的最先進、可靠且可擴展的叢集基礎架構上運行其容器化應用程式。」

Jacobs 說,使用舊的內部部署基礎架構「很難適當地擁抱新技術,而 DevOps 團隊被認為是瓶頸」。 「現在,有了這種雲端基礎架構,他們擁有這種封裝格式,可以包含任何在 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 技術受益於遷移到 Kubernetes,因為我們能夠利用我們現有的知識來創建一個工程平台,為我們的工程師提供靈活性和速度,同時顯著降低營運負擔。我們期望 Kubernetes API 成為 PaaS 基礎架構的全球標準,並對持續的旅程感到興奮。」