雲端計算的三種服務模式:IaaS,PaaS和SaaS

iamdll發表於2019-03-19

 “雲”其實是網際網路的一個隱喻,“雲端計算”其實就是使用網際網路來接入儲存或者執行在遠端伺服器端的應用,資料,或者服務。

雲也是分層的
任何一個在網際網路上提供其服務的公司都可以叫做雲端計算公司。其實雲端計算分幾層的,分別是Infrastructure(基礎設施)-as-a-Service,Platform(平臺)-as-a-Service,Software(軟體)-as-a-Service。基礎設施在最下端,平臺在中間,軟體在頂端。別的一些“軟”的層可以在這些層上面新增。

 IaaS: Infrastructure-as-a-Service(基礎設施即服務)
第一層叫做IaaS,有時候也叫做Hardware-as-a-Service,幾年前如果你想在辦公室或者公司的網站上執行一些企業應用,你需要去買伺服器,或者別的高昂的硬體來控制本地應用,讓你的業務執行起來。
但是現在有IaaS,你可以將硬體外包到別的地方去。IaaS公司會提供場外伺服器,儲存和網路硬體,你可以租用。節省了維護成本和辦公場地,公司可以在任何時候利用這些硬體來執行其應用。
一些大的IaaS公司包括Amazon, Microsoft, VMWare, Rackspace和Red Hat.不過這些公司又都有自己的專長,比如Amazon和微軟給你提供的不只是IaaS,他們還會將其計算能力出租給你來host你的網站。

PaaS: Platform-as-a-Service(平臺即服務)
第二層就是所謂的PaaS,某些時候也叫做中介軟體。你公司所有的開發都可以在這一層進行,節省了時間和資源。
PaaS公司在網上提供各種開發和分發應用的解決方案,比如虛擬伺服器和作業系統。這節省了你在硬體上的費用,也讓分散的工作室之間的合作變得更加容易。網頁應用管理,應用設計,應用虛擬主機,儲存,安全以及應用開發協作工具等。
一些大的PaaS提供者有Google App Engine,Microsoft Azure,Force.com,Heroku,Engine Yard。最近興起的公司有AppFog, Mendix 和 Standing Cloud

SaaS: Software-as-a-Service(軟體即服務)
第三層也就是所謂SaaS。這一層是和你的生活每天接觸的一層,大多是通過網頁瀏覽器來接入。任何一個遠端伺服器上的應用都可以通過網路來執行,就是SaaS了。
你消費的服務完全是從網頁如Netflix, MOG, Google Apps, Box.NET, Dropbox或者蘋果的iCloud那裡進入這些分類。儘管這些網頁服務是用作商務和娛樂或者兩者都有,但這也算是雲技術的一部分。
一些用作商務的SaaS應用包括Citrix的GoToMeeting,Cisco的WebEx,Salesforce的CRM,ADP,Workday和SuccessFactors。

Iaas和Paas之間的比較
    PaaS的主要作用是將一個開發和執行平臺作為服務提供給使用者,而IaaS的主要作用是提供虛擬機器或者其他資源作為服務提供給使用者。接下來,將在七個方面對PaaS和IaaS進行比較:
    1) 開發環境:PaaS基本都會給開發者提供一整套包括IDE在內的開發和測試環境,而IaaS方面使用者主要還是沿用之前比較熟悉那套開發環境,但是因為之前那套開發環境在和雲的整合方面比較欠缺,所以使用起來不是很方便。
    2) 支援的應用:因為IaaS主要是提供虛擬機器,而且普通的虛擬機器能支援多種作業系統,所以IaaS支援的應用的範圍是非常廣泛的。但如果要讓一個應用能跑在某個PaaS平臺不是一件輕鬆的事,因為不僅需要確保這個應用是基於這個平臺所支援的語言,而且也要確保這個應用只能呼叫這個平臺所支援的API,如果這個應用呼叫了平臺所不支援的API,那麼就需要對這個應用進行修改。
