什麼是 SSD VPS?Flash 儲存與效能解析
SSD VPS 使用快閃儲存而非旋轉式硬碟,帶來更高 IOPS 與更低延遲。本文比較 7200 rpm 硬碟、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,此外還要加上數 ms 的尋道時間。Flash 沒有磁臂與碟片,因此讀取是電子查找,通常可在數十微秒內返回。
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 上實測的結果。而且你永遠不會取得完整磁碟;你的 volume 只占用單一裝置或磁碟陣列的一部分,並與同一硬體上的其他客戶共用資源。
這兩欄回答的是不同問題,因此應一併閱讀。延遲是單一作業需要等待多久。IOPS 是磁碟同時處理多少作業。Flash 透過平行處理達到高 IOPS,因為多個 Flash 晶片可同時回應多個請求,而較深的佇列會持續讓它們處於忙碌狀態。若單一執行緒的程式每次只發出一個讀取、等待完成後再發出下一個,就永遠看不到圖表的最高數值。它實際感受到的是延遲欄位。
SSD、NVMe、SATA 與 PCIe:位於四個不同層級的四個術語
買家會混淆這些術語,因為每個術語描述的都是系統中的不同部分。
- 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」。快閃儲存是真實存在的,網路傳輸延遲也確實存在,並會加入每一次操作,因此延遲會落在數百微秒的高段或低毫秒範圍,而不是數十微秒。
兩者都不是錯誤選擇。網路儲存可在主機故障後繼續運作,因為資料原本就不在該主機上;供應商可以在其他硬體上啟動您的伺服器,磁碟也會隨之掛載。Local NVMe 的速度較快,但繫結於單一實體機器,因此該硬體故障時,必須從備份還原。請確認方案採用哪一種配置。幾乎沒有人會詢問這件事。
實際伺服器上的差異
伺服器工作大多是小型隨機讀寫,而不是長距離的循序傳輸。因此,行銷文案中的 MB/s 數值,是頁面上最不具參考價值的數字。
- 資料庫提交。 要保證持久性的資料庫會在交易提交時呼叫
fsync,然後等待磁碟確認資料確實已儲存。在硬碟上,這項等待需要數毫秒,因此小型資料庫每秒只能完成數百次以內的提交。在快閃儲存上,相同的等待時間只有不到 1 毫秒。無論執行 PostgreSQL、MySQL,或將 SQLite 作為正式環境資料庫,差異都在這裡最明顯。 - 套件安裝。
apt install會解開數千個小型檔案,並在處理過程中將其同步至磁碟。這些工作幾乎都不是循序操作,因此效能取決於 IOPS。 - 容器映像檔下載。
docker pull會透過網路取得壓縮層,然後將其解開成數千個小型檔案。下載速度受網路限制。解壓縮速度則受磁碟限制;在速度較慢的儲存區上,解壓縮就是讓你等待的部分。 - 開機與重新開機。 啟動時會讀取 kernel 與 initramfs,接著從儲存區中分散的位置讀取數百個小型 unit 檔案與 shared library。
這些工作都不是大型循序讀取。某個儲存區即使能以 500 MB/s 進行串流,若只能提供 3,000 IOPS,在執行 docker compose pull 時仍會感覺緩慢,因為等待時間是按檔案數量計算,而不是按 MB 數量計算。
定價頁面上的「SSD cloud hosting」幾乎無法告訴你任何重要資訊
這個詞只說明儲存媒介,僅此而已。它沒有說明磁碟使用的介面,也沒有說明磁碟是否與你的伺服器位於同一台機器。它同樣沒有說明你的方案允許達到的效能上限。
這個上限最重要,卻最少被列在方案資訊中。供應商會限制每個 volume 的 IOPS 與 throughput,因為一台主機要服務許多客戶,未受限制的鄰居可能耗盡其他客戶可用的資源。在具備數十萬 IOPS 能力的硬體上,將每個 volume 限制在數千 IOPS 是正常且合理的做法,但方案說明通常不會顯示這項限制。兩個方案都可能標示為「SSD」,但其中一個可能是沒有每個 volume 限制的本機 NVMe,另一個則可能是限制為 3,000 IOPS 的共用叢集 volume。
限制有兩種形式。持續限制是固定不變的效能上限。突發限制則提供較低的基準值,並搭配 credits,讓你能在一段時間內超過基準值;volume 閒置時,credits 會補充。突發限制在 5 分鐘測試中看起來很理想,但在資料庫匯入或大型還原作業進行到一半時,效能可能降回基準值。如果供應商標示很大的數字,請詢問你可以維持該效能多久。
如何確認 VPS 實際提供的資源
在 guest 內只能看到 hypervisor 告知的資訊。
lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotational將 vda 替換為 lsblk 列出的磁碟裝置名稱。當 kernel 得知裝置為非旋轉式時,ROTA 與 rotational 檔案會讀取到 0;當 kernel 得知裝置為旋轉式時,則會讀取到 1。虛擬磁碟會根據 hypervisor 宣告的資訊設定此旗標,因此描述的是虛擬裝置,而不是底層的實體硬體。對於 vda 這類 virtio 磁碟,MODEL 通常是空的;在模擬 SATA 控制器上,則可能是 QEMU HARDDISK 這類一般字串。guest 無法查看 host 的磁碟陣列,也不應假設自己能查看。
因此,請將此旗標視為提示,並測量其他效能指標。使用 fio 對該磁碟區上的檔案執行隨機 4k 測試,佇列深度應符合應用程式實際使用的設定,執行時間也應足夠消耗所有 burst credit。正確執行 VPS 效能測試提供 fio 指令,以及會產生偏高數值的常見錯誤。
購買前應向供應商提出的 3 個問題
- 儲存空間是本機連接至 hypervisor,還是透過網路連接? 答案會決定延遲的下限,也會決定實體主機故障時資料的處理方式。能清楚回答這個問題的供應商,代表其確實考慮過相關事項。
- 我的 volume 有多少 IOPS 限制? 請對方提供數字。「Unlimited」和「enterprise grade」都不是數字。如果確實沒有上限,請詢問同一台主機上的鄰近租戶在備份期間,如何避免用盡整個儲存陣列的資源。
- 這項限制是持續值還是 burst 值? 如果可以 burst,請詢問 baseline 和 burst 的持續時間。baseline 是夜間工作實際會承受的數值,因此規劃時應以此為準。
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。SATA SSD 是透過專為機械硬碟設計的介面連接快閃記憶體,具備 32 個命令佇列,速度上限接近 550 MB/s。兩者都比硬碟快得多。如果這項差異會影響工作負載,請向供應商確認方案使用哪一種儲存裝置,不要只看方案名稱。
SSD VPS 會讓我的網站變快嗎?
它只會加快磁碟作業。每個請求都執行多個資料庫查詢的頁面會變快,因為這些查詢及其提交作業屬於小型隨機 I/O。從記憶體或快取提供的頁面,在傳送出去前不會存取磁碟,因此幾乎不會有變化。在付費升級儲存裝置前,先測量請求的哪個部分速度較慢。
如何確認我的 VPS 確實使用 SSD 儲存裝置?
在 guest 內部無法確認實體硬體。lsblk -d -o NAME,ROTA 會顯示虛擬裝置宣告的類型,但這個值由 hypervisor 決定,因此其中顯示 0 只能作為線索,不能視為證明。實際作法是進行測量:使用隨機 4k 讀取工作負載執行 fio 數分鐘,然後查看回報的延遲。隨機讀取延遲若為個位數毫秒,通常表示使用旋轉式硬碟或壅塞的網路磁碟區。若為數十微秒,則表示使用本機快閃儲存裝置。
網路連接 SSD 儲存裝置比本機 NVMe 差嗎?
每次作業的速度較慢,故障方式也不同。每次讀取與寫入都會增加網路往返時間,因此即使兩者都是快閃儲存裝置,延遲仍然較高。相對地,資料不會儲存在單一實體主機上,因此主機故障不會同時使該磁碟區失效,供應商也較容易提供快照與即時遷移。對延遲敏感的資料庫,請選擇本機快閃儲存裝置。若磁碟區的存續比微秒級延遲更重要,請選擇網路儲存裝置。