雲端服務中的 IaaS、PaaS、FaaS、SaaS 的差別

古古

2024/11/26


IaaS、PaaS、FaaS、SaaS 這些名詞,是大家一開始在接觸雲端服務時,很容易搞混的名詞,所以這篇文章我們就來介紹一下他們的差別吧!

1. 什麼是 IaaS? #

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 給我們,讓我們自由去運用)。

IaaS 的優點 #

  • 因為 IaaS 提供完整的 VM 存取權,所以靈活性非常高,想幹嘛就幹嘛!

IaaS 的缺點 #

  • 因為雲端服務商只會提供一台 VM 給你,所以凡事都得自己來,上到安裝 Java 版本、下到網路防火牆設定,全部都得靠自己完成。

2. 什麼是 PaaS? #

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 的服務(因此我們就只要直接上傳我們的程式就好,不需要處理任何環境安裝的問題)。

PaaS 的優點 #

  • 只需要上傳程式碼即可運作,降低維運的人力和時間成本。

PaaS 的缺點 #

  • 靈活度比較低,碰不到實際的 VM 層級,沒辦法直接連線到容器裡面做特別的設定。
  • 通常會限制程式語言,只支援熱門的,太冷門的不支援。
  • 收費較貴(不過貴不是他的缺點,是我的🥹。

小結:IaaS 和 PaaS 的區別 #

所以從上面的 IaaS 和 PaaS 的介紹,大概可以感覺得出來 IaaS 和 PaaS 其實是一個對立的關係。

IaaS 就是直接丟一個最原始的 VM 給你,你愛蓋什麼就蓋什麼,有點像是給你一塊地你自己自由發揮。

而 PaaS 則像是一棟蓋好的大樓,裡面的設施非常先進漂亮,你只要提著你的行李箱(程式碼)就可以入住,但缺點就是你不能隨便更動大樓裡面的管線,只能照著他們既定的規則走這樣。

所以如果你只是要做一個小型的 Project,不想要管環境的安裝問題,那就可以直接採用 PaaS 的服務來部署;而如果你是想要自己掌握所有控制權,想要自己處理防火牆、軟體版本…等等的控制,或是你想省點錢的話😂,那就可以考慮採用 IaaS 來部署。

3. 什麼是 FaaS? #

了解了經典的 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 的優點 #

  • 只需要在使用時付費,不需付錢讓程式空轉。

FaaS 的缺點 #

  • 功能要拆分的比較細,每一份程式要保持在處理非常輕量化的小功能,像是處理一張圖片的 resize…等。
  • 和雲端服務綁比較深,萬一將來要下雲會比較麻煩。

補充:FaaS 也稱為 Serverless(無伺服器運算) #

在這裡也補充一下,其實 FaaS 服務還有另一個稱呼,即是 Serverless(無伺服器運算)。

FaaS 之所以能夠被稱為 Serverless,是因為從定義上來說,我們並沒有長期運行一個 server,而是當前端請求來時,我們才啟動這個 server,並且當前端請求走了之後,這個 server 也被關掉了。所以在定義上,我們「並沒有」長期運行一台 server,傻傻的去等待前端發送請求過來,因此這種部署方式,就稱為是 FaaS,也叫做 Serverless(無伺服器)。

所以 FaaS 和 Serverless,他們指的其實都是同一件事情,就是把程式當成方法一樣來使用,用完即丟,不會長期運行某份程式這樣。

補充:其實我一開始有點不能接受 Serverless 的定義😂,因為他就是有運行 server 啊!只是中間的過程很短我們看不見而已!!不過這邊的定義就是這樣,所以建議大家就先接受這個定義吧🥹,FaaS 就是 Serverless,Serverless 就是 FaaS,他們指的是同一件事情。

4. 什麼是 SaaS? #

介紹完前面的 IaaS、PaaS、以及 FaaS 之後,最後我們可以來看一下什麼是 SaaS。

SaaS 是 Software as a Service 的簡寫,中文翻譯為「軟體即服務」。

SaaS 其實就是泛指 Gmail、Google Drive 這種已經很成熟的軟體,SaaS 跟工程師其實沒有什麼特別的關係,通常只是在提到 IaaS、PaaS 時,會一起拿出來被介紹到。

舉例來說:

  • 我們在工作上,可以使用 Jira、Trello 這類的 SaaS 的軟體,幫助我們管理敏捷看版的流程。
  • 我們也可以使用 Outlook、Gmail 這類的 SaaS 軟體,幫助我們收發 email。
  • 在日常生活中,我們也可以使用 Notion、Heptabase 這類的 SaaS 筆記軟體,幫助我們記錄工作上遇到的大小事、或是個人的學習筆記。

所以對於 SaaS 而言,基本上只要是你喊得出名字的軟體服務,大部分都是屬於 SaaS 的服務,所以大家在日常的生活中,其實已經大量使用到 SaaS 的服務了!

IaaS、PaaS、FaaS、SaaS 總結 #

所以總結一下上面的介紹的話,XaaS 家族就可以被統整成下面這張圖片(其中虛線下方所表示的,就是 AWS、GCP、Azure 所提供的雲端服務應用)。

圖片來源: What are Cloud Computing Services [IaaS, CaaS, PaaS, FaaS, SaaS]

因此大家在工作上,除了專注在後端的程式開發之外,也可以多多觀察一下你們公司目前是用什麼方式來部署的,雖然部署這部分通常是會交由 DevOps 工程師來執行,但是多懂一點雲端服務的概念總是不會虧的XD。

畢竟只有當我們全面的了解有哪些工具可以運用時,我們才能夠活用這些工具,用最高的效率達到我們想要的效果!

結語 #

這篇文章我們介紹了 IaaS、PaaS、FaaS、以及 SaaS 的差別,並且也介紹了市面上有哪些相關的服務可以使用,希望可以讓大家更了解 XaaS 家族中各個名詞的含義。

如果你對後端技術有興趣的話,也歡迎免費訂閱 《古古的後端筆記》電子報 ,每週二為你送上一篇後端技術分享,那我們就下一篇文章見啦!

免費訂閱《古古的後端筆記》電子報

每週二學習後端技術,和 2300 人一起變強💪