公司 Squarespace 地點 紐約州紐約市 行業 軟體即服務,網站建設平臺

挑戰

Squarespace 站點可靠性團隊的員工工程師 Kevin Lynch 表示,2014 年從單體架構轉向微服務“解決了開發端的一個問題,但將這個問題推給了基礎設施團隊。”“我們 5000 臺虛擬機器主機上的基礎設施部署過程拖慢了所有人的速度。”

解決方案

該團隊嘗試了容器編排平臺,發現 Kubernetes “回答了我們所有的問題”,Lynch 說。該公司於 2016 年開始在其資料中心執行 Kubernetes。

影響

自 Squarespace 轉向 Kubernetes 並同時對其網路堆疊進行現代化改造以來,部署時間縮短了近 85%。以前,他們的虛擬機器部署需要半小時;現在,Lynch 說,“有人可以生成一個模板化應用程式,在五分鐘內將其部署,並在那時擁有實際的容器化例項,執行在我們的預演環境中。”因此,“生產力時間是最大的成本節省者,”他補充道。“當我們啟動 Kubernetes 專案時,我們大概有十幾個微服務。今天,正在積極開發中的微服務數量是其兩倍。”Kubernetes 還提高了彈性:“如果一個節點宕機,它會立即重新排程,並且不會對效能造成影響。”

自 2003 年在宿舍裡創立以來,Squarespace 讓數百萬人能夠輕鬆建立自己的網站。

然而,幕後公司的單體 Java 應用程式讓其開發者們在持續改進平臺方面變得不再那麼簡單。因此,Squarespace 站點可靠性團隊的員工工程師 Kevin Lynch 表示,公司在 2014 年決定“走微服務之路”。“但我們總是在 vCenter VMware 虛擬機器 [在我們自己的資料中心] 中部署我們的應用程式。微服務解決了開發端的一個問題,但將這個問題推給了基礎設施團隊。我們 5000 臺虛擬機器主機上的基礎設施部署過程拖慢了所有人的速度。”

Lynch 說,在嘗試了另一個容器編排平臺並“以非常痛苦的方式破壞它”之後,團隊於 2016 年年中開始試驗 Kubernetes,並發現它“回答了我們所有的問題”。將其部署在資料中心而不是公共雲是他們最大的挑戰,當時,很多其他公司都沒有這樣做。“我們必須找出如何在我們自己的基礎設施中部署它,並且我們必須將其與我們的其他應用程式整合,”Lynch 說。

與此同時,Squarespace 的網路工程團隊正在對其網路堆疊進行現代化改造,從傳統的二層網路切換到三層脊葉網路。Lynch 說:“這與我們希望透過 Kubernetes 實現的目標完美契合。”“它使我們能夠讓伺服器直接與機架頂部交換機通訊。我們使用 Calico 作為 Kubernetes 的 CNI 網路,因此我們可以公佈所有這些獨立的 Kubernetes Pod IP 地址,並使其與我們仍在虛擬機器中配置的其他服務無縫整合。”

幾個月內,他們擁有了一個穩定的內部使用叢集,並開始為生產環境推出 Kubernetes。他們還為雲原生堆疊添加了 Zipkin 和 CNCF 專案 Prometheusfluentd。Lynch 說:“我們轉向了 Kubernetes,一個新世界,我們也改進了我們所有其他的工具。”“它使我們能夠簡化我們的流程,因此我們現在可以輕鬆地從模板建立整個微服務專案,生成程式碼和部署管道,生成 Dockerfile,然後立即將一個可工作、可部署的專案釋出到 Kubernetes。”Dev/QA/Stage/Prod 的部署也“大幅簡化”,Lynch 補充道。“現在配置差異很小。”

整個過程只需五分鐘,與虛擬機器部署相比,時間縮短了近 85%。“從頭到尾可能需要半小時,這還沒有考慮到基礎設施工程師需要負責這項工作,因此其中也存在一些業務延遲。”

Lynch 說,隨著部署速度加快,“生產力時間是最大的成本節省者”。“我們有一個團隊正在實施一項新的檔案儲存服務,他們只是開始將其與我們的儲存後端整合,而無需我們的參與”——這在 Kubernetes 之前是不可能的。他補充道:“當我們啟動 Kubernetes 專案時,我們大概有十幾個微服務。今天,正在積極開發中的微服務數量是其兩倍。”

這對應用程式的彈性也產生了積極影響。他說:“當我們部署虛擬機器時,我們必須構建工具來確保服務適當分佈在各個機架上,並且能夠承受故障。”“Kubernetes 就能做到。如果一個節點宕機,它會立即重新排程,並且不會對效能造成影響。”

另一個巨大的好處是自動擴縮。“這在以前使用 VMware 的方式下是不可能實現的,”Lynch 說,“但現在我們可以直接透過 Kubernetes 新增適當的自動擴縮功能,然後,隨著需求的增加,它就會自動擴縮。而且它開箱即用。”

對於其他剛開始使用 Kubernetes 的人,Lynch 說他最好的建議是“快速失敗”:“一旦你計劃好了,就立即執行。Kubernetes 對於快速嘗試某事並檢視它是否有效非常有幫助。”

Lynch 和他的團隊計劃開源他們開發的一些工具,以擴充套件 Kubernetes 並將其用作 API 本身。第一個工具將依賴應用程式作為容器注入到 Pod 中。他解釋說:“當你釋出一個應用程式時,通常它會附帶一堆需要一起釋出的依賴應用程式,例如用於日誌記錄的 fluentd。”有了這個工具,開發者就不需要擔心配置了。

未來,Squarespace 的所有新服務都將部署到 Kubernetes 中,最終目標是儘可能地轉換所有服務。大約四分之一的現有服務已經遷移。“我們的單體應用程式將是最後一個,因為它太龐大和複雜了,”Lynch 說。“但現在我看到其他服務被遷移過來,比如檔案儲存服務。有人只是做了,它就成功了——毫不費力。所以我相信,如果我們著手處理,它可能會比我們擔心的容易得多。也許我應該採納我自己的建議,快速失敗!”