SSD Nodes Learn 8GB 記憶體 — 每年 $66
指南 Matt Connor作者: Matt Connor

什麼是 SSD VPS?Flash 儲存與效能解析

SSD VPS 使用 Flash 儲存而非旋轉式硬碟,重點在更高 IOPS 與更低延遲。了解 SSD、SATA SSD、NVMe 的差異,以及購買前應確認的 3 個問題。

什麼是 SSD VPS?

SSD VPS 是一種虛擬專用伺服器,其磁碟使用快閃記憶體,而不是旋轉式硬碟。SSD 是固態硬碟(solid state drive)的縮寫,指由 NAND 快閃記憶體晶片組成、內部沒有活動零件的儲存裝置。VPS 是虛擬專用伺服器(virtual private server)的縮寫,指在實體主機上隔離出的一個區段,執行自己的作業系統,並以整部伺服器的形式提供給您。兩者結合後,這個名稱只代表一件事。伺服器讀取資料區塊時,不需要先移動任何機械元件。

這就是完整定義。以下內容說明這個名稱未涵蓋的部分,因為定價頁面上的「SSD hosting」一詞,幾乎無法說明其背後的儲存陣列。

如果您仍在釐清 VPS 與一般虛擬機器的差異,建議先閱讀VPS、VM 與 VPC 的差異

為什麼主機商強調儲存速度,而不是儲存容量

方案頁面會列出 CPU 核心數、記憶體、磁碟容量和頻寬,接著再用一個完全不是容量單位的詞來描述磁碟。主機商這樣做,是因為多年前容量就不再是儲存裝置最值得關注的數字。決定伺服器使用感受的兩個數字是 IOPS(每秒輸入/輸出操作次數)和延遲(單一操作返回所需的時間)。

原因在於兩者的機械結構不同。硬碟將資料儲存在旋轉碟片上,並以安裝在可移動支臂上的磁頭讀取資料。若要存取碟片上其他位置的區塊,支臂必須先尋道,接著磁碟還要旋轉,直到正確的磁區轉到磁頭下方。以每分鐘 7200 轉的速度運轉時,平均半圈約需 4 ms,尋道還會增加數毫秒。Flash 沒有支臂和碟片,因此讀取是電子查找,數十微秒內即可返回。

ChartRandom 4k read, published device class specifications rather than VPS measurements
The data behind this chart
[
  {
    "device": "7200 rpm hard disk",
    "random_read_iops": "125",
    "read_latency_ms": 8
  },
  {
    "device": "SATA SSD",
    "random_read_iops": "90,000",
    "read_latency_ms": 0.15
  },
  {
    "device": "NVMe SSD",
    "random_read_iops": "600,000",
    "read_latency_ms": 0.08
  }
]

7200 rpm 硬碟的額定效能約為每秒 125 次隨機 4k 讀取,其中一次讀取約需 8 ms 才能返回。NVMe 磁碟的相同讀取額定效能接近 600,000,每次約需 0.08 ms。兩者之間的 SATA SSD 額定效能接近 90,000。這些數字應理解為數量級,而不是效能提升百分比。

關於這些資料,請注意兩點。這些是各類型完整磁碟的公布規格,因此是製造商資料表中的數值,不是在 VPS 上測得的結果。而且你永遠不會取得完整磁碟:你的磁碟區只是單一裝置或磁碟陣列的一部分,並且與同一硬體上的其他客戶共用資源。

這兩欄回答的是不同問題,因此應一起閱讀。延遲表示單一操作需要等待多久。IOPS 表示磁碟同時處理多少操作。Flash 透過平行處理達到高 IOPS,因為許多 Flash 晶片可以同時回應多個要求,而深層佇列會讓它們持續處理工作。單執行緒程式若每次只發出一個讀取要求、等待結果返回後才發出下一個要求,就永遠無法達到圖表中的最高數值。它實際感受到的是延遲欄位。

SSD、NVMe、SATA 與 PCIe:位於不同層級的 4 個術語

買家會混淆這些術語,因為每個術語描述的是系統的不同部分。

  • SSD 是儲存媒體。它表示資料儲存在 NAND flash 晶片上,而不是磁性碟片上。
  • SATA 是介面,設計於機械式磁碟盛行的時代。其最高速度為 6 Gbit/s,實際傳輸量約為 550 MB/s,命令佇列可容納 32 個待處理命令。
  • NVMe(non-volatile memory express)是專為 flash 設計的通訊協定。它支援多個佇列,每個佇列可容納數千個命令,因此多個 CPU 核心可以同時與磁碟機通訊,而不必共用單一狹窄的佇列。
  • PCIe(peripheral component interconnect express)是 NVMe 所使用的匯流排,與顯示卡插入的通道屬於相同類型。