3) 開放標準:雖然很多IaaS平臺都存在一定的私有功能,但是由於OVF等協議的存在,使得IaaS在跨平臺和避免被供應商鎖定這兩面是穩步前進的。而PaaS平臺的情況則不容樂觀,因為不論是Google的App Engine,還是Salesforce的Force.com都存在一定的私有API。
    4) 可伸縮性:PaaS平臺會自動調整資源來幫助執行於其上的應用更好地應對突發流量。而IaaS平臺則需要開發人員手動對資源進行調整才能應對。
    5) 整合率和經濟性: PaaS平臺整合率是非常高,比如PaaS的代表Google App Engine能在一臺伺服器上承載成千上萬的應用,而普通的IaaS平臺的整合率最多也不會超過100,而且普遍在10左右,使得IaaS的經濟性不如PaaS。
    6) 計費和監管:因為PaaS平臺在計費和監管這兩方面不僅達到了IaaS平臺所能企及的作業系統層面,比如,CPU和記憶體的使用量等,而且還能做到應用層面,比如,應用的反應時間(Response Time)或者應用所消耗的事務多少等,這將提高計費和管理的精確性。
    7) 學習難度:因為在IaaS上面開發和管理應用和現有的方式比較接近,而PaaS上面開發則有可能需要學一門新的語言或者新的框架,所以IaaS學習難度更低。

未來的PK
    在當今雲端計算環境當中,IaaS是非常主流的,無論是Amazon EC2還是Linode或者Joyent等,都佔有一席之地,但是隨著Google的App Engine,Salesforce的Force.com還是微軟的Windows Azure等PaaS平臺的推出,使得PaaS也開始嶄露頭角。談到這兩者的未來,特別是這兩者之間的競爭關係,我個人認為,短期而言,因為IaaS模式在支援的應用和學習難度這兩方面的優勢,使得IaaS將會在短期之內會成為開發者的首選,但是從長期而言,因為PaaS模式的高整合率所帶來經濟型使得如果PaaS能解決諸如通用性和支援的應用等方面的挑戰,它將會替代IaaS成為開發者的“新寵”。

