在上文提到叢集技術,就是將多台電腦偽裝成一台電腦,以讓電腦可以在理論上無限地擴充,解決了電腦資源不足的問題。如果一台電腦來不及處理,那就開兩台偽裝成一大台,處理電腦算力不足的效能瓶頸。
所以理所當然地,在由『物理機』電腦所組成的叢集裏頭,最小單位是『一台』物理機。
可是電腦越來越強大。
單一台電腦 64 核心 (core) 128 執行緒 (thread) 256G 記憶體 (ram) 之類的配置開始誕生 (這種配置 IT 人員會簡稱為所謂的:「64 c 128t 256G」,講的就是這個),這種放在三十年前儼然如同夢話一樣的電腦規格開始普及。
如果你是 3A 的遊戲玩家,應該連家用主機都有 6 顆核心 12 執行緒以上吧?但讓阿姆斯壯上月球的電腦算力,其實並不強過現在的任何一台尚未過保固的智慧手機。
這種情況就叫做效能過剩。
通常效能都會伴隨更大的能耗,所以筆電等移動端消費產品其實不見得要攻頂。並不是價格的問題,是因為假設你沒有使用到效能,但閒置的效能還是會產生功耗,電池就越快沒電,整體使用體驗反而會有所下滑(不過現代筆電很聰明,不但會有自動關核心的功能,還有所謂的大小核設計之類的,五花八門地做好續行與效能的平衡)。
在伺服端的部分,效能過剩還會產生一些問題。
我們用範例來描述伺服器端效能過剩的場景。
很多時候,不要說多台物理機電腦組成的叢集了,我們甚至根本不需要『完整一台』物理機,因為『完整一台』的效能太強了。
假設我們有一個需求,需要有一台 1c 4G 的電腦去執行。
那麼直覺來說就是去找一台 1c 4G 的物理機來執行對吧?
可是機房用地很貴 (是真的很貴,還要考慮空調和雙來源供電什麼的)。
那麼根本沒理由在土地面積寸土寸金的機房重地,擺一台性能很差的電腦。要知道,不管電腦的性能是多少,它體積就是相同 (伺服器都會做的一樣大,這個在 IT 這裡的單位稱做『U』);供耗也是個問題,十台 1c 4G 的電腦供耗,絕對高過一台 10c 40G 的電腦。
但是物理機的電腦,又沒有所謂的 0.5 台這種事情,怎麼可能有電腦是半台的。
為了處理這件事,把太大的電腦給變小,『虛擬機 (Virtual Machine,VM)』就誕生了。
虛擬機就是,在『物理機』電腦『裡面』,透過軟體方法去『模擬』出一台電腦。
在不『超過』作為『宿主』物理電腦機器的極限範圍下,裡面『模擬』的電腦想開多大就開多大,想開幾台就開幾台。也就是說我可以在一台物理電腦內模擬出 2 x 0.5 台電腦,或是 4 x 0.25 台電腦,藉此在電腦變小的情況下發揮彈性。
用軟體模擬的方式產生出虛擬的電腦,這樣就在很大程度上解決了需要多台低性能電腦的場景。能夠在體積及供耗不變的情況下,彈性地調整所需要的配置,同樣的主機就可以做出更多元的功能,以解決大大小小的需求。
多台『虛擬機』將工作在一台作為宿主的『物理機』上,透過稱為『Hypervisor』的技術監控多臺 VM,以這種方式去建立所對需要的電腦規格,然後進行監視與管理。
到這個步驟,『叢集』就不需要是把『物理機』連接起來了。
因為叢集的連接主體是『電腦』,是不是『物理機』根本沒有人在乎,在這個時候,架構變成這樣:
----------------------機房---------------------
| X 電腦 (物理) | Y 電腦 (物理) | Z 電腦 (物理) |
人:【客戶端設備】 -> 伺服器 【叢集 | 【A1 虛擬機】 | 【A2 虛擬機】 | 【A3 虛擬機】 |】
人:【客戶端設備】 -> 伺服器 【叢集 | 【B1 虛擬機】 | 【B2 虛擬機】 | 【B3 虛擬機】 |】
人:【客戶端設備】 -> 伺服器 【叢集 | 【C1 虛擬機】 | 【C2 虛擬機】 | 【C3 虛擬機】 |】
----------------------------------------------
機房的物理機規格買再好也不會浪費,同一面積的機房能設置的電腦『台數』就又更多了;電腦與電腦彼此間又有完整隔離,重點是其中一個物理機就算陣亡了,所有服務也都不會就此停擺,服務如果資源耗盡也可以動態追加,算是很完美的解決方案。
近期比較有名的關於虛擬機的新聞,應該是括元系統的周杰倫大巨蛋搶票案例吧。
括元系統宣稱用了 1 萬台虛擬機,擋下周杰倫大巨蛋演唱會的 89 萬次搶票流量,這就說明了擁有『括元系統』的公司,並不是把所有的機器都用來跑『括元系統』。
他們公司的機房可能有跑其他業務,也可能有閒置資源。而在預期即將面臨巨大流量需求的時候,再把不急用的服務關掉,將所有電腦資源『臨時集合』到括元系統,以擋下接下來預期的恐怖流量 (也可能它們沒有養機房,是租機房,那就是有需要時再臨時打開就好)。
雖然我覺得一萬台虛擬機是唬爛公關行銷就是了,確實我不知道括元系統的策略是怎麼弄的,但 89 萬的搶票潮用 1 萬台虛擬機去分,不是意味著 1 台虛擬機只可以處理 89 下請求嗎?這……不可能吧?
總之,在擋下這波流量以後,『括元系統』就會釋放掉緊急召集的虛擬機,讓這些虛擬機回歸閒置或是其他任務,這就是虛擬機可以帶來的靈活好處。
虛擬機不只是在伺服端被運用,在客戶端也有很多利用的例子,因為虛擬機具有『隔離性』和『彈性』。
比如說,你可以在你的個人電腦內安裝虛擬機軟體,再以虛擬機瀏覽一些可能有風險的資源。假設該資源真的導致虛擬機中毒了,你就直接將虛擬機刪除並重建即可,這樣就不會影響到你的電腦主作業系統。
也有一些用法,是在臨時需要多台電腦的時候,直接在電腦內開對應台數的虛擬機,比如說通訊測試之類的。
或是需要使用其他作業系統時,也可以用虛擬機模擬出完整可用的配置,諸如手機模擬器等等,就是典型的虛擬機應用範例,你可以用虛擬機模擬手機作業系統,而不是買一台手機。
最終極的用法,就是在空著的個人電腦中直接安裝『虛擬機專用作業系統』,然後再來在其系統之上開 Windows 等系統做操作,並在需要的地方做硬體直通。這樣子去配置的電腦就很容易做擴充,當然缺點就是設定很零碎,不太推薦入門就是了。
用途很廣。
最後,虛擬機是一種概念,實現虛擬機與其 Hypervisor 的產品又有很多家,軟體包含 Hyber-V、VMware、VirtualBox 等等,虛擬機專用的作業系統有 PVE, ESXi……