挑戰
GolfNow 是 NBC 體育集團的成員,是高爾夫行業的技術和服務領導者,管理著 10 種不同的產品,以及世界上最大的電子商務開球時間市場。隨著業務在全球範圍內的快速擴張,GolfNow 的單體應用變得問題重重。GolfNow 架構總監 Sheriff Mohamed 表示:“我們一直在垂直而非水平地擴充套件基礎設施,導致運營成本問題重重。我們希望能夠更輕鬆地在全球範圍內擴張。”
解決方案
GolfNow 轉向微服務和容器化,開始將其應用程式和資料庫從第三方服務遷移到自己執行在 Docker 和 Kubernetes 上的叢集。
影響
效果立竿見影。在保持相同容量(高峰期甚至更高)的同時,GolfNow 的第一個應用程式的基礎設施成本幾乎減半。
但 Sheriff Mohamed 和 Josh Chandler 就是這樣做的,他們幫助他們的公司 GolfNow 完成了從單體到由 Kubernetes 管理的容器化雲原生基礎設施的轉型。
GolfNow 是 NBC 體育集團中表現出色的業務,是一家技術和服務公司,擁有世界上最大的開球時間市場。GolfNow 透過 10 種不同的產品為 500 萬活躍高爾夫球手提供服務。近年來,業務發展如此之快,以至於支援其龐大單體應用程式(用 C#.NET 編寫,並由 SQL Server 資料庫管理系統支援)的基礎設施無法跟上。“隨著我們的發展,我們顯然需要擴充套件基礎設施,但我們一直在垂直而非水平地增長,”GolfNow 架構總監 Sheriff 說,“我們的成本呈指數級增長。最重要的是,我們必須建立一個災難恢復 (DR) 環境,這意味著我們必須將原始資料中心中的所有內容精確複製到另一個僅作為備用資料中心。我們基本上是在浪費金錢,並將基礎設施成本翻倍。”
Sheriff 說,僅將 GolfNow 的第一個重要應用程式——一個高爾夫球場預訂引擎和 B2B 營銷平臺——從第三方服務遷移到他們自己的 Kubernetes 環境,“我們的賬單就大幅下降了”。
取得這些出色成果的道路始於 2014 年末。為了支援 GolfNow 的全球增長,團隊決定公司需要擁有多個數據中心,並能夠根據需要快速輕鬆地重新路由流量。“從那時起,我們就知道我們需要朝著將事物拆分、微服務和容器化的方向發展,”Sheriff 說,“當時我們正試圖擺脫 C#.NET 和 SQL Server,因為它們在 Linux 上執行得不是很好,而所有容器都在 Linux 上執行得很順利。”
為此,團隊轉而使用 Node.js(用於開發工具和應用程式的開源、跨平臺 JavaScript 執行時環境)和 MongoDB(開源資料庫程式)。當時,用於在容器中部署應用程式的 Docker 仍然是新事物。但 Sheriff 說,一旦團隊開始嘗試它,“我們意識到這就是我們想要走的方向,尤其是因為這是行業發展方向。”
GolfNow 的開發團隊運行了一個“內部、低調”的概念驗證,並被其說服了。Sheriff 說:“我們真的很喜歡它能夠輕鬆地在彼此之間傳遞容器,並在短時間內啟動並執行,與它在我的機器上執行的方式完全相同。因為這總是運維人員對開發人員最大的抱怨,對嗎?‘它在我的機器上執行良好!’但後來我們開始思考,‘我們如何確保這些東西保持執行?’”
這促使團隊尋求適合公司需求的正確編排系統。Sheriff 說,他們嘗試的前幾個選項要麼太重,要麼“感覺不太對”。2015 年夏末,他們發現了剛剛釋出的 Kubernetes,Sheriff 立即喜歡上它的易用性。他說:“我們又做了一個概念驗證,Kubernetes 獲勝,因為有社群支援,並且建立在谷歌已經完成的工作之上。”
但在他們選擇 Kubernetes 之前,GolfNow 的母公司 NBC 也要求他們與另一家公司進行比較。Sheriff 和他的團隊喜歡競爭公司的平臺使用者介面,但不喜歡它的平臺不允許容器在 Docker 上本地執行。由於沒有明確的決定,Sheriff 在 GolfNow 的副總裁 Steve McElwee 安排了一次為期三個月的試用,在此期間,一個 GolfNow 團隊(由 Sheriff 和 Josh 組成,Josh 現在是開放平臺首席架構師)將構建一個 Kubernetes 環境,而一個大型 NBC 團隊將使用另一家公司的平臺構建一個。
“我們啟動了叢集,並嘗試讓一切都按照我們想要的方式執行,”Sheriff 說,“我們從中得到的最大啟示是,我們不僅希望我們的應用程式在 Kubernetes 和 Docker 中執行,我們還希望我們的資料庫也在其中執行。我們確實希望我們的整個基礎設施都在 Kubernetes 中執行。”
當時社群中沒有任何東西可以幫助他們在 Kubernetes 和 Docker 環境中執行 Kafka 和 MongoDB 叢集,所以 Sheriff 和 Josh 自己解決了這個問題,花了整整一個月才搞定。“一切都從那時開始,”Sheriff 說,“我們能夠連線所有應用程式,我們提前一個月完成了概念驗證。我的副總裁說,‘好了,結束了。Kubernetes 贏了。’”
下一步,從 2016 年 1 月開始,是將所有東西投入生產。團隊首先專注於一個已經用 Node.js 和 MongoDB 編寫的應用程式。該應用程式是一個高爾夫球場的預訂引擎和 B2B 營銷平臺,當時已經朝著微服務方向發展,但尚未完全完成。當時,它執行在 Heroku Compose 和其他第三方服務中,導致每月賬單高昂。
Sheriff 說:“我們的目標是將其全部取出,並將其放入我們使用 Google Compute Engine (GCE) 上的 Kubernetes 建立的新平臺中。因此,我們最終在 Kubernetes 叢集中並行地逐個構建了 Heroku 和 Compose 中的內容。然後,我們只需在後臺切換配置。因此,在 Heroku 中,我們執行的應用程式會訪問 Compose 資料庫。我們會獲取配置,進行更改,使其訪問在我們叢集中執行的資料庫。”
透過此過程,他們能夠分階段遷移,而不會造成任何停機。第一次遷移是在非工作時間進行的,但為了測試極限,團隊在白天(許多使用者正在執行應用程式時)遷移了第二個資料庫。Sheriff 說:“我們做到了,而且再次成功了。沒有人注意到。”
經過三週的監控,確保一切執行穩定後,團隊將應用程式的其餘部分遷移到他們的 Kubernetes 叢集中。影響立竿見影:除了每月成本大幅削減之外,Sheriff 說,“在相同容量和高峰期執行,我們能夠水平擴充套件。由於我們使用容器更有效地利用了虛擬機器,我們根本不必支付額外的費用。”
他們不僅節省了金錢,還節省了時間。Josh 說:“今天早上我開了一個關於將一些應用程式從一個叢集遷移到另一個叢集的會議。我花了大約 2 個小時解釋這個過程。我實際移動應用程式的時間不到 30 秒!我們可以在令人難以置信的時間內移動資料中心。如果你不是來自 Kubernetes 世界,你不會相信我。”Sheriff 這樣說:“在 Kubernetes 之前,我晚上根本睡不著覺。我總是被吵醒,因為系統宕機了。有了 Kubernetes 之後,我晚上睡得很安穩。”
GolfNow 上一小部分應用程式已遷移到 Kubernetes 環境中。Sheriff 說:“我們的核心團隊正在將許多 .NET 應用程式重寫為 .NET Core [它與 Linux 和 Docker 相容],以便我們可以在容器中執行它們。”
展望未來,Sheriff 和他的團隊希望在 2017 年繼續圍繞 Kubernetes 和 Drone(一個開源持續交付平臺)構建一個完整的平臺,使其更以開發人員為中心。他說:“現在他們能夠管理配置、部署等,使所有這些正在建立微服務的子團隊能夠自給自足。這樣我們就可以擺脫應用程式,只專注於確保叢集執行正常和健康,然後將其移交給我們的運維團隊。”
從長遠來看,Sheriff 有一個更大的目標,那就是讓更多人加入 Kubernetes 的陣營。他說:“我們正在努力使這個平臺足夠通用,以便我們的任何姐妹公司如果願意都可以使用它。我堅信它可以作為一個模型。我認為我們遷移到它、構建它的方式都是其他公司可以學習的方式,並且不應該害怕。”
GolfNow 團隊還在回饋 Kubernetes 社群,他們開源了 Josh 構建的一個機器人框架。Sheriff 說:“我們注意到儀表板使用者介面實際執行的速度比我們剛開始時快得多。然而,我們意識到我們需要的是一個更像機器人的東西,可以真正幫助我們透過 Slack 全面管理 Kubernetes。”Josh 解釋說:“透過 Kubernetes-Slack 整合,你基本上可以連線到一個叢集,然後釋出命令和編輯配置。我們已經盡力簡化了安全配置。我們希望這將是我們對 Kubernetes 的主要感謝,感謝你給予我們的一切。”
從完全新手到生產就緒,GolfNow 團隊在三個月內完成了轉型,他們渴望鼓勵其他公司效仿。他們學到的經驗教訓:“你必須得到老闆的支援,”Sheriff 說,“另一個重要的因素是,要有兩到三名人員專門從事這類工作。你不能讓那些半心半意的人來做。”如果你一開始沒有得到支援,透過實踐來證明它會讓你成功。
“這就像現在的雲端‘六百萬美元先生’,”Josh 補充說,“只需嘗試一下,看看會發生什麼。我覺得當你看到這種應用程式堆疊時,證據就在眼前。它們更快、更具彈性。”