4000字8分鐘帶你理解Serverless架構

1、初識serverless架構

我們要上線一個系統,需要考慮的是需要多少臺服務器或者多少容器資源,還有多大的存儲,以及上線之後運行的過程中當需要擴容的時候,到底需要新增多少資源,而且流量高峯之後還需要縮掉多少資源。

如果我們不想在這個上面花費精力,有沒有一種辦法。也就是不要讓我們再關注服務器等資源了。答案就是,Serverless(無服務器)架構

在Serverless領域裏面,著名的當屬AWS Lambda,我們一起來看下AWS官方網站上的描述,從這段描述中也可看出Serverless的價值。

AWS Lambda 是一項計算服務,可使您無需預配置或管理服務器即可運行代碼。AWS Lambda 只在需要時執行您的代碼並自動縮放,從每天幾個請求到每秒數千個請求。

您只需按消耗的計算時間付費 – 代碼未運行時不產生費用。藉助 AWS Lambda,您幾乎可以爲任何類型的應用程序或後端服務運行代碼,並且不必進行任何管理。

AWS Lambda 在可用性高的計算基礎設施上運行您的代碼,執行計算資源的所有管理工作,其中包括服務器和操作系統維護、容量預置和自動擴展、代碼監控和記錄。

先入爲主,我們先給一個淺顯的概念性定義,當然也是事實:Serverless架構是雲計算架構的一種自然延伸。既然跟雲計算有關,因此在接觸Serverless架構之前,讓我們首先回顧一下雲計算的發展。

IAAS

[基礎架構即服務 (IaaS)] 是一種雲計算產品,供應商爲用戶提供對服務器、存儲和網絡等計算資源的訪問。組織可以在服務提供商的基礎架構中使用自己的平臺和應用。

主要功能

  • 用戶按需支付 IaaS,無需購買整套硬件。

  • 可根據處理和存儲需求擴展基礎架構。

  • 節省企業購買和維護硬件的成本。

  • 由於數據位於雲端,因此不會有單點故障。

  • 支持管理任務虛擬化,騰出時間處理其他事務。

IAAS從本質上講是服務器的租賃,同時提供了基礎設施的外包服務,跟我們日常使用的水和電一樣。IAAS接觸的是底層的硬件和操作系統。

PASS

[平臺即服務 (PaaS)]是一種雲計算產品,爲用戶提供雲環境,用於開發、管理和交付應用。除存儲器和其他計算資源以外,用戶能夠使用預構建工具套件,開發、定製和測試自己的應用。

主要功能

  • PaaS 提供平臺,包含多種工具,用於在同一環境中測試、開發和運行應用。

  • 使組織能夠將精力集中於開發,無需擔心底層基礎架構。

  • 供應商負責管理安全性、操作系統、服務器軟件以及備份。

  • 促進密切協作,即使團隊遠程工作也毫不影響。

PAAS上面使用較多,較廣泛的技術就是docker,可以使用開源的技術[Kubernetes]、[Mesos]來構建這樣的容器管理平臺。PAAS是一種更上一層的抽象,我們研發人員已經接觸不到底層的操作系統。

以上IAAS和PAAS介紹參考:https://www.ibm.com/cn-zh/cloud/learn/iaas-paas-saas

IT計算髮展歷程

我們的IT計算的發展歷程的演進,正如下圖所示:

物理機-虛擬化-雲計算-容器-Serverless

在這個演進的過程中軟件計算和運維的效率是一直提升的,但即使到了容器時代,還有很重要的一個問題沒有解決,比如我們的系統遇到大促,評估了調用量要比平時多5倍,那麼我們就要人工去申請容器資源。待到大促流量高峯已過,我們再人工縮掉先前增加的容器數量。

這個問題是,我們不能按需去自動增減我們的資源。Serverless架構可以做到量入爲出,利用彈性擴展,快速構建新的計算能力,當業務高峯過去後,資源能夠自動釋放。

另外一個問題是,即使到了雲時代,雖然IT資源,比如存儲、網絡、計算等可以被分離部署配置,但是對於我們研發人員來講,我們始終都沒有脫離服務器。我們的應用必須運行在一個對應的IP服務器上面,即使是一個docker容器。必須經過部署、配置、初始化纔可以運行。

那麼,Serverless技術架構能夠解決上面的問題嗎。

2、進入Serverless架構

Serverless架構,從字面意思理解就是無服務器架構,注意是“無服務器”,而不是“無服務”。

