Virtual Server
virtual server就是hypervisor software創造出來的虛擬的邏輯運算單元,彷彿一個真的獨立運行的機器,在其上可以安裝不同的OS,即便完全跟host machine的OS不同也沒關係。有兩種架構:
第一種是bare metal,hypervisor軟體直接跑在硬體上,另一種是hosted,hypervisor軟體仍然跑在host machine的OS之上。
資源如何分享呢? host machine上的CPU通常是多核心的,每個核心當然又可以跑多執行緒,而hypervisor軟體利用intel的hyperthreading技術,把每個thread可以視為一個"virtual cpu",所以這樣所有的virtual server都有了運算資源,當然記憶體和storage的虛擬化分享也可以類似泡製。
每個host machine也配備多個網路卡介面(NICs),所以virtual servers也能有獨立的網路資源。
Auto scaling
virtual server可以依照客戶使用量做自動的資源增減。由於virtual server是虛擬的單元,這樣的scaling是橫向的,也就是需要的時候就多開幾個virtual servers,而不是去縱向置換成硬體能力更強大的server。
橫向的scaling才會沒有限制。
Load balancing
利用一台gateway機器來分配incoming requests給不同的virtual server,避免某幾台virtual server負擔過重。分配不受地理條件的限制,亦即有可能分配到不同地理區域的host machine上的virtual servers。
Bare metal servers
意思是cloud vendor可以出租整個physical host machine給需要的客戶,也就是非分享的machine,所以不會有"noisy neighbors effect",這讓客戶可以建立off-premises private cloud,有充分的主控權。Colocation
這算是一種機房配置,客戶可以把自己的私人機器放入cloud vendor的機房內,享有cloud vendor的硬體配置與安全保護,但又有自己的私人機器安全性與隱私。舉例來說,安裝一個colocation的gateway來連接on-premises與off-premises 的hybrid cloud。
Containers
containers跑在OS上面,一個container image封裝了需要執行某個application所需要的一切runtime libraries,而且被高度的isolated,只看到自己的namespace下的file system (in memory)。有名的container management software為Docker。
containers和virtual server的異同:
container算是sandboxes,可以快速deploy,不像provision virtual server那樣花費時間,但也由於share同一個host OS,這也樣containers受限了,也就是一台機器上不能有不同OS 的application sandboxes。
containers適合用來開發micro services,因為不同的micro services之間的開發時間和流程不一樣,用containers來deploy就不會影響彼此services之間的版本衝突等。(?! 好像有點牽強,不熟悉這種開發過程)
Server-less computing
這是最lightweight的compute (意思是computation unit),這不用host server / container apps,而是只做request/event handlers,可以稱為Function as a Service, FaaS。之前在erlang有玩過,因為erlang沒有state,沒有mutables,所以在語法層面可以支援stateless server,也就是server-less。
AWS的implementation為 AWS Lambda。
沒有留言:
張貼留言