它們之間的關係主要可以從兩個角度進行分析:其一是使用者體驗角度,從這個角度而言,它們之間關係是獨立的,因為它們面對不同型別的使用者。其二是技術角度,從這個角度而言,它們並不是簡單的繼承關係(Saa.....

三種服務模式
根據現在最常用,也是比較權威的NIST(National Institute of Standards and Technology,美國國家標準技術研究院)定義,雲端計算主要分為三種服務模式,而且這個三層的分法重要是從使用者體驗的角度出發的:
Software as a Service,軟體即服務,簡稱SaaS,這層的作用是將應用作為服務提供給客戶。
Platform as a Service,平臺即服務,簡稱PaaS,這層的作用是將一個開發平臺作為服務提供給使用者。
Infrastructure as a Service, 基礎設施即服務,簡稱IaaS,這層的作用是提供虛擬機器或者其他資源作為服務提供給使用者。


一、SaaS模式
作用
通過SaaS這種模式,使用者只要接上網路,並通過瀏覽器,就能直接使用在雲端上執行的應用,而不需要顧慮類似安裝等瑣事,並且免去初期高昂的軟硬體投入。SaaS主要面對的是普通的使用者。
產品
主要產品包括:Salesforce Sales Cloud,Google Apps,Zimbra,Zoho和IBM Lotus Live等。
功能
談到SaaS的功能,也可以認為是要實現SaaS服務,供應商需要完成那些功能?主要有四個方面:
隨時隨地訪問:在任何時候或者任何地點,只要接上網路,使用者就能訪問這個SaaS服務。
支援公開協議:通過支援公開協議(比如HTML4/5),能夠方便使用者使用。
安全保障:SaaS供應商需要提供一定的安全機制,不僅要使儲存在雲端的使用者資料處於絕對安全的境地,而且也要在客戶端實施一定的安全機制(比如HTTPS)來保護使用者。
多住戶(Multi-Tenant)機制:通過多住戶機制,不僅能更經濟地支撐龐大的使用者規模,而且能提供一定的可定製性以滿足使用者的特殊需求。
二、PaaS模式
作用
通過PaaS這種模式,使用者可以在一個包括SDK,文件和測試環境等在內的開發平臺上非常方便地編寫應用,而且不論是在部署,或者在執行的時候,使用者都無需為伺服器,作業系統,網路和儲存等資源的管理操心,這些繁瑣的工作都由PaaS供應商負責處理,而且PaaS在整合率上面非常驚人,比如一臺執行Google App Engine的伺服器能夠支撐成千上萬的應用,也就是說,PaaS是非常經濟的。PaaS主要的使用者是開發人員。
產品
主要產品包括:Google App Engine,force.com,heroku和Windows Azure Platform等。
功能
為了支撐著整個PaaS平臺的執行,供應商需要提供那麼功能?主要有四大功能:
友好的開發環境:通過提供SDK和IDE等工具來讓使用者能在本地方便地進行應用的開發和測試。
豐富的服務:PaaS平臺會以API的形式將各種各樣的服務提供給上層的應用。
(API
API(Application Programming Interface,應用程式設計介面)其實就是作業系統留給應用程式的一個呼叫介面,應用程式通過呼叫作業系統的 API而使作業系統去執行應用程式的命令(動作)。其實早在DOS時代就有 API 的概念,只不過那個時候的 API 是以中斷呼叫的形式(INT 21h)提供的,在 DOS下跑的應用程式都直接或間接的通過中斷呼叫來使用作業系統功能,比如將 AH置為 30h後呼叫INT 21h就可以得到DOS 作業系統的版本號。而在 Windows 中,系統 API 是以函式呼叫的方式提供的。同樣是取得作業系統的版本號,在 Windows 中你所要做的就是呼叫 GetVersionEx() 函式。
可以這麼說,DOSAPI 是 “Thinking in組合語言” 的,而 Windows API 則是 “Thinking in 高階語言” 的。
DOSAPI是系統程式的一部分,他們與系統一同被載入記憶體並且可以通過中斷向量表找到他們的入口,那麼 什麼是Windows API 呢?要說明白這個問題就不得不引入我們下面要介紹得這個概念——DLL。
DLL
DLL,即 Dynamic Link Library(動態連結庫)。在 Windows 環境下含有大量 .dll格式的檔案,這些檔案就是動態連結庫檔案,其實也是一種可執行檔案格式。跟 .exe 檔案不同的是,.dll 檔案不能直接執行,他們通常由 .exe 在執行時裝入,內含有一些資源以及可執行程式碼等。其實 Windows 的三大模組就是以DLL的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),裡面就含有了 API函式的執行程式碼。為了使用 DLL 中的 API 函式, 必須要有 API 函式的宣告(.h)和其匯入庫(.lib),匯入庫可以先這樣理解:匯入庫是為了在 DLL 中找到 API 的入口點而使用的。
為了使用 API 函式,我們就要有跟 API 所對應的 .h 和 .lib 檔案,而 SDK 正是提供了一整套開發 Windows 應用程式所需的相關檔案、範例和工具的“工具包”。
SDK 包含了使用 API 的必需資料,所以人們也常把僅使用 API 來編寫 Windows 應用程式的開發方式叫做 “SDK程式設計”。而API和 SDK 是開發Windows應用程式所必需的東西,所以其它程式設計框架和類庫都是建立在它們之上的,比如VCL 和MFC,雖然他們比起 “SDK 程式設計” 來有著更高的抽象度,但這絲毫不妨礙我們在需要的時候隨時直接呼叫 API 函式 。)
自動的資源排程:也就是可伸縮這個特性,它將不僅能優化系統資源,而且能自動調整資源來幫助執行於其上的應用更好地應對突發流量。
精細的管理和監控:通過PaaS能夠提供應用層的管理和監控,比如,能夠觀察應用執行的情況和具體數值(比如,吞吐量和反映時間)來更好地衡量應用的執行狀態,還有能夠通過精確計量應用使用所消耗的資源來更好地計費。
三、IaaS模式
作用
通過IaaS這種模式,使用者可以從供應商那裡獲得他所需要的虛擬機器或者儲存等資源來裝載相關的應用,同時這些基礎設施的繁瑣的管理工作將由IaaS供應商來處理。IaaS能通過它上面對虛擬機器支援眾多的應用。IaaS主要的使用者是系統管理員。
產品
主要產品包括:Amazon EC2,Linode,Joyent,Rackspace,IBM Blue Cloud和Cisco UCS等。
功能
IaaS供應商需要在那些方面對基礎設施進行管理以給使用者提供資源?或者說IaaS雲有那些功能?在《虛擬化與雲端計算》中列出了IaaS的七個基本功能:
資源抽象:使用資源抽象的方法(比如,資源池)能更好地排程和管理物理資源。
資源監控:通過對資源的監控,能夠保證基礎實施高效率的執行。
負載管理:通過負載管理,不僅能使部署在基礎設施上的應用運能更好地應對突發情況,而且還能更好地利用系統資源。
資料管理:對雲端計算而言,資料的完整性,可靠性和可管理性是對IaaS的基本要求。
資源部署:也就是將整個資源從建立到使用的流程自動化。
安全管理:IaaS的安全管理的主要目標是保證基礎設施和其提供的資源能被合法地訪問和使用。
計費管理:通過細緻的計費管理能使使用者更靈活地使用資源。
接下來,稍微給大家介紹一下雲的三種形式和雲端計算好處。

