標籤:
IaaS vs. PaaS vs. CaaS如何選擇?:
網路託管的技術發展很快,選擇如此之多,使用者很容易感到不知所措,甚至會開始質疑是否現在所用的服務,對於當前的業務和需求來說是否是最好的選擇。本文會通過以下幾個服務產生的背景,分析其差異:
基礎設施即服務(IaaS)
平台即服務 (PaaS)
容器即服務(CaaS)
讀完本文你應該會對以下內容有充分的瞭解:
每一種服務實際上意味著什嗎?
為什麼這種服務對你很重要?
哪一種解決方案對你來說最有意義?
當然這些都要根據你的實際情況考慮。
專用伺服器/Bare Metal
網路託管服務的基礎,都是塞滿了伺服器、交換器、路由器、存放裝置陣列和其他網路裝置的資料中心。我們要討論的PaaS / IaaS /CaaS是上層的東西,他們加上一層抽象層使管理更容易,並使那些過去運行緩慢或必須手動完成的任務自動化。
專用伺服器,即我們所知的Bare Metal有他的優缺點。
優勢
效能——你正在直接使用電腦,中間沒有任何附加的抽象層的開銷,例如虛擬化;
可靠性——在沒有抽象層與虛擬化的情況下更不容易出錯;
資源用度——你的進程不會和其它的虛擬機器或進程,去競爭CPU,記憶體和頻寬等資源。
缺陷
管理困難:bare metal中沒有AMI貨鏡像的概念,所以不能快速複製;
價格:多數情況下實用bare metal需要提前為硬體付費,還要支付放機器的房租。停下這些機器並不能幫你節省開支,你需要做好預算;
Bare metal環境下,所有的進程和應用都運行在同樣的作業系統上。出於擴充性的考慮,通常會在一台伺服器上只運行一個任務,比如web伺服器,資料庫伺服器。
虛擬化:讓事情簡單化
顯然這些缺點產生的影響蓋過了優點,虛擬化成了很自然的選擇。
什麼是虛擬化?
簡單來說,虛擬化將物理機分隔成了更小的虛擬伺服器,如果你的物理機有2個雙核的CPU和16G的RAM,你可以分成8個1 CPU和16GB RAM的虛擬機器。
優勢
虛擬機器可以複製;
為了安全和災備,可以備份虛擬機器鏡像
缺陷
從虛擬化到IaaS的質變
啥是IaaS?
根據這些特性,2006年亞馬遜推出了AWS服務及其EC2的產品。
為什麼這次進化如此重要?
以前當你想要載入一個線上業務時,你必須做很多計劃,以確保有資料中心和足夠的伺服器和儲存空間來承載你的業務增長,足夠的頻寬來支撐你的使用者流量。做這個計劃不容易,特別是對於早期的、未來與發展路線都不確定的業務。
1.開發人員不再被硬體資源所束縛:
可以迅速把想法付諸實踐;
如果成功了,服務能輕鬆地隨之增長;
如果失敗了,停掉虛擬機器就沒有額外的花費了。
2.資料中心變得更自動化:
完全自動化的基礎設施成為現實;
Web基礎設施可以根據需求自動擴充和收縮;
IaaS的誕生確實是很重要的裡程碑,但隨著技術的發展,人們也在想是否有更簡單的使用虛擬資源的方式。『我想要一個SQL服務,你卻給我一台虛擬機器?』這個思考了催生了PaaS和容器技術,有趣的是,很多PaaS的供應商都運行在IaaS之上,比如最受歡迎的是Heroku運行在AWS上。同時PaaS所依賴的底層技術又是CaaS的標準交付物。
PaaS雖然簡化了開發人員部署和管理應用,但也向開發人員隱藏了實現的細節,例如管理伺服器,負載平衡,DNS等等。
PaaS減少了開發人員將應用從idea到實現的時間,使那些原本需要手動的進程自動化,讓開發人員專註於應用的開發,從這些角度來說,PaaS的產生是一大進步,就像從Bare Metal到IaaS的轉變。
PaaS難以構建
PaaS之下有幾個主要組件:
構建系統:將代碼編譯為隨時可以啟動並執行格式,並將其儲存起來供以後使用;
應用管理資料庫:追蹤git修正,構建版本和應用中繼資料;
叢集發送器:把多個伺服器當作一個大的電腦,在這個計算資源集區中運行構建好的應用,並保持對失敗作業的檢測;
負載平衡:合理引流內網和外網的流量;
DNS自動化:當你建立或修改應用時,會自動更新記錄;
最重要的一點:通過FreeBSDjails,solaris zones或Linux Container來隔離使用者間的應用。
最後一點也是Docker爆炸性增長的重要原因。Linux核心對container的支援已經有一段時間,但只有某些大公司或PaaS供應商將其自動化了。比如Docker公司的前身dotCloud,當其底層的容器技術Docker開源出來,立刻在社區得到了廣泛關注。Docker不但使linux container的處理簡單化,還提供了標準化的鏡像格式。
這個功能非常強大,因為很多公司都面臨著使用者爆炸性增長帶來的挑戰:他們希望能擺脫超長的發布周期,達到持續部署;他們想採用面向軟體的架構或微服務架構;他們希望實現自動部署和測試新代碼,並且在流量激增時儘可能做到收放自如。但問題是沒有資源或必要的經驗向Team Dev提供該功能,所以他們將這些需求外包給了PaaS平台。不幸的是當你這樣做的同時也放棄了很多控制權,花了很多錢,卻被綁定在了PaaS供應商之上。
最好的選擇是在你自己的資料中心或者雲賬戶中運行一個PaaS,在那裡你擁有完全控制權,並且你的團隊可以直接部署應用,建立一個真正的DevOps文化。Docker,和其驅動的標準化的生態系統正在大步前進使之成為可能。
容器託管平台/CaaS
那麼CaaS是什麼呢?首先,上一段中PaaS所具備的功能CaaS都有:自動化構建系統,叢集調度,負載平衡,自動DNS,服務發現等,也就是說你能在CaaS上使用容器,託管複雜的分布式多層應用。
Docker鏡像取代了janky buildpacks,很容易進行構建與測試,可以在部署之前確保它們能工作;同時不再局限於PaaS供應商提供的整合功能,任何能構建成Docker鏡像的應用都能在其上運行。
由於Docker的可移植性,你的應用更容易在各個CaaS平台間遷移。你不再糾結於為一個複雜問題建立解決方案,或者耗費人力學習某個供應商的自動部署工具。
但是選擇適合的Docker託管平台有一些需要注意的事:
目前已經有了一些CaaS供應商,你可能不知道選哪個。但是只要你的應用Docker化了,就很容易去測試他們;簡單到什麼程度?讀一讀靈雀雲使用者文檔你就知道了:http://docs.alauda.cn/tutorial/introduction.html;
像Triton或ECS等託管供應商的解決方案,依然會將你綁定,而Docker最令人興奮的優勢恰恰在於它的可移植性;
許多CaaS解決方案的整個管理系統都運行在他們自己的硬體上,在你的伺服器上只運行一個代理串連到他們API上。所以如果他們的硬體宕機了,你的伺服器叢集也會被停掉;靈雀雲整合了AWS、Azure、金山雲等多個IaaS平台,提供跨雲部署、遷移和容災服務,保證了某個IaaS宕機情況下,您的服務不間斷;
那些允許你在防火牆之後運行整個系統的解決方案是複雜的,並且會有很多片段任務,這需要一個團隊來管理和升級;
而那些比較簡單的,可以運行在防火牆之後的解決方案,有時會不太重視高可用性;
值得從PaaS到CaaS嗎?
如果你已經使用了PaaS,還應該花時間學習Docker嗎?你的團隊會同意你的想法嗎?你應該花時間學習一個新的容器託管平台嗎?
答案是肯定的,因為PaaS供應商正在向CaaS轉變,不要抗拒容器的這波浪潮,順應它!
例如,一個標準的2X的Heroku執行個體,提供的是一個普通的CPU和1 GB的RAM,要花費320元/月;
而在靈雀雲,運行1 CPU,1GB RAM的Docker容器,只需要58元/月。
團隊中每個開發人員都能在本地擁有一個和生產環境一樣的測試環境,測試他們的代碼,然後構建它。只要測試通過了,就能保證在生產環境通過,這是巨大的效率提升。
IaaS vs. PaaS vs. CaaS如何選擇?