這是一種架構思想,類似微服務一樣,不過微服務這種思想架構,目前已經有成熟的框架來支撐,比如dubbo、spring cloud等,但是Serverless架構目前還沒有一個框架來支撐,也因此說Serverless技術實際上是一組技術的集合。

主要包括了兩個領域的技術,BaaS(Backend as a Service)和FaaS(Function as a Service)。

BAAS(概念介紹)

BaaS(Backend as a Service)後端即服務。BAAS是在PAAS平臺的基礎之上爲了提升開發者的軟件工程效率進一步的發展,PAAS側重點是關注簡化應用開發人員的部署流程,BAAS側重點是關注如何簡化應用開發流程。

在PAAS平臺裏面,研發人員管理容器,管理部署,管理配置文件。在BAAS平臺裏面研發人員可以直接操作需求對應的功能模型,比如有一個增刪改查的集合功能,在BAAS之外,研發人員需要創建表、寫業務邏輯、寫接口等處理這樣的研發工作。

在BAAS平臺裏面,所有的功能需求都被往上抽象出了一層模型,研發人員只需要根據需求定義模型,BAAS平臺就會自動生成對應的接口。如此一來,研發人員就只需要關注業務邏輯需求。

研發人員可以在PAAS平臺上選擇RDS、OSS這樣省去了我們自己創建數據庫的操作,如果之後我們還需要消息推送,需要Oauth認證授權,需要更多中間件的功能,雲平臺還能夠提供給我們嗎,BAAS就可以提供這些內容。

這就是後端即服務名稱的由來,將我們平時後端開發所需要的這樣的能力,整合之後並打包(SDK)提供給我們研發人員。我們在BAAS平臺上面輸入我們想要的功能之後,便會有對應功能的API提供給我們。

所以,有觀點認爲:BaaS = IaaS + PaaS + APIs + SDKs。這樣,對於我們研發人員來講,只需要利用SDK和API就可以完成對應的業務功能開發了。

這種開發結構下,業務系統開發速度可以提高,也沒有後端複雜的開發和維護工作了,同時也降低了研發人員的技術要求。

BAAS的位置處於PAAS和SAAS(軟件即服務)之間,將後端諸如消息服務、認證服務、數據存儲服務等等後端的能力以SDK和API的形式提供。

在PAAS平臺開發能力的基礎上,利用了SAAS的思路,將我們開發過程中通用的後端能力服務化,研發人員利用這些服務可以快速的開發出業務功能。

“BaaS的主旨是爲開發者免去後端開發和部署的煩惱,讓開發者無需購買服務器(IaaS),無需部署後端環境(PaaS),無需編寫後端代碼(BaaS),輕鬆修改業務邏輯(SDK和API),快速實現需求功能。”

FAAS(概念介紹)

FaaS(Functions as a Service)函數即服務。我們研發人員編寫業務邏輯代碼的方式都換成了編寫函數代碼,比如一個訂單系統普通的增刪改查功能,之前我們是編寫代碼,然後編譯、發佈,部署到我們的WEB系統中。如下圖所示。

在FAAS裏面,我們只需要編寫增刪改查的四個函數,而且不再需要我們編譯,發佈,只需要將函數提交到FAAS平臺上面。當客戶端的請求過來後,通過API GATEWAY路由到具體的函數,進而執行和處理相應的業務邏輯。如下圖所示。

傳統的服務端軟件部署到含有操作系統的物理機、虛擬機或者容器中之後,需要啓動一個進程,然後一直等待請求進來。當在FAAS平臺上部署的時候,是直接將寫好的函數發佈到平臺上面,當有事件到來的時候才觸發執行,而且執行完畢之後還可以卸載掉。因爲FAAS環境裏面都是基於函數的。

以上主要介紹了BAAS和FAAS兩個平臺思維,他們構成了Serverless架構的核心。微服務思想架構下我們會按照功能職責去拆分服務,然後一個個的去將這些小的功能獨立部署起來。

到了Serverless思想架構裏面,比如一組增刪改查功能,粒度就會被進一步細化,細化到函數層面。增、刪、改、查分別對應四個函數,研發人員將這些個函數部署到平臺上。

3、Serverless架構使用場景

事件請求場景

圖片動態切割事件。在我們的電商系統中經常會按照需求來對同一張圖片做不同尺寸大小的處理,在商家將商品圖片上傳到雲存儲上之後,在Serverless架構平臺裏面,有一個觸發器來觸發對應的函數計算,從而根據不同的尺寸規則要求來生成不同大小的圖片。

流量突發場景

