您可能聽說過SaaS,您可能聽說過PaaS和IaaS,但您聽說過函式即服務 (FaaS) 嗎?
FaaS市場正在快速增長。根據Allied Market Research的資料,2018年市場價值30.1億美元 。預計到2026年,這一數字將增長到240億美元——這意味著該行業將從2020年到2026年以29.7%的複合年增長率 (CAGR) 增長。
看看這種增長,可以肯定地說FaaS是一件大事。
但什麼是FaaS,它是如何工作的?為了幫助您回答這些問題,本文將介紹FaaS的基礎知識、人們應該(和不應該)使用FaaS的原因,以及截至2022年全球FaaS市場的狀況。
什麼是函式即服務 (FaaS)?
函式即服務 (FaaS) 是一種雲端計算形式,可幫助開發人員更好地工作,無需他們維護應用程式基礎架構。當開發人員利用FaaS時,他們使用FaaS平臺為他們構建、執行和監督應用程式包。
在這一點上,您可能會認為FaaS聽起來像無伺服器計算 ——它確實如此。無伺服器計算允許開發人員將管理資料庫、API閘道器、儲存、訊息傳遞和其他基礎設施外包給第三方提供商。FaaS 是一種無伺服器計算。
無伺服器計算的工作原理(來源: iviewlabs)
儘管這可能是您第一次閱讀有關FaaS的內容,但您可能已經在野外遇到過它。許多流行的程式和應用程式都使用FaaS——比如亞馬遜的Alexa。
如果您熟悉Alexa,就會知道您可以通過構建“技能”來擴充套件Alexa的函式。與應用程式一樣,技能讓Alexa在其基本配置之外做事。諸如檢查應用中的通知、開始新聊天或播放自定義音訊之類的事情。
亞馬遜通過AWS Lambda執行Alexa的所有技能。構建新技能時,您將其建立為通過AWS Lambda部署的函式。AWS Lambda然後為您執行該函式並處理安全和資料庫管理等基礎設施問題。
那麼,FaaS是如何一步一步工作的呢?讓我們接下來介紹一下。
FaaS是如何工作的?
要了解FaaS,您需要了解兩個關鍵術語:
- “單體架構” = 獨立於其他應用程式執行的獨立應用程式。這些應用程式在內部管理使用者介面、業務函式和資料介面。單體架構程式碼依賴於其他程式碼片段。
- “微服務架構” =處理一些小任務的一段程式碼。這些微服務是獨立的(儘管它們一起構成了整個應用程式)。
下圖顯示了單體架構和微服務架構的不同之處:
單體架構與微服務架構(來源: BMC)
當您執行或更新函式時,您可以看到微服務和單體架構在實踐中的主要區別。使用單體架構,整個程式立即執行函式(例如更新應用程式)。使用微服務架構,您可以獨立執行微服務函式。
FaaS是幫助微服務架構工作的東西。
當你執行每一個新的微服務函式時,你只需要建立函式。然後,您的FaaS提供者獲取該函式,執行它,並從那時起處理該函式的管理。
由於FaaS是一種可以根據您的輸入工作的工具,因此請務必注意每個FaaS函式應該只負責一項任務。該任務然後在其觸發器被啟用時執行。例如,生成使用者收據副本的函式只有在使用者按下“下載收據”時才會起作用。
FaaS使用“事件驅動的執行模型”,這意味著您的函式僅在觸發時才會啟用。同樣,它們不會在後臺執行。
那麼,FaaS還能做什麼呢?
FaaS包括哪些服務?
儘管所有提供商都不同,但FaaS提供商通常會提供以下服務:
- 身份驗證服務。這些處理程式使用者的登入和身份驗證過程。
- 資料庫服務。這些幫助您在資料庫中歸檔資訊,以便您的程式可以使用它。FaaS提供商為您管理一些資料庫維護。
- 檔案儲存。FaaS提供商可以為您的應用程式儲存資料和檔案,因此您無需將其託管在您自己的伺服器上。
- 報告。FaaS提供商可以監視您的程式中的錯誤或安全威脅 ,並在他們發現問題時提醒您。
總體而言,這些服務可幫助開發人員更智慧地工作。接下來讓我們介紹 FaaS 的優點。
FaaS模型的優點
使用FaaS,開發人員無需擔心基礎架構或部署——只需編寫應用程式邏輯。因此,在當前實施時,FaaS可以大大減少構建和部署程式所需的時間。
使用FaaS構建和部署也更容易。一次配置時間只需幾秒鐘而不是幾小時。您也不限於特定的語言或資源。FaaS提供商可以執行大多數語言的程式碼,您可以使用提供商提供的快取和資料庫來加快構建過程。
FaaS模型具有很強的可擴充套件性,容量規劃要容易得多。如果您需要更多資源,您可以簡單地參考您的 FaaS 提供商的說明來升級您的使用。許多 FaaS 提供商提供水平擴充套件,這意味著如果您的使用高峰,提供商將簡單地為您提供額外的資源來應對高峰。
此外,您無需擔心維護、災難恢復 (DR) 或安全性。
最後,FaaS非常高效。提供商只對您使用的資源收費,因此您為 FaaS 支付的費用可能遠低於為您自己的硬體支付的費用。同樣,您的函式不會在後臺執行,而是處於空閒狀態。您也不需要為它們閒置付費。
那麼,FaaS是全能型的嗎?不完全的。
FaaS模型的缺點
FaaS模型消除了與程式開發相關的一些最大挑戰,但它也要求您大幅限制您的控制。您無法對程式碼使用的伺服器、安全性或資料庫做出很多決定。相反,這取決於您的提供商。
同樣,除錯通常會更難一些,因為您無法完全控制系統。測試也很困難,因為FaaS程式碼並不總是能順利地轉換到測試環境中。
此外,您必須遵守FaaS供應商的嚴格要求。FaaS函式只能完成一項操作,因此如果您不習慣這一點,則需要更改您和您的團隊編寫程式碼的方式。同樣,您可能需要重寫現有應用程式中的程式碼以使其適合FaaS部署——因此FaaS通常比舊程式更適合新程式。
最後,選擇FaaS通常意味著長期致力於單一供應商。在構建程式時,您會使用提供商的系統和要求。自然,更換供應商可能需要您重做一些工作並可能中斷您的函式。
優點與缺點
優點 | 缺點 |
更快地部署程式碼配置需要幾毫秒
任何語言的程式碼 自動災難恢復 (DR) 成本效益 可擴充套件 |
失去對伺服器的控制除錯更難
測試需要更長的時間 你被鎖定在你的供應商 您必須編寫適合FaaS的程式碼 |
FaaS與SaaS、PaaS和IaaS
既然您對FaaS有了更多瞭解,您可能想知道它與其他任何即服務 (XaaS) 選項(如IaaS、SaaS和PaaS)之間的關係。
IaaS、PaaS和FaaS服務具有相似的目的:它們幫助公司更便宜、更有效地管理應用程式。但是,每個選項都提供不同的東西。
基礎設施即服務 (IaaS) 允許您出租計算能力(如RAM和CPU)。使用IaaS,您仍然需要在內部管理一些應用程式函式(如安全性)。
平臺即服務 (PaaS) 允許您出租硬體和軟體工具來構建您的應用程式。一個常見的例子是AWS Elastic Beanstalk。
與IaaS和PaaS不同,FaaS允許您租用空間來獨立執行函式。此函式使其更具可擴充套件性。
以下是這三者如何不同工作的簡短摘要:
FaaS與IaaS和PaaS有何不同(來源: thenewstack.io)
軟體即服務 (SaaS) 不適合應用程式或程式構建。相反,它允許您租用應用程式,這樣您就不需要在內部構建它們。有數以千計的SaaS選項可用——從資料分析工具到WordPress SEO外掛。
市場規模、份額和領先供應商
FaaS的發展反映了組織開發新專案的方式的整體轉變。
在過去的幾十年中,開發人員將大型系統建立為多年專案。如今,許多組織都傾向於採用開發運營 (DevOps) 方法進行開發。DevOps優先考慮不斷開發和一點一點地改程序序。
DevOps的工作原理(來源: Atlassian)
同樣,組織越來越多地使用雲服務來使事情變得更安全、更高效。據甲骨文稱,組織很快將 在雲中儲存600倍以上的敏感資料。
您可以從Statista的7,164名高管收集的資料中看到這一趨勢。從2019年到2021年,單一公共或私有云服務的使用下降,大多陣列織採用了多種雲解決方案。
雲技術的使用(來源: Statista)
雲端計算方面的投資也在增長。Statista對全球數百家大型企業的另一項研究表明,83% 的受訪公司每年在公共雲端計算上的投資超過120萬美元。這個數字高於2019年的50%。
人們正在轉向FaaS,因為它具有前瞻性和可擴充套件性。同樣,它提供了更高的生產力和效能、更快的應用程式上市時間以及更經濟高效的方式來製作新程式。
這些優勢吸引了許多行業,包括銀行業組織(或“BFSI”組織)、消費品和零售、娛樂、電信、資訊和技術支援服務 (ITES)、醫療保健和製造業。以下是每個行業對FaaS市場的貢獻:
哪些行業使用FaaS(來源: MarketsandMarkets)
與SaaS不同,組織沒有成千上萬的FaaS供應商可供選擇。絕大多數FaaS使用主要參與者提供的解決方案,包括AWS Lambda、Azure Functions、IBM Cloud Functions、Google Cloud Functions、阿里雲和Cloudflare Workers。
我們現在將介紹這些提供程式中的每一個。
AWS Lambda
AWS Lambda於2014年11月由Amazon推出,是一種非常流行的FaaS工具。截至2021年第四季度,33%的雲使用者使用AWS服務。
AWS Lambda
AWS Lambda為許多程式語言提供原生支援,包括Node.js、C#、Python、Ruby、Go、Java和Powershell。正如我們在“什麼是功能即服務 (FaaS)?”中提到的那樣 Alexa將AWS Lambda用於技能。
特點和功能:
- 連線到其他AWS工具
- 使用Amazon CloudWatch監控程式的效能
- 超過200種與SaaS工具的整合
- 您可以部署docker容器(AWS在2020年12月推出了此功能)
優點:
- 您可以使用Lambda API或Amazon API閘道器構建自己的後端
- 您可以將函式部署為容器映像
- 您可以使用Amazon RDS代理連線到關聯式資料庫
- 您可以選擇為每個函式分配多少記憶體
缺點:
- 如果您還沒有使用AWS,那麼設定它需要花費大量時間和精力
Microsoft Azure Functions
Microsoft Azure Functions是Microsoft Azure的一項功能,Microsoft於2010年2月首次推出“Windows Azure”。Azure Functions允許您通過FaaS執行事件驅動的程式碼。截至2021年第四季度,21%的雲使用者使用Azure。
Microsoft Azure Functions
特點和功能:
- 您可以將您的函式連線到Azure邏輯應用中的250多個聯結器
- 支援JavaScript、C#、F#、Powershell、PHP、 Python和Java
- 為新使用者提供許多教程
- 幫助您通過Azure Application Insights分析您的程式
優點:
- Azure Functions使用整合的程式設計模型
- 非常適合使用DevOps的團隊
- 多個計劃可用
缺點:
- Azure Functions不支援Node.js或Ruby
Google Cloud Functions
Google Cloud是僅次於AWS和Azure的第三大最受歡迎的雲端計算解決方案。目前市場佔有率為10%。Google Cloud Functions是Google Cloud的一項FaaS函式,該服務提供100多種產品以供廣泛使用。
Google Cloud
特點和功能:
- 除錯和日誌記錄整合到Google Cloud Functions(通過CloudTrace和CloudDebugger)
- 您使用來自Google Assistant、Google Cloud、Firebase或任何使用HTTP的應用程式的觸發器
- Google Cloud Functions與許多Google合作伙伴整合
優點:
- 那些想要多雲或混合功能的人可以使用它
- 它是開源的,因此您可以根據需要輕鬆遷移到另一個FaaS平臺
- 非常容易使用
- Google 為新使用者提供了許多免費資源
缺點:
- Google Cloud Function基於容器的服務不如其他FaaS提供商先進
IBM Cloud
IBM Cloud來自IBM在2013年6月購買的公共雲平臺SoftLayer。IBM將該平臺轉變為Bluemix,並於2014年7月將其作為PaaS工具推出。此後,IBM將該服務重新命名為IBM Cloud,並將其功能擴充套件到FaaS。
IBM Cloud
截至2021年第四季度,4%的雲使用者使用過IBM Cloud。它在Apache OpenWhisk生態系統上執行。
特點和功能:
- 您可以搜尋視訊內容
- 您可以通過IBM Watson API將您的程式連線到其他程式
- IBM為一些常見任務提供了預構建的函式
- 支援Node.js、Python、Swift、PHP、Go、Ruby、Java和.NET Core
優點:
- 非常適合構建移動應用程式
- 易於學習使用
- 通過IBM Cloud Monitoring監控您的應用程式
缺點:
- 將函式的記憶體時間限制為10分鐘或2048MB
阿里雲
阿里雲並不像其他雲端計算選項那樣廣為人知,但它仍然擁有6%的可觀市場份額。阿里雲由阿里巴巴於2008年推出,面向線上業務和使用阿里巴巴其他服務的使用者。
阿里雲
FaaS是阿里雲的產品之一,此外還有內容交付網路 (CDN)、資料儲存和大資料處理。
特點和功能:
- 與阿里巴巴的其他計算服務整合
- 災難證明,因為阿里巴巴在多個區域的叢集上託管功能
- 視訊轉碼
- 人工智慧推理
- 支援Node.js、Python、Java、PHP和C#
優點:
- 為不需要執行太多程式碼的人提供免費選項
- 高度可擴充套件
- 您可以使用多種型別的觸發器
缺點:
- 將函式從阿里巴巴轉移到另一個FaaS提供商可能很困難
Cloudflare Workers
Cloudflare Workers由Cloudflare執行,是一個FaaS系統,適合新開發人員和希望幾乎立即執行程式碼的人員。Cloudflare Workers提供免費計劃和可擴充套件的定價。
Cloudflare Workers
特點和功能:
- 支援JavaScript、C++、Rust和C
- 您可以將影象、PDF和其他檔案儲存在Cloudflare Workers上以部署為靜態資產
- 災難證明,因為Cloudflare Workers使用全球伺服器網路
- 與其他Cloudflare產品整合
優點:
- 它比許多其他FaaS選項便宜
- 新開發人員很容易學會使用
- 你可以很快開始
- Cloudflare提供詳細的教程和資源,可幫助您構建應用程式
缺點:
- Cloudflare Workers不如其他選項強大,更適合那些擁有小規模專案的人
Faas最佳實踐
是的,FaaS是一種技術,但它也是開發人員在進行程式和應用程式開發時需要採用的一種思維方式。
要充分利用FaaS,請遵循以下最佳實踐:
- 記住FaaS的侷限性。 FaaS並不適用於所有程式,如果您嘗試使用FaaS建立一個對FaaS不友好的程式,則會花費您的時間、精力和金錢。
- 僅在FaaS上執行單動作函式。如果您執行具有多個操作的函式,則會破壞FaaS函式在隔離環境中的最佳工作狀態。這種中斷會減慢您的應用程式並降低效率。
- 不要執行具有依賴關係的函式。 依賴關係會在以後產生錯誤和可伸縮性問題。
- 仔細觀察你的載入時間。您的載入時間來自需要大量記憶體的庫或函式。較長的載入時間會減慢您的程式並最終讓使用者感到沮喪。
- 減少您使用的關聯式資料庫管理系統 (RDBMS) 連線的數量。這些連線將增加函式工作所需的時間,並在您的程式中引入故障點。
您需要FaaS嗎?
FaaS對某些人來說是一種創新和改變遊戲規則的技術,但它並不適合所有人。
從FaaS中獲得最大收益的組織願意使用微服務架構構建程式,其中每個函式只做一件事。這些函式應該獨立工作——如果它們相互依賴,你會遇到可伸縮性問題。
如果您想構建一個具有單體架構或函式相互借鑑的應用程式,FaaS可能無法正常工作。同樣,如果您不想長期致力於單一供應商,FaaS可能是一個短視的選擇。
當然,您仍然可以在沒有FaaS的情況下利用雲技術。例如,您可以投資PaaS或IaaS,將應用程式的一些函式外包給雲。此選項將為您提供雲端計算的一些成本和效率優勢,但您無需在FaaS模型的限制內構建程式。
或者,如果您不需要構建一個高度利基或專業化的程式,請考慮投資SaaS工具。一些SaaS工具甚至是開源的,因此您可以根據需要調整現有工具。
小結
FaaS不是技術問題或新趨勢。這是一種可擴充套件的技術,您應該期望在未來十年內看到更多。
解釋FaaS有時似乎很困難,但FaaS只是一種服務,它允許開發人員使用由其他人維護的基礎設施編寫和執行程式碼。您經常使用的許多服務(例如 Alexa)都使用FaaS。常見的FaaS供應商包括IBM Cloud Functions、AWS Lambda、阿里雲、Google Cloud Functions和Microsoft Azure Functions。
雖然FaaS對某些企業非常有效,但它並不適合所有人。FaaS最適合執行執行單一函式的隔離、無狀態程式碼。
評論留言