code

2018年1月8日 星期一

Cloud Computing Infrastructure 2 - virtual server introduction

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。

沒有留言:

張貼留言