閱讀934 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java程序員也應該知道的係統知識係列之虛擬化

作者:林昊

virtual

 

如今服務器的配置越來越高端,對於Java應用而言,通常很難充分利用物理機資源,這其實並不是說Java本身沒法做到用那麼多的資源,而是因為通常Java是用於實現應用,應用很多的情況下對內存、cpu的需求都不會太高,這就使得我們需要有一些辦法來充分提升機器的資源使用,虛擬化就是其中一種常用的方法。

 

虛擬化簡單來說就是把一台物理機虛擬為N台機器,對於使用者而言通常會覺得虛擬機和一台單獨的機器沒什麼區別。

 

對於服務器的虛擬化而言,具體關於實現虛擬化的技術像PV/FV等這些就不在這裏講了,感興趣的同學可以自行google。

 

用來實現服務器虛擬化中比較好的產品是xen,xen的成熟度很高,易操作比較穩定性不錯,用xen可以很簡單的在一台物理機上創建N個虛擬機。

CPU的話為每個虛擬機分配的其實都是virtual的,也就是多個虛擬機可能共用一個CPU,這也是為什麼有些虛擬機上會看到%st這個指標是有值的,這個值表示的就是多個虛擬機共用一個CPU的時候,被其他虛擬機用掉的CPU,對於一些敏感的場景,可通過綁定CPU的方式來做到隔離,避免互相影響,但相對來說這樣的利用率就不能發揮錯峰填穀了,在運行過程中可通過xen的管理工具來動態的調整cpu的綁定,創建的虛擬機的cpu core數隻能在在設定的最大cpu個數範圍內調整。

 

從上麵可以看到,可以認為CPU不是一台機器能創建的xen虛擬機的瓶頸因素,瓶頸因素為內存,xen比較難實現內存的共享,所以在創建了虛擬機後,分配給它的內存就占用了,要實現共享的話會對虛擬機的性能有一定的影響,所以通常來說一般是不會開啟的,從這可以看到,如果對於cpu利用不多但內存用的比較多的場景而言,xen虛擬化能提供的幫助是有限的。

 

磁盤/網絡的IO通常是不做隔離的,也就是所有的虛擬機共用,這也是為什麼有些時候大家會碰到io hang住後物理機上所有的虛擬機全都受影響,通常可做的是限製磁盤的容量、網絡的流量。

 

目前的虛擬化技術已經非常成熟,對比虛擬機的性能和直接在物理機上跑的性能,差距也很小(通常看到差距比較大是因為物理機上跑的虛擬機比較多),當然,這還和虛擬機上跑的應用類型有關。

 

對於較多機器的情況下,怎麼合理的規劃虛擬化,其實是個比較複雜的話題,例如虛擬比到底為多少、虛擬機的ip怎麼設計、物理機/虛擬機掛了的情況下怎麼處理等等,這些話題就不在這裏展開講了。

 

除了Xen以外,其實還有很多其他的方案,其中現在用的比較多的還有KVM、LXC,KVM的話在GAE上有使用,LXC比較特殊,所以在這裏還是稍微講下。

 

LXC相對Xen/KVM而言,其實不能算是完整的虛擬化,LXC其實就是物理機上的一個進程,隻支持linux,所以創建出來的虛擬機是沒有獨立的os的,但可以用獨立的用戶體係、ip等,官方的LXC版本創建出來的虛擬機,登錄進去後看到的物理資源等都是物理機的,如果要讓它想一個真正的虛擬機,需要從內核層麵做一些改造,LXC帶來的好處是可以動態的調整cpu的搭配、個數,並且內存超配也是ok的,這樣對於一些場景而言利用率的提升就比較明顯了,感興趣的同學可以去搜下我以前在QCon上講過的一個T4的產品,是基於LXC的。

 

提升利用率是個比較大的話題,虛擬化是其中的一個技術點,但涉及的點其實還有很多,Google Borg是提升利用率中“神”級的產品,但目前資料非常少,感興趣的可以看下我之前寫過的一篇我猜測的Borg

 

隨著硬件的不斷發展,之後的PC Server的配置將會比現在高很多,到了那個時候,如何提升機器利用率就是個更複雜的話題,一台物理機上跑的虛擬機太多的話也不太適合,主要的是物理機掛了影響會比較明顯,因此如何在虛擬比到達上限的情況下有效的提升利用率會是再過幾年要麵臨的大話題。

 

最後更新:2017-04-03 07:57:08

  上一篇:go Welcome Docker to SUSE Linux Enterprise Server【水平有限,中英對照,求糾錯】
  下一篇:go hi3531 SDK 編譯 uboot, 修改PHY地址, 修改 uboot 參數 .