IaaS、PaaS、FaaS、SaaS 這些名詞,是大家一開始在接觸雲端服務時,很容易搞混的名詞,所以這篇文章我們就來介紹一下他們的差別吧!
IaaS 是 Infrastructure as a Service 的簡寫,中文翻譯為「基礎結構即服務」,IaaS 是指「你能夠使用這個服務來創建 VM」。
所以假設有一個雲端服務是 IaaS,那就表示他可以讓我們在上面自由的創建 VM,並且我們可以在該 VM 中安裝喜歡的 Java 版本、或是安裝喜歡的 Python 版本,然後我們也可以在這個 VM 裡面自由的運行想運行的程式,完全不受到任何限制!
所以只要是直接提供一台 VM 給你自由運用的服務,即是屬於 IaaS 的一種,也就是 Infrastructure as a Service。
舉例來說,像是 AWS 的 EC2、GCP 的 Compute Engine,他們就都是屬於 IaaS 的服務(因為他就是直接提供一台 VM 給我們,讓我們自由去運用)。
PaaS 是 Platform as a Service 的簡寫,中文翻譯為「平台即服務」,而到了 PaaS 這裡之後,就沒有了 VM 的概念。
因此假設有一個雲端服務是 PaaS,那麼 他只會要求你上傳你的程式碼,然後他就會像變魔法一樣,直接幫你把這個程式運行起來了,magic!
所以當你使用了 PaaS 的服務之後,你就再也碰不到 VM 層了(或是非常難),雲端服務商會把你的程式運行在一個「容器 Container」裡面,你只要告訴他你要幾個容器就好,剩下的雲端服務商會全部包辦。
因此 PaaS 也可以稱為是懶人部署法,你不需要像上面的 IaaS 一樣,自己去搞 VM 然後自己安裝 Java 版本,你要做的,就是寫好程式,上傳,然後剩下的雲端服務商會全部幫你搞定,世界和平!
舉例來說,像是 AWS 的 Elastic Beanstalk、GCP 的 App Engine、或是 Zeabur、Heroku、Vercel…等等的網站,他們就都是屬於 PaaS 的服務(因此我們就只要直接上傳我們的程式就好,不需要處理任何環境安裝的問題)。
所以從上面的 IaaS 和 PaaS 的介紹,大概可以感覺得出來 IaaS 和 PaaS 其實是一個對立的關係。
IaaS 就是直接丟一個最原始的 VM 給你,你愛蓋什麼就蓋什麼,有點像是給你一塊地你自己自由發揮。
而 PaaS 則像是一棟蓋好的大樓,裡面的設施非常先進漂亮,你只要提著你的行李箱(程式碼)就可以入住,但缺點就是你不能隨便更動大樓裡面的管線,只能照著他們既定的規則走這樣。
所以如果你只是要做一個小型的 Project,不想要管環境的安裝問題,那就可以直接採用 PaaS 的服務來部署;而如果你是想要自己掌握所有控制權,想要自己處理防火牆、軟體版本…等等的控制,或是你想省點錢的話😂,那就可以考慮採用 IaaS 來部署。
了解了經典的 IaaS 和 PaaS 的概念之後,接著我們可以來看一下什麼是 FaaS。
FaaS 是 Function as a Service 的簡寫,中文翻譯為「函式即服務」或是「功能即服務」。
相較於 IaaS 和 PaaS,FaaS 其實是近十年才被提出來的新概念,所以雖然 FaaS 也是屬於 XaaS 家族的一員,但其實他和上面的 IaaS 和 PaaS 沒什麼關係。
FaaS 的概念,是 「把程式當成方法來執行」,即是讓程式不用一直運行著,而是當有請求來時,就快速啟動這個程式,然後請求走的時候就 shutdown 這個程式,簡單的說就是不讓程式一直啟動著,而是有需要的時候才開啟他,這就是 FaaS 的概念!
大家也可以想像一下,一般我們在寫後端程式的時候,通常就是把程式運行起來,然後這個程式就會一直運行著,等著去接收前端的請求,即使沒有前端的請求過來,這個程式仍舊會一直運行著。
而 FaaS 即是想要提出一個新概念,就是只有當前端發請求過來的時候,才會去運行起這個後端程式去處理前端的請求,當請求執行完畢後,就關掉這個後端程式,不讓他在那邊空轉,把「程式」當成是一個「方法」來運行,即是 FaaS 的概念。
舉例來說,像是 AWS 的 Lambda、GCP 的 Cloud Functions,他們就都是屬於 FaaS 的服務。
在這裡也補充一下,其實 FaaS 服務還有另一個稱呼,即是 Serverless(無伺服器運算)。
FaaS 之所以能夠被稱為 Serverless,是因為從定義上來說,我們並沒有長期運行一個 server,而是當前端請求來時,我們才啟動這個 server,並且當前端請求走了之後,這個 server 也被關掉了。所以在定義上,我們「並沒有」長期運行一台 server,傻傻的去等待前端發送請求過來,因此這種部署方式,就稱為是 FaaS,也叫做 Serverless(無伺服器)。
所以 FaaS 和 Serverless,他們指的其實都是同一件事情,就是把程式當成方法一樣來使用,用完即丟,不會長期運行某份程式這樣。
補充:其實我一開始有點不能接受 Serverless 的定義😂,因為他就是有運行 server 啊!只是中間的過程很短我們看不見而已!!不過這邊的定義就是這樣,所以建議大家就先接受這個定義吧🥹,FaaS 就是 Serverless,Serverless 就是 FaaS,他們指的是同一件事情。
介紹完前面的 IaaS、PaaS、以及 FaaS 之後,最後我們可以來看一下什麼是 SaaS。
SaaS 是 Software as a Service 的簡寫,中文翻譯為「軟體即服務」。
SaaS 其實就是泛指 Gmail、Google Drive 這種已經很成熟的軟體,SaaS 跟工程師其實沒有什麼特別的關係,通常只是在提到 IaaS、PaaS 時,會一起拿出來被介紹到。
舉例來說:
所以對於 SaaS 而言,基本上只要是你喊得出名字的軟體服務,大部分都是屬於 SaaS 的服務,所以大家在日常的生活中,其實已經大量使用到 SaaS 的服務了!
所以總結一下上面的介紹的話,XaaS 家族就可以被統整成下面這張圖片(其中虛線下方所表示的,就是 AWS、GCP、Azure 所提供的雲端服務應用)。
因此大家在工作上,除了專注在後端的程式開發之外,也可以多多觀察一下你們公司目前是用什麼方式來部署的,雖然部署這部分通常是會交由 DevOps 工程師來執行,但是多懂一點雲端服務的概念總是不會虧的XD。
畢竟只有當我們全面的了解有哪些工具可以運用時,我們才能夠活用這些工具,用最高的效率達到我們想要的效果!
這篇文章我們介紹了 IaaS、PaaS、FaaS、以及 SaaS 的差別,並且也介紹了市面上有哪些相關的服務可以使用,希望可以讓大家更了解 XaaS 家族中各個名詞的含義。
如果你對後端技術有興趣的話,也歡迎免費訂閱 《古古的後端筆記》電子報 ,每週二為你送上一篇後端技術分享,那我們就下一篇文章見啦!