三種模式之間的關係
它們之間的關係主要可以從兩個角度進行分析:其一是使用者體驗角度,從這個角度而言,它們之間關係是獨立的,因為它們面對不同型別的使用者。其二是技術角度,從這個角度而言,它們並不是簡單的繼承關係(SaaS基於PaaS,而PaaS基於IaaS),因為首先SaaS可以是基於PaaS或者直接部署於IaaS之上,其次PaaS可以構建於IaaS之上,也可以直接構建在物理資源之上。


IBM 的軟體架構師 Albert Barron 舉例說明IaaS、PaaS和SaaS的區別:
IBM 的軟體架構師 Albert Barron 曾經使用披薩作為比喻,解釋這個問題。David Ng 進一步引申,讓它變得更準確易懂。請設想你是一個餐飲業者,打算做披薩生意。
你可以從頭到尾,自己生產披薩,但是這樣比較麻煩,需要準備的東西多,因此你決定外包一部分工作,採用他人的服務。你有三個方案:
方案一:IaaS

    他人提供廚房、爐子、煤氣,你使用這些基礎設施,來烤你的披薩。

方案二:PaaS

    除了基礎設施,他人還提供披薩餅皮。你只要把自己的配料灑在餅皮上,讓他幫你烤出來就行了。也就是說,你要做的就是設計披薩的味道(海鮮披薩或者雞肉披薩),他人提供平臺服務,讓你把自己的設計實現。

方案三:SaaS

    他人直接做好了披薩,不用你的介入,到手的就是一個成品。你要做的就是把它賣出去,最多再包裝一下,印上你自己的 Logo。

從左到右,自己承擔的工作量(上圖藍色部分)越來越少,IaaS > PaaS > SaaS。
對應軟體開發,則是下面這張圖:


SaaS 是軟體的開發、管理、部署都交給第三方,不需要關心技術問題,可以拿來即用。普通使用者接觸到的網際網路服務,幾乎都是 SaaS,下面是一些例子:

    客戶管理服務 Salesforce
    團隊協同服務 Google Apps
    儲存服務 Box
    儲存服務 Dropbox
    社交服務 Facebook / Twitter / Instagram

PaaS 提供軟體部署平臺(runtime),抽象掉了硬體和作業系統細節,可以無縫地擴充套件(scaling)。開發者只需要關注自己的業務邏輯,不需要關注底層。下面這些都屬於 PaaS:

    Heroku
    Google App Engine
    OpenShift

IaaS 是雲服務的最底層,主要提供一些基礎資源。它與 PaaS 的區別是,使用者需要自己控制底層,實現基礎設施的使用邏輯。下面這些都屬於 IaaS:

    Amazon EC2
    Digital Ocean
    RackSpace Cloud

相關文章