為 Let's Encrypt 提供動力的下一代資料庫伺服器
Let's Encrypt 透過為超過 2.35 億個網站提供 TLS 憑證,協助保護網路的大部分。資料庫是 Let's Encrypt 管理憑證發放的核心。如果這個資料庫的效能不夠好,可能會導致訂閱者發生 API 錯誤和逾時。資料庫效能是我們在達到服務等級目標的同時,擴展能力的單一最關鍵因素。在 2020 年底,我們升級了資料庫伺服器,並且對結果感到非常滿意。
我們究竟對這些伺服器做了什麼?
我們的 CA 軟體 Boulder 使用 MySQL 風格的結構和查詢來管理訂閱者帳戶和整個憑證發放流程。它設計為與單一 MySQL、MariaDB 或 Percona 資料庫搭配運作。我們目前使用 MariaDB,並採用 InnoDB 資料庫引擎。
我們對單一資料庫執行 CA,以盡量減少複雜性。盡量減少複雜性有利於安全性、可靠性,並降低維護負擔。我們在任何給定時間都有許多作用中的資料庫複本,並將一些讀取操作導向複本資料庫伺服器,以減少主要伺服器的負載。
此設計的一個後果是,我們的資料庫機器需要非常強大。最終,我們可能需要將單一資料庫分割或分解成多個資料庫,但硬體進步讓我們到目前為止能夠避免這樣做。
硬體規格
前一代的資料庫硬體功能強大,但經常被推到極限。對於下一代,我們希望在相同的 2U 外形尺寸中,將幾乎所有效能指標提高一倍以上。為了實現這一點,我們需要 AMD EPYC 晶片,而 Dell 的 PowerEdge R7525 是理想選擇。以下是規格
前一代 | 下一代 | |
CPU | 2 個 Intel Xeon E5-2650 總共 24 個核心 / 48 個執行緒 |
2 個 AMD EPYC 7542 總共 64 個核心 / 128 個執行緒 |
記憶體 | 1TB 2400MT/s | 2TB 3200MT/s |
儲存裝置 | 24 個 3.8TB Samsung PM883 SATA SSD 560/540 MB/s 讀取/寫入 |
24 個 6.4TB Intel P4610 NVMe SSD 3200/3200 MB/s 讀取/寫入 |

透過使用 AMD EPYC,我們能夠獲得 64 個實體 CPU 核心,同時保持高時脈速度:2.9GHz 基本速度和 3.4GHz 增強速度。更重要的是,EPYC 提供 128 條 PCIe v4.0 通道,這使我們能夠在單一機器中放入 24 個 NVMe 磁碟機。NVMe 速度非常快 (比前一代資料庫伺服器中的 SATA SSD 快約 5.7 倍),因為它使用 PCIe 而不是 SATA。然而,PCIe 通道通常非常有限:現代消費級晶片通常只有 16 條通道,而 Intel 的 Xeon 晶片有 48 條。透過為每個晶片提供 128 條 PCI 通道 (更不用說 v4.0),AMD EPYC 使將大量 NVMe 磁碟機封裝到單一機器中成為可能。稍後我們將更詳細地討論 NVMe。
效能影響
首先,我們將查看處理請求的中位時間,因為它最能反映訂閱者的體驗。在升級之前,我們會在約 90 毫秒內處理中位 API 請求。升級將該指標降低到約 9 毫秒!
我們可以清楚地看到我們舊的 CPU 如何達到極限。在我們升級主要資料庫伺服器前的那週,它的 CPU 使用率 (來自 /proc/stat) 平均超過 90%
新的 AMD EPYC CPU 的使用率約為 25%。您可以在此圖表中看到我們在 9 月 15 日將新的資料庫伺服器從複本 (唯讀) 升級為主要 (讀取/寫入) 的位置。
升級大幅降低了我們的整體資料庫延遲。平均查詢回應時間 (來自 INFORMATION_SCHEMA) 曾經約為 0.45 毫秒。
現在查詢的平均速度快三倍,約為 0.15 毫秒。
OpenZFS 和 NVMe
NVMe 磁碟機因其令人難以置信的效能而變得越來越受歡迎。然而,直到最近,幾乎不可能在單一機器中放入許多磁碟機,因為 NVMe 使用 PCIe 通道。這些通道非常有限:Intel 的 Xeon 處理器只有 48 條 PCIe v3 通道,其中一些通道被晶片組和附加卡 (例如網路介面卡和 GPU) 佔用。您無法在剩餘的通道中放入許多 NVMe 磁碟機。
AMD 最新一代的 EPYC 處理器配備 128 條 PCIe 通道,比 Intel 提供的多一倍以上,而且它們是 PCIe v4!這足以將一台 2U 伺服器裝滿 NVMe 磁碟機 (在我們的例子中為 24 個)。
一旦您擁有一台裝滿 NVMe 磁碟機的伺服器,您就必須決定如何管理它們。我們前一代的資料庫伺服器在 RAID-10 配置中使用硬體 RAID,但沒有針對 NVMe 的有效硬體 RAID,因此我們需要其他解決方案。一個選項是軟體 RAID (Linux mdraid),但我們收到了一些關於 OpenZFS 的建議,並決定試用一下。我們對它非常滿意!
關於如何最好地設定和最佳化 OpenZFS 以用於 NVMe 磁碟機池和資料庫工作負載的資訊並不多,因此我們想分享我們所學到的知識。您可以在此 GitHub 儲存庫中找到有關我們設定的詳細資訊。
結論
隨著越來越多的人依賴 Let's Encrypt 來獲得 TLS/SSL 提供的安全性和隱私,這次資料庫升級是必要的。設備相當昂貴,並且我們的 SRE 團隊花費了相當大的努力來規劃和執行轉換,但我們從過程中獲得了很多。
支持 Let's Encrypt
我們依靠支持者的捐款來提供我們的服務。如果您的公司或組織想要贊助 Let's Encrypt,請透過電子郵件 sponsor@letsencrypt.org 與我們聯繫。如果您的能力所及,我們要求您進行個人捐款。