因此,SATA SSD 與 NVMe SSD 都會將資料儲存在 flash 上。兩者的差異在於使用的介面不同。SATA SSD 仍比任何硬碟快得多,但其 32 個命令的佇列限制了可表達的平行工作量,而平行工作正是 flash 擅長的部分。哪一種值得付費購買,取決於您的工作負載;NVMe 與 SATA SSD 的選擇會詳細分析這項決策。

本機快閃儲存或網路連線儲存?

兩種截然不同的配置,會以相同的名稱銷售。

本機儲存是指快閃磁碟位於 VPS 所在的同一台實體主機內。要求會在單一機器內經由 PCIe 傳輸後直接返回,因此延遲可維持在數十微秒。

網路連線儲存是指虛擬磁碟位於獨立的儲存叢集,通常是 Ceph 或 SAN(storage area network),每次讀取和寫入都必須經由網路傳輸才能存取。供應商通常稱之為「cloud block storage」或「elastic volumes」。快閃儲存是真實存在的。網路傳輸往返也是真實存在的,而且會加到每一項操作,因此延遲會達到數百微秒的高段或數毫秒,而不是數十微秒。

兩者都不是錯誤的選擇。網路儲存可以在主機故障時繼續運作,因為資料從未位於該主機上:供應商可以在其他硬體上啟動您的伺服器,磁碟也會隨之掛載。本機 NVMe 的速度較快,但會綁定單一實體機器,因此該硬體故障時,必須從備份還原。請確認方案使用哪一種儲存。幾乎沒有人會這麼做。

真實伺服器上的實際差異

伺服器工作大多是少量且隨機的讀寫,而不是長距離的循序傳輸。因此,行銷文案中的 MB/s 數值,是頁面上最不實用的數字。

  • 資料庫提交。 需要保證持久性的資料庫會在交易提交時呼叫 fsync,接著等待磁碟確認資料確實已儲存。在硬碟上,這段等待時間以毫秒計,因此小型資料庫每秒只能完成數百次提交。在快閃儲存裝置上,相同的等待時間只有不到 1 毫秒。無論您執行 PostgreSQL、MySQL,或將 SQLite 作為正式環境資料庫,差距在此最為明顯。
  • 套件安裝。 apt install 會解開數千個小檔案,並在處理過程中將它們同步至磁碟。這些工作幾乎都不是循序作業,因此效能受 IOPS 限制。
  • 容器映像檔提取。 docker pull 會透過網路取得壓縮層,然後將其解壓縮為數千個小檔案。下載受網路速度限制。解壓縮受磁碟速度限制;在速度較慢的儲存區上,您需要等待的就是解壓縮作業。
  • 開機與重新開機。 啟動時會讀取核心與 initramfs,接著從儲存區中分散的位置讀取數百個小型 unit 檔案與共用函式庫。

這些工作都不是大型的循序讀取。某個儲存區即使能以 500 MB/s 串流傳輸,卻只能提供 3,000 IOPS,在執行 docker compose pull 時仍會感覺緩慢,因為等待時間是按檔案計算,而不是按 MB 計算。

為什麼定價頁上的「SSD cloud hosting」幾乎無法提供有用資訊

這個詞只描述儲存媒體,僅此而已。它沒有說明磁碟使用的介面,也沒有說明該磁碟是否與您的伺服器位於同一台機器中。它同樣沒有說明您的方案允許達到的上限。

這個上限最重要,卻最少被列出。供應商會限制每個 volume 的 IOPS 和吞吐量,因為一台主機要服務許多客戶,未受限制的鄰近租戶可能耗盡其他租戶可用的資源。在具備數十萬 IOPS 能力的硬體上,將每個 volume 限制為數千 IOPS 是正常且合理的做法,但方案說明通常不會顯示這項限制。兩個方案都可能標示為「SSD」,但其中一個是沒有每個 volume 限制的本機 NVMe,另一個則是受共用叢集 volume 限制為 3,000 IOPS 的方案。

限制有兩種形式。持續性限制是固定上限,不會變動。突發性限制則提供較低的基準速率,並搭配 credits,讓您暫時超過基準速率;volume 閒置時,這些 credits 會補充。突發性限制在五分鐘測試中看起來很出色,但在資料庫匯入或大型還原作業進行到一半時,效能可能降回基準速率。如果供應商報價一個很大的數字,請詢問您可以維持該速率多久。

如何檢查 VPS 實際提供給您的資源

在 guest 內部,您只能看到 hypervisor 告知您的資訊。

lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotational

vda 替換為 lsblk 列出的磁碟裝置名稱。當 kernel 得知該裝置為非旋轉式時,ROTArotational 檔案會讀取 0;當 kernel 得知相反資訊時,則會讀取 1。虛擬磁碟會根據 hypervisor 宣告的資訊設定此旗標,因此它描述的是虛擬裝置,而不是底層的實體硬體。對於 vda 這類 virtio 磁碟,MODEL 通常為空值;在模擬 SATA 控制器上,則可能是 QEMU HARDDISK 這類通用字串。guest 無法查看 host 的磁碟陣列,也不應能查看。

因此,請將此旗標視為提示,並測量其餘項目。使用 fio 對磁碟區上的檔案執行隨機 4k 測試,佇列深度應設為應用程式實際使用的值,並執行足夠長的時間以耗盡任何突發額度。正確進行 VPS 效能基準測試 包含 fio 指令,以及會產生偏高數值的常見錯誤。

購買前應向供應商詢問的 3 個問題

  1. 儲存設備是與 hypervisor 共置,還是透過網路連接? 答案會決定延遲的下限,也會決定實體主機故障時資料的處理方式。能清楚回答這個問題的供應商,表示其確實考慮過相關事項。
  2. 我的 volume 有多少 IOPS 限制? 請對方提供數字。「Unlimited」和「enterprise grade」都不是數字。如果確實沒有上限,請詢問在相同主機上的鄰近租戶進行備份時,什麼機制能阻止其占用整個陣列。
  3. 這項限制是持續值還是 burst 值? 如果可以 burst,請詢問 baseline 和 burst 的持續時間。baseline 是您的 nightly job 必須承受的數值,因此規劃時應以此為依據。

Flash 會耗損嗎?這是你的問題嗎?

Flash 儲存單元可接受的寫入週期數量有限,因此磁碟會以 TBW (terabytes written) 或 DWPD (drive writes per day) 發布耐久度評級。磁碟會將寫入平均分散到各個儲存單元,這稱為磨損平均 (wear levelling),並保留備用區塊,以替換失效的儲存單元。在 VPS 上,磨損是供應商的問題:供應商會監控自有磁碟上的 SMART 計數器,並在耐久度評級耗盡前更換硬體。你的問題早於 Flash 就已存在。磁碟不是備份,磁碟區下方的備援也不是備份,因為它複製刪除操作的方式,和複製資料一樣完整。

你實際上是在取捨每 GB 的價格。Flash 的每 GB 成本高於旋轉式磁碟,因此同樣價格的 SSD 方案通常比硬碟方案提供更少的容量。如果你需要大量空間存放媒體或封存資料,請讓快速磁碟區維持較小容量,並將大量資料放到較便宜的位置;這也是將備份保存在伺服器外部的正確做法。如需了解儲存空間在整體費用中的位置,請參閱VPS 的實際成本,其中會拆解各項費用。

FAQ

SSD VPS 和 NVMe VPS 是同一回事嗎?

所有 NVMe VPS 都是 SSD VPS,因為 NVMe 磁碟採用快閃儲存。但反過來不成立。標示為「SSD」的方案可能使用 SATA SSD。這類 SSD 使用為機械式磁碟設計的介面,佇列深度為 32,速度上限接近 550 MB/s。兩者都比硬碟快得多。如果兩者的差異會影響您的工作負載,請向供應商確認方案使用哪一種,不要只根據方案名稱判斷。

SSD VPS 會讓我的網站變快嗎?

它只會加快磁碟作業。每個請求都執行多個資料庫查詢的頁面會變快,因為這些查詢及其提交作業通常屬於小型隨機 I/O。從記憶體或快取提供的頁面在傳送前不會存取磁碟,因此速度幾乎不會改變。請先測量請求的瓶頸,再決定是否要付費升級儲存裝置。

如何確認我的 VPS 確實使用 SSD 儲存裝置?

在 guest 內部無法確認實體硬體。lsblk -d -o NAME,ROTA 會顯示虛擬裝置宣告的類型,但該值由 hypervisor 決定,因此其中顯示 0 只能作為線索,不能視為證明。實際的確認方式是進行測量:使用隨機 4k 讀取工作負載執行 fio 幾分鐘,然後查看回報的延遲。單位數毫秒的隨機讀取延遲,通常表示使用旋轉式磁碟或壅塞的網路磁碟區。數十微秒則表示使用本機快閃儲存。

網路連接的 SSD 儲存裝置比本機 NVMe 差嗎?

它的單次作業速度較慢,故障方式也不同。每次讀取和寫入都會增加網路往返時間,因此即使兩者都使用快閃儲存,延遲仍然較高。另一方面,您的資料不會儲存在單一實體主機上,因此主機故障不會連同磁碟區一起中斷;對供應商而言,建立快照和執行 live migration 也較容易。對延遲敏感的資料庫,請選擇本機快閃儲存。若磁碟區的持續可用性比微秒級延遲更重要,請選擇網路儲存。

#vps#ssd#nvme#storage#hosting-basics