天天看點

《PaaS程式設計》一2.2 開發者早期的選擇

本節書摘來自華章出版社《paas程式設計》一書中的第2章,第2.2節,作者 lucas carlson,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

不幸的是,擴充問題和資料丢失的情形非常普遍,主要是由于上一代應用開發者幾乎沒有太多的選擇。大部分人要麼選擇共享web主機,要麼選擇專用web主機。如今,我們可以在兩者之間加入一個更為強大,并且相對比較新的選擇,那就是所謂的平台即服務。在我們深入平台即服務之前,先來檢視一下前兩種方案。

通常認為,web開發者剛開始的時候使用共享web主機是一種最容易的方式。例子包括godaddy、yahoo!、comcast以及如今的很多網際網路服務提供商。

共享主機的核心概念就是一個ftp賬号,即為登入ftp應用伺服器而擷取的憑證資訊。這個伺服器通常托管着幾千個,甚至數萬個網站。一般情況下,伺服器是非常強大的,但是會很快陷入困境。如果這些網站中有一個或者兩個開始出名,即使伺服器能力非常強大,也會很快耗盡所有的伺服器資源。于是會出現這樣的結果:上千個網站變得異常緩慢,甚至沒有任何響應。

使用共享主機有利的方面就是價格。共享主機價格便宜,有時候還是免費的。而且,是不需要手工維護的。開發者不需要安裝安全更新檔包、不需要管理軟體、也不需要深入地了解軟體是怎麼編寫的,隻需要知道怎麼編寫html代碼就可以了。開發者将寫好的html代碼交給服務商,後者會處理其他所有的事情。但是,由于非常便宜,服務供應商可能無法将所有的事情都處理得很好。例如,由于不能超出計算能力的限制,是以導緻無法擴充規模。但是,對于簡單的應用來說,通常還算不錯的。

雖然,對于主機托管供應商來說,規模上比較劃算,但這并不是非常可靠,尤其對于需要搭建一個網店、一個複雜的網站、甚至一個給客戶提供穩定的聯系資訊通路的網站等應用。

另外一個不足之處就是安全。你的代碼可能與其他10 000份代碼共存于一個系統之上。記住,一個普通的網站每天遭到數百次的安全攻擊是很容易的。将這一資料乘以10 000,就可以看到将正式的網站放在共享主機上的風險有多大了。

盡管有這些缺點,開發者依然覺地使用共享主機來托管個人網頁、分享觀點或者嘗試新的想法,還是比較有用的。共享主機比較适用于開發時還不确定是否需要投資獨立的伺服器,并且還不需要面對規模擴充問題的時候。但問題是,一旦需要擴充,從共享主機遷移到獨立主機會經曆一段痛苦的過程。

由于共享主機便宜而且易于使用,是以,開始的時候,開發者——尤其是web開發者——通常會選擇共享主機。但在經曆了這一階段之後,通常都會轉向獨立web主機。這和在家裡通過網際網路托管自己的伺服器一樣簡單。但是,獨立主機也會依據不同的選項,提供不同級别的服務和可伸縮性。

以下是可供選擇的獨立主機類型的一個清單,按照控制程度(通常也是性能)降序排列:

托管伺服器

管理伺服器

虛拟私有伺服器

基礎設施即服務

下面我們來深入探讨一下每種類型。

使用伺服器托管,你通常得自己購買伺服器,然後将伺服器安置在一個可以通過寬帶連接配接的資料中心,并按月付費。托管資料中心提供網際網路通路,有時候也幫助調試或者重新開機伺服器。但是,除了需要預先花錢購買伺服器之外,你還得自己負責維護和管理伺服器。

“管理伺服器”這個名詞有點不是那麼恰當。事實上,對于伺服器的管理是非常有限的。如果ram損壞了,服務商會把記憶體換掉。如果其他硬體有問題,服務商也會将這些硬體換掉。但是,在ram或者磁盤被換掉的時候,他們并沒有把你的資料換回來。是以,對資料進行離線備份就相當必要。

采用管理伺服器有許多不同的好處。通常,不需要自行購買伺服器,隻需要從托管和管理伺服器的供應商那裡直接租用就可以了。相對于其他獨立主機方案來說,管理伺服器可能更快,更穩定和健壯。管理伺服器也會挂掉,但一般不會那麼快。通常是在磁盤失效的時候,而磁盤的平均失效時間在一年或者兩年左右。對比起來,亞馬遜的web服務中短暫的伺服器,差不多每隔幾天或者幾個星期就會當機。管理伺服器不利的一面,就是通常需要幾個星期甚至一個月的時間來開通新的伺服器。

虛拟私有伺服器,或者vps,與管理伺服器非常相似,但它是虛拟的。在桌面環境下,parallels、virtualbox以及fusion等虛拟機軟體可能廣為人知。對于服務端虛拟化來說,可以使用的工具(也叫管理程式)包括xenserver、kvm、virtuozzo、vserver以及hyper-v。

通過虛拟化,可以将擁有若幹tb位元組的ram和數百個處理器核的大型伺服器劃分成若幹個擁有gb的ram和 1~4個核的虛拟伺服器。這就可以比較容易地啟動和運作伺服器,而且相比非虛拟化的獨立伺服器來說,更容易替換。

