部落格

我們為什麼把 Mythex 的伺服器遷移到 ARM

9 月 19 日,我們把 Mythex 的正式環境後端從 x86 伺服器遷移到較小的 ARM 架構 AWS Graviton 伺服器,並把平台資料庫也遷移到 Graviton 執行個體。觸發的原因很單純:在我們把繁重的工作——執行與建置每位使用者的 App——移到獨立的每專案沙盒之後,主要伺服器的記憶體峰值只用到約三分之一。較小的 ARM 機器足以應付實際負載,並使每月的伺服器帳單降低約 30%。

我們的伺服器現在做什麼

早期,後端伺服器會直接做很多工作。大約在九月中旬,我們完成了把昂貴的部分——執行每個專案的程式碼、安裝套件、建置 App——移到 私人雲端沙盒 中的工作,每個專案一個沙盒。這也是每個專案能擁有獨立隔離環境與即時預覽的原因。

留在我們自己伺服器上的,是協調工作:API、管理沙盒與發佈的編排器、身分驗證、計費,以及閘道。這些工作穩定且輕量。遷移之後,伺服器的記憶體峰值約為 1.3 GB,而機器的記憶體約為其三倍。

為什麼選擇 ARM

AWS 的 Graviton 處理器是 AWS 自行設計的 ARM 晶片。同樣的花費,通常能獲得比同級 x86 執行個體更多的運算能力,或是以更低的價格獲得同樣的能力——而對於像我們這樣的工作負載(Node.js 服務、Docker、Postgres),沒有任何東西綁定我們在 x86 上。

我們遷移了:

  • 兩台應用伺服器,從中型 x86 執行個體改為每台 2 GB RAM 的小型 Graviton 執行個體。
  • 平台資料庫,從小型 x86 資料庫執行個體改為其對應的 Graviton 版本。

唯一真正的複雜之處:同時支援兩種架構的映像檔

我們的預發佈環境仍在小型 x86 伺服器上運行,而正式環境現在是 ARM。為一種架構建置的容器映像檔,無法在另一種上執行。

因此,每個映像檔現在都會針對 兩種架構同時建置,並使用同一個標籤——也就是多架構映像檔。Docker 會在每台機器上自動選擇正確的變體,部署流程也不需要知道它正在推送到哪個環境。代價是 CI 建置時間變長;好處是預發佈與正式環境執行的是完全相同的程式碼、來自完全相同的標籤。

遷移前先規劃回復方案

在運行中的服務上更換 CPU 架構,是那種你希望能在幾分鐘內撤銷的變更。在切換之前,我們:

  • 保留先前的伺服器範本版本,作為具名的回復目標,
  • 在調整資料庫大小之前立即擷取資料庫快照,並且
  • 撰寫一份涵蓋遷移與退路的操作手冊。

我們並沒有用到回復方案。但下次我們仍會以同樣的方式準備。

我們會留意什麼

較小的伺服器餘裕較少。由此衍生兩件事:

  1. 如果繁重的工作再次搬回這些伺服器,2 GB 將不夠用。 屆時的解法是更大尺寸的 Graviton,而不是退回 x86。
  2. 小型機器需要交換空間。 一週後,其中一台伺服器因記憶體壓力而凍結,而它技術上並未耗盡記憶體——那個缺少交換檔的故事。

我們從中學到什麼

  • 架構變更之後要重新測量。 把工作移到沙盒改變了我們的伺服器需求;而執行個體大小還沒跟上。
  • 對典型的網頁技術堆疊而言,只要映像檔是多架構的,遷移到 ARM 是低風險的收穫。
  • 先寫好回復方案。 即使你從未使用它,它也能讓變更更從容。

Mythex · Pricing · 用 AI 打造任何東西 · 網站與應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費的 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港)