電商領域或者其它互聯網場景比如視頻直播等經常會遇到流量突發的情況。比如通常流量在QPS 300,當在大促的時候突然上到QPS 2000甚至更多。

相對於Serverless的傳統架構裏面,我們必須擴展硬件能力來應對流量高峯。在Serverless架構下,就可以快速的動態構建新的計算能力來滿足當前的需求,業務高峯後,資源還可以自動釋放。

大數據處理場景

當安全審計的時候,我們需要從多個OSS裏面將過去一年的數據(1 個小時一個文件)中找出特定關鍵字訪問的日誌,同時做聚合運算(計算出總值)。

如果使用函數計算,將高峯期每 2 小時的訪問日誌,或者低谷期每 4 小時的訪問日誌交給一個計算函數處理,並將處理結果存到RDS中。使用一個函數分派數據給另一個函數,使其執行成千上萬個相同的實例。

這樣會同時運行近千個計算函數(24 x 365 / 10),在不到一分鐘的時間內完成整個工作

下面我們來重點敘述流量突發彈性擴容的場景,目前阿里雲也支持了Serverless的架構,下面是官方關於該場景的描述。

--START

圖片來自阿里雲

場景描述

直播間的客戶端把主播和連麥觀衆的音視頻採集發送給函數計算做混流服務,函數計算把數據彙集後交給混流服務進行合成,並把合成畫面視頻流推送給CDN,終端觀衆實時拉取直播流,能實時看到混流合成畫面。

視頻直播應用場景中,有一種場景視頻直播的多人連麥,主播可以同時和多個工作進行連麥,把多個觀衆或者好友畫面接入,並把畫面合成到一個場景中,供給更多觀看直播的觀衆觀看。這個場景中,有幾個技術難度需要關注:

  • 連麥的觀衆不固定,需要考慮適度的併發和彈性。

  • 直播不可能 24 小時在線,有較爲明顯的業務訪問高峯期和低谷期。

  • 直播是事件或者公衆點爆的場景,更新速度較快,版本迭代較快,需要快速完成對新熱點的技術升級。

綜合以上幾個特點,可以通過Serverless這種架構來完美地解決以上痛點。

函數計算作爲連麥觀衆和主播接入的實時音頻和視頻轉發集羣,當併發量過來時,函數計算自動擴容多個執行環境來處理實時數據流;當業務高峯期過去後,會適度縮減資源使用。

代碼管理部署在雲端,代碼迭代可以隨時進行修改和維護,無需再多管理一套軟件運行環境。

視頻直播場景常規做法:

  • 購買負載均衡應付併發。

  • 購買計算資源做數據處理。

  • 業務低谷期需要想辦法釋放硬件資源來節省成本。

  • 多版本要維護多套運行環境。

函數計算解法:

  • 把負載分發程序寫到函數裏。

  • 多版本迭代無需更換運行環境,僅僅替換代碼版本即可。

  • 業務訪問按需付費,業務低谷期無費用。

--END

4、寫在最後

目前Serverless主要是AWS來引領,我們再來看下AWS的CTO  沃納·威格爾 在2018年8月中國的AWS Summit上講的兩段話。

"大概12年之前,我們深知雲將給軟件帶來翻天覆地的變化,我們創造了AWS。一直以來AWS希望與軟件開發者密切合作,打造出一個現代化的軟件開發框架。而不是告訴客戶,你們需要什麼工具。在AWS的信念中,我們認爲真正知道軟件應該如何開發的只有一個人,就是客戶本人。"

“現代化的架構是使用AWS的服務、Lambda的功能,把它們連接在一起。沒有中間層、沒有應用層,也沒有數據庫層,它是一系列web服務連接在一起,由功能連接在一起,無需服務器,而安全、可靠性、規模、性能、成本管理這些事項由AWS做好”。

軟件架構思維的發展就是要一步一步剝離出研發人員關心的IT基礎設施,讓其更多的精力參與到業務邏輯開發中,同時,我們孜孜不倦的追求着軟件開發的效率,希望在軟件的複雜度和效率之間得到一個平衡。軟件發展的本質目標追求是降低成本和提高效率。

整理這篇文章的目的是讓我自己對Serverless有一個認知,同時也希望對大家有所幫助。

鄭重申明,我不是這個領域的研發人員,因此在我理解Serverless的過程中我查閱了諸多資料,很感謝提供這些參考文章的作者,以下是參考資料鏈接。

https://help.aliyun.com/document_detail/65565.html 

https://aws.amazon.com/cn/blogs/china/iaas-faas-serverless/

https://yq.aliyun.com/articles/8521

本文完

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章