裸金屬伺服器與虛擬機器的區別:效能、隔離與許可證六維對比
裸金屬伺服器是整台物理機歸你獨佔,只是像雲主機一樣線上下單、分鐘級交付;虛擬機器是 hypervisor 從一台宿主機上切出來的一份。沒有這層 hypervisor,裸金屬沒有虛擬化損耗、沒有鄰居爭搶、能按真實物理核買許可證、能自己再裝虛擬化,代價是彈性差、起步規格大。
裸金屬伺服器與虛擬機器的區別,核心在一層軟體:hypervisor。虛擬機器(雲主機、VPS)是 hypervisor 在一台宿主機上切出的一份資源,CPU、記憶體、磁碟、網路卡都經過虛擬化層轉發;裸金屬伺服器(Bare Metal)是整台物理機交給你一個人用,作業系統直接跑在硬體上,只是像雲主機一樣在控制檯下單、自動開通、按小時或按月計費。有沒有這層 hypervisor,決定了下面六個維度的全部差別,先用一張表總覽,再逐項展開。
| 維度 | 裸金屬伺服器 | 虛擬機器 |
|---|---|---|
| 效能損耗 | 無虛擬化層,IO 延遲與記憶體存取接近硬體本身 | 計算型負載損耗小,磁碟、網路 IO 和記憶體密集型負載損耗明顯 |
| 資源爭搶 | 單租戶,整機資源獨佔 | 多租戶共享宿主機,CPU、快取、記憶體頻寬、磁碟 IO 都可能被鄰居影響 |
| 許可證 | 按真實物理核授權,核數自己選 | 按 vCPU 授權,或被要求按整台宿主機甚至叢集的物理核授權 |
| 巢狀虛擬化 | 可以直接裝 KVM、ESXi、Hyper-V 做自己的虛擬化平台 | 需要雲廠商開放巢狀虛擬化,效能損失大 |
| 彈性 | 開通分鐘級到小時級,規格固定,不能熱遷移 | 秒級到分鐘級建立,可改規格、快照、熱遷移、自動伸縮 |
| 價格 | 單位算力更便宜,但按整機起步 | 可以買很小的規格,單位算力更貴 |
效能損耗:CPU 差得少,IO 和記憶體差得多
有了 Intel VT-x、AMD-V 這類硬體輔助虛擬化之後,純計算負載在虛擬機器裡的損耗通常只有幾個百分點,跑編譯、轉碼一類任務時兩者差別不大。差別集中在三處:
- 磁碟與網路 IO:虛擬機器的每次 IO 都要經過 virtio 這類半虛擬化驅動或模擬裝置,再由宿主機轉發;雲盤還要再過一層網路。表現為單次 IO 延遲更高、小塊隨機讀寫的 IOPS 上限更低。SR-IOV 直通網路卡能緩解網路部分,但不是所有規格都提供。
- 記憶體存取:虛擬機器用兩級頁表(Intel EPT / AMD NPT)把客戶機實體位址再對映一次,TLB 未命中時的代價比物理機高;虛擬機器看到的 NUMA 拓撲也可能和真實硬體不一致,資料庫按 NUMA 節點綁記憶體的最佳化會失效。裸金屬能開大頁、綁 NUMA、關閉超執行緒,這些對資料庫、記憶體資料庫和搜尋引擎的效果直接可見。
- 時延抖動:宿主機排程、中斷轉發會給虛擬機器帶來微秒級的不確定延遲。網頁應用感覺不到,撮合交易、即時音影片、高頻寫入的時序資料庫會在尾延遲(P99)上看到差別。
一個判斷方法:業務瓶頸在 CPU 算力,虛擬機器夠用;瓶頸在磁碟隨機 IO、記憶體頻寬或尾延遲,裸金屬的收益才明顯。
資源爭搶:鄰居問題只有裸金屬能徹底解決
虛擬機器的 vCPU 一般對應宿主機的一個超執行緒,而不是一個物理核。雲廠商把一台宿主機上的 vCPU 賣給多個租戶,只要總量不超過物理執行緒數就不算超售;但即使不超售,同一個物理核的兩個超執行緒、同一顆 CPU 的 L3 快取和記憶體頻寬、同一塊本地盤的 IO 佇列,仍然是大家共用的。鄰居跑滿了記憶體頻寬,你的 vCPU 使用率看起來不高,程式卻變慢了,監控裡什麼都看不出來。
cgroup 和 hypervisor 能限制的是 CPU 時間片、記憶體容量和磁碟頻寬上限;L3 快取和記憶體頻寬雖然有 Intel RDT 這類劃分技術,但公有云一般不會為每個租戶單獨劃分。裸金屬是單租戶,這些資源全是你的,效能可以復現:今天壓測的結果,下個月不會因為換了鄰居而變化。
另一個和隔離相關的點是安全緩解:Spectre、Meltdown、MDS 這類 CPU 側通道漏洞的緩解措施在多租戶宿主機上通常全部開啟,會讓系統呼叫密集的負載付出可觀的效能代價;裸金屬是單租戶,可以根據自身的風險評估決定緩解開到什麼程度。
許可證:按物理核計費的軟體為什麼偏好裸金屬
很多商業軟體按物理核授權,而不是按 vCPU。這類軟體放在共享虛擬化平台上,帳會算得很難看。以下按公開的許可規則概述,具體以廠商當前條款為準:
- Oracle Database:按 Processor 授權,Processor 數 = 物理核數 × 核心係數(主流 x86 為 0.5)。Oracle 的分割槽策略把 VMware 等多數虛擬化方式歸為“軟分割槽”,不承認按虛擬機器的 vCPU 數授權,要求按這台虛擬機器可能執行到的所有物理主機的全部核心計算。部分公有云被 Oracle 列為認可的雲環境,可以按 vCPU 折算,名單與折算規則以 Oracle 當前政策為準。
- Microsoft SQL Server(按核授權):物理機要為全部物理核授權,每顆 CPU 至少 4 核;虛擬機器按 vCPU 授權,每台虛擬機器至少 4 核。要在一台物理機上跑任意數量的 SQL Server 虛擬機器,需要給全部物理核買 Enterprise 版並附帶軟體保障。
- Windows Server:按物理核授權,每台伺服器至少 16 核;Standard 版允許執行 2 個虛擬機器,Datacenter 版不限數量。
算一筆假設的帳:資料庫需要 8 個物理核。
| 部署方式 | 需要授權的核數 | 說明 |
|---|---|---|
| 共享虛擬化叢集,3 台雙路 16 核宿主機 | 96 核 | 軟分割槽規則下按虛擬機器可能遷移到的全部宿主機計 |
| 單台雙路 16 核裸金屬 | 32 核 | 只為這一台機器授權,但多買了 24 核 |
| 單路 8 核高主頻裸金屬 | 8 核 | 核數剛好,主頻高,許可證開銷少 |
所以按物理核授權的軟體選裸金屬時,要點不是核數多,而是核數剛好夠、主頻儘量高,再把省下的許可費換成更快的 NVMe 和更大的記憶體。裸金屬上 lscpu 和 dmidecode 能看到真實的 CPU 型號與核數,審計時也拿得出證據。
巢狀虛擬化:想自己做虛擬化平台,只能選裸金屬
在裸金屬上裝 KVM、Proxmox VE、VMware ESXi 或 Hyper-V,就得到一台自己的虛擬化宿主機,效能與自建機房裡的物理機一致。常見用途:自建私有云、給每個客戶或每個環境切虛擬機器、用 Kata Containers 或 Firecracker 這類輕量虛擬機器做容器沙箱、在 CI 裡跑 Android 模擬器、桌面虛擬化。
在虛擬機器裡再跑虛擬機器叫巢狀虛擬化。它要求雲廠商把 VT-x / AMD-V 指令集暴露給虛擬機器,很多雲規格預設不開;即使開了,兩層位址轉換疊加,內層虛擬機器的效能損失明顯,只適合開發測試。登入機器後可以這樣確認:
# 輸出不為 0,說明 CPU 虛擬化擴充套件對這台機器可見,能裝 KVM
grep -cE 'vmx|svm' /proc/cpuinfo
# 如果你拿到的是裸金屬、想讓裡面的虛擬機器再做一層虛擬化,
# 檢查 KVM 模組的巢狀開關(Intel 看 kvm_intel,AMD 看 kvm_amd),Y 或 1 表示允許
cat /sys/module/kvm_intel/parameters/nested 2>/dev/null
cat /sys/module/kvm_amd/parameters/nested 2>/dev/null
第一條命令在虛擬機器裡輸出 0,說明這台虛擬機器裝不了 KVM,只能換規格或換裸金屬。
彈性:虛擬機器秒級,裸金屬分鐘級
虛擬機器的強項:建立以秒到分鐘計,可以線上改規格、加磁碟、做快照、熱遷移到另一台宿主機,配合自動伸縮按負載增減機器,關機後不再為算力付費。
裸金屬的彈性要弱一截:開通需要真機上電、裝系統,分鐘級到小時級;規格由物理配置決定,加記憶體就是換機器;沒有熱遷移,硬體故障就是你的故障,要靠自己的高可用架構兜底;用本地盤的裸金屬一般沒有快照,備份得自己做。雲廠商的裸金屬把系統盤放到雲盤、加入 VPC 以後,可以做到硬體壞了把雲盤掛到另一台裸金屬上快速恢復,這已經比傳統獨立伺服器好很多,但仍不是虛擬機器那種隨手複製一百台的彈性。
負載一天內波動大、機器數量需要跟著流量變、經常建環境又銷燬,選虛擬機器;負載穩定、機器長期開著、規模固定,彈性對你沒有價值,裸金屬更划算。
價格:單位算力裸金屬便宜,起步規格虛擬機器便宜
同一代 CPU,按每個物理核算,裸金屬比虛擬機器便宜,原因是整機算力被切成小份出售時,每一份都要分攤虛擬化平台、排程與維運的成本,小規格的單價本來就定得更高。但裸金屬按整機賣,起步就是幾十核、上百 GB 記憶體;虛擬機器可以買 1 核 1 GB。
用一組假設數字說明(不代表任何服務商報價):裸金屬 32 核 128 GB 每月 ¥3,200,相當於每核 ¥100;虛擬機器 8 vCPU 32 GB 每月 ¥1,200,相當於每 vCPU ¥150。
| 需求 | 虛擬機器方案 | 裸金屬方案 | 更省的一方 |
|---|---|---|---|
| 8 核 32 GB 的小應用 | 1 台,¥1,200 | 1 台,¥3,200,剩 24 核閒置 | 虛擬機器 |
| 24 核 96 GB 的資料庫 | 3 台拼接,¥3,600,且跨機器 | 1 台,¥3,200,還多 8 核 | 裸金屬 |
| 需求跑滿 32 核 | 4 台,¥4,800 | 1 台,¥3,200 | 裸金屬 |
規律是:你能把一台裸金屬用滿六七成以上,它就比等量的虛擬機器便宜;只用得到一小部分,虛擬機器便宜。再加上許可證那一節的差異,資料庫、中介軟體這類按核授權又吃 IO 的負載,往往是裸金屬最先回本的地方。
怎麼選,以及怎麼確認拿到的真是裸金屬
按業務選
| 業務 | 建議 | 原因 |
|---|---|---|
| Oracle、SQL Server 等按核授權的資料庫 | 裸金屬 | 許可證按真實物理核,IO 延遲低 |
| MySQL、PostgreSQL 大例項,Redis、Elasticsearch | 裸金屬 | 本地 NVMe、大頁記憶體、NUMA 繫結收益明顯 |
| 撮合、即時競價、音影片轉發等尾延遲敏感業務 | 裸金屬 | 沒有排程抖動和鄰居干擾 |
| 自建虛擬化、容器沙箱、雲遊戲、模擬器叢集 | 裸金屬 | 需要完整的虛擬化擴充套件 |
| GPU 訓練與推理 | 裸金屬 | 整卡獨佔,PCIe 直連 |
| 合規要求物理隔離 | 裸金屬 | 單租戶,能出具硬體資訊 |
| Web 前端、API、微服務 | 虛擬機器 | 無狀態、橫向擴充套件,彈性有價值 |
| 開發測試、CI 節點、臨時環境 | 虛擬機器 | 用完即刪 |
| 負載波動大的業務 | 虛擬機器 | 自動伸縮,按量付費 |
| 一兩個核就夠的小應用 | 虛擬機器 | 裸金屬起步規格浪費 |
驗收:確認拿到的是物理機
付了裸金屬的錢,拿到的應該是物理機。登入後用幾條命令核對:
# 物理機輸出 none;虛擬機器會輸出 kvm、vmware、microsoft 等
systemd-detect-virt
# 虛擬機器的 CPU 標誌裡有 hypervisor,物理機沒有,輸出應為 0
grep -c hypervisor /proc/cpuinfo
# 物理機顯示 Dell Inc.、Supermicro 等主機板或整機廠商;虛擬機器顯示 QEMU、VMware, Inc. 等
cat /sys/class/dmi/id/sys_vendor
cat /sys/class/dmi/id/product_name
# 核對 CPU 型號、插槽數、物理核數與超執行緒是否與訂單一致
lscpu | grep -E 'Model name|Socket|Core|Thread'
再看兩件事:一是有沒有帶外管理能力,真正的物理機應該能提供電源控制、啟動項設定、掛載 ISO 和看到 BIOS 畫面的控制檯,哪怕是透過服務商面板轉一道(IPMI 遠端管理指南解釋了這些能力從哪來);二是磁碟,nvme list 或 lsblk -d -o NAME,MODEL,SIZE 應該能看到真實的盤型號(Samsung、Intel、Micron 等廠商型號),虛擬機器裡看到的通常是 QEMU HARDDISK、Virtual Disk 這類虛擬裝置名,virtio 磁碟的型號欄甚至是空的。兩項都對得上,這台機器才是你獨佔的物理機。
常見問題
裸金屬和雲主機的區別是什麼?
雲主機是虛擬機器,裸金屬是物理機,二者都由雲平台線上開通,多數雲廠商的裸金屬也能接 VPC 和雲盤。區別在於裸金屬沒有 hypervisor,獨佔整機的 CPU、記憶體和本地盤,不能像雲主機那樣秒級建立、熱遷移或隨意改規格。
裸金屬伺服器就是獨立伺服器嗎?
硬體形態一樣,都是一台物理機。差別在交付方式:傳統獨立伺服器由機房人工上架、按月出租;裸金屬由雲平台自動化交付,常見按小時計費,可以加入 VPC、掛雲盤。市面上兩個詞經常混用,看合同裡的具體條款比看名稱更可靠。
裸金屬上能跑 Docker 嗎?
可以,而且是常見用法。容器不需要虛擬化擴充套件,裸金屬上跑 Kubernetes 節點省去了一層 hypervisor 損耗,也更容易用上大頁記憶體、NUMA 繫結等最佳化。
虛擬機器 8 vCPU 和裸金屬 8 核一樣快嗎?
通常不一樣。vCPU 多數對應一個超執行緒而不是一個物理核,8 vCPU 可能只是 4 個物理核的 8 個執行緒;是否超售、宿主機負載也會影響。裸金屬的 8 核是 8 個真實物理核,還可以按需關閉超執行緒。