虛拟化技術可以使每個虛拟伺服器在安全方面獨立于其他伺服器,相對于以多宿主方式在一個apache執行個體上共享伺服器的形式來說,以一種更為全面的方式隔離程序和宿主程式。每個虛拟機都有自己的root賬号,這個賬号在遭受攻擊的時候,沒有辦法通路其他的虛拟伺服器。

vps也有其不利的一面,那就是由于底層的實體資源也是可以共享的,那麼其他的宿主程式就有可能過多地占用你的處理器和磁盤i/o,進而以一種非預期的方式降低程式的性能。

基礎設施即服務類似按需使用的、易伸縮的、具備一個應用程式設計接口(api)的虛拟私有伺服器(vps)。從可用性的角度來看,這是獨立主機最快的實作方式。但是,由于依然需要擷取root通路權限,是以這依舊是一種獨立web主機。與其他主機托管方式最大的不同在于,iaas可以讓伺服器在30秒之内啟動并且運作。iaas可以是獨立的真實的伺服器,但通常是虛拟伺服器。可以用來實作虛拟化的軟體從vmware的vsphere到xen,從citrix到微軟的hyper-v。最流行的iaas就是亞馬遜(amazon)的web服務,它采用xen來虛拟化硬體。

使用iaas的時候,可以得到一個獨立的伺服器以及一個專有的ip位址。但是,必須自己完成所有的系統配置和管理:安裝軟體、安裝和配置apache、配置安全屬性、優化伺服器、優化mysql、增加賬号、分發密碼、設定ssh、生成ssh的密鑰、安裝和更新軟體包,以及確定應用軟體與伺服器上的其他軟體互相相容。

采用iaas的好處在于,可以按照實際需要獲得任意數量的伺服器,并且可以非常快地完成擴充。不利的一面在于,這些伺服器通常要比其他獨立主機方案慢。由于沒有辦法提供高性能和高可靠性,通常這些伺服器的運作都是短暫的,意思是可能在沒有任何通知的情況下就當機。是以,必須從系統的角度進行設計,以專門處理非預期的伺服器當機,這就增加了複雜的層次。

比較成本

這幾種獨立web主機的成本構成差别很大。

主機托管方式,開始的時候需要支付購買伺服器的固定成本,然後隻需要在托管資料中心租用場地即可。是以,相對于小規模的iaas來說,後繼成本極低。很多大型應用都采用了主機托管的方式,通過硬體的投資來節約每個月的成本。這也被稱為通過增加資本支出(capex)來減少日常營運成本(opex)。主機托管的成本也有所不同,可以在剛開始的時候每月花費大約1000美元租一個機架,最多可以放置16台伺服器。記住,采用主機托管,開發者仍然負責維護和管理這些伺服器,是以開發者需要進入資料中心,安裝機器,将它們互相連接配接,并且在伺服器出故障的時候,自己去解決問題。

相對而言的另一端,即采用iaas的時候,則要按照實際需要使用的資源,按小時支付特定的費用(也稱為通過增加日常營運成本來減少前期的資本支出)。通常,有很多不同的組合方案可供選擇,包括不同的cpu速度、磁盤大小以及i/o性能。

由于iaas通常按小時付費,并且不需要長時間的保障,是以在短時間之内需要很多伺服器的時候就非常友善,例如,在一定量的資料之上進行大規模計算。這個應用場合會對預算造成多大的影響呢?

假設我們需要進行dna測序。這一工作有着确定的一組問題以及一組資料。使用iaas,就可以啟動上千台伺服器,在特定的時間之内完成dna測序,然後再關閉這些伺服器。那麼整個過程隻需要為使用這些伺服器的實際時間支付費用。如果購買上千台伺服器,那麼完成dna測序之後,伺服器将無事可幹,而采用iaas則隻需要按照實際需要付費。

web應用的生命周期通常要比dna測序程式長很多,是以,表面上看來,采用capex可能要比opex更劃算些,因為可以得到長期的服務。采用iaas的方式來托管web應用就不那麼經濟了。但是,由于web應用程式可能會遇到通路峰值,是以,當考慮到準備上一場脫口秀或者一項新節目的時候,我們就必須要準備好應付随之而來的網站通路流量地增長。當采用伺服器托管方式時,必須首先購買伺服器,等待幾周的時間,然後将它們放置到資料中心,并花費數周的時間安裝配置。而采用基礎設施即服務的方式時,則可以每天24小時的調用自動化的應用程式設計接口,并且可以在數分鐘之内加入上千台伺服器。在通路流量減少之後,則又可以釋放這些伺服器,并且僅需要為實際使用的時間支付費用。

使用iaas最常見的問題就是,由于伺服器通常都不是永久的,是以,必須采用某種方式的持久化塊存儲,用于儲存資料。例如,當采用mysql作為資料庫時,在伺服器當機而又不想丢失資料的情況下,就必須要将資料持久化到塊儲存設備或者其他類似的持久化儲存設備上。這些服務以及其他一些服務需要額外按小時付費。

基礎設施即服務是一種按需所求的系統。是以,可以按照實際需要增加服務并且按小時支付費用。

繼續閱讀