如何進(jìn)行Serverless開發(fā)和應(yīng)用

如何進(jìn)行Serverless 開發(fā)和應(yīng)用,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

10年積累的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有納溪免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

AWS Serverless 服務(wù)是一種對應(yīng)用工程師來說無服務(wù)器的計算方式,基礎(chǔ)概念是將運行服務(wù)所需的基礎(chǔ)設(shè)施交由 AWS 管理。使用 AWS Serverless 服務(wù)的工程師可以專注于面向客戶邏輯服務(wù)層的開發(fā),而不需要在基礎(chǔ)設(shè)施的構(gòu)建、管理、擴(kuò)容等任務(wù)上分散過多精力。AWS Serverless 開發(fā)的核心是名為 Lambda 的計算服務(wù)。

今天我們將圍繞 Lambda ,介紹在不同的應(yīng)用場景下Lambda與各種 AWS 服務(wù)的不同組裝模式,來初步探討基于 AWS Serverless 的開發(fā)和部署。

What?

首先介紹一下什么是 Serverless 開發(fā)。

如何進(jìn)行Serverless 開發(fā)和應(yīng)用

和經(jīng)典的開發(fā)、編譯、部署運行方式不同,使用 AWS Serverless 計算服務(wù) Lambda,僅需要上傳源文件,選擇執(zhí)行環(huán)境并執(zhí)行,便能得到運行結(jié)果。在這過程中,服務(wù)器部署、runtime 安裝、編譯、都由 AWS Serverless 計算平臺管理執(zhí)行。對開發(fā)人員來說,只需要維護(hù)源代碼和 AWS Serverless 執(zhí)行環(huán)境的相關(guān)配置即可。

Why?

為什么要選擇 Serverless 呢?

如何進(jìn)行Serverless 開發(fā)和應(yīng)用

對開發(fā)人員來說,使用 AWS Serverless 服務(wù)能夠節(jié)省大量管理基礎(chǔ)設(shè)施架構(gòu)的精力,并更好地專注于業(yè)務(wù)邏輯的開發(fā)。而對服務(wù)而言,AWS 本身的服務(wù)性質(zhì)使得它能很好的支持彈性擴(kuò)展和高并發(fā)場景。此外基于 AWS Serverless 的開發(fā)往往擁有快速更新、快速部署的優(yōu)點,其按需收費(on-demand)的收費方式,在如輕量部署測試環(huán)境、快速驗證等應(yīng)用場景下對削減開支也有優(yōu)勢。

How?

那么,我們來看一下如何用 AWS Serverless 的相關(guān)服務(wù)迅速組裝一個簡單的 Web Service。

如何進(jìn)行Serverless 開發(fā)和應(yīng)用

AWS Serverless 提供了豐富的服務(wù)目錄,以覆蓋各種功能的使用需求。搭建 Web Service 服務(wù)除了核心的計算服務(wù) Lambda 之外,常常還需要和請求入口路由(API Gateway)、持久化存儲(S3)、cdn(CloudFront)、防火墻(WAF)、域名解析(Route 53)等服務(wù)組合使用。如果需要支持 https 協(xié)議,還可以使用證書管理服務(wù)(ACM)實現(xiàn)。

將上述服務(wù)組裝好之后,一個完整的響應(yīng)請求流程將會是這樣的:

  • 用戶請求經(jīng)由域名解析到達(dá) CloudFront,由 WAF 進(jìn)行頻率控制、IP 過濾、header 驗證等安全性保障后,通過 API Gateway 路由轉(zhuǎn)發(fā)給核心的 Lambda 計算服務(wù)。

  • Lambda 會對請求進(jìn)行處理,處理時如若需要會從持久化存儲 S3 中讀取或存儲數(shù)據(jù),并且最終將處理結(jié)果通過 API Gateway 返回給用戶端。

  • Lambda 在邏輯計算時產(chǎn)生的日志會輸出到 CloudWatch 提供的日志管理服務(wù)中以便日后查詢。此外,還可以進(jìn)行額外的優(yōu)化,比如配置 CloudFront 直接從 S3 中加載靜態(tài)資源,以減輕時間和計算開銷。

Lambda 的啟動方式

如何進(jìn)行Serverless 開發(fā)和應(yīng)用

在剛剛的 Web Service 的例子中,Lambda 的執(zhí)行是由 API Gateway 服務(wù)喚起(Invoke)的。實際上 Lambda 執(zhí)行可由多種方式喚起。首先 AWS 本身的服務(wù)中,常常會和 Lambda 結(jié)合使用的有消息發(fā)布(SNS)、消息隊列(SQS)、負(fù)載均衡器(ALB)、狀態(tài)機(jī)(Step Function)等服務(wù)。

當(dāng)然通過 SDK、Command Line 或者 API 接口,也可以啟動 Lambda 函數(shù)的執(zhí)行。執(zhí)行模式分為同步和異步兩種:

  • 同步模式的調(diào)用:需要等待 Lambda 函數(shù)執(zhí)行完畢才會返回結(jié)果

  • 異步模式的調(diào)用:在調(diào)用 Lambda 的執(zhí)行接口之后會立即返回,Lambda 函數(shù)的執(zhí)行結(jié)果需要通過其他途徑獲取。

這兩種調(diào)用模式可供不同場景靈活選擇使用。

消息驅(qū)動的例子

我們再看一個消息驅(qū)動的報警處理系統(tǒng)中使用 AWS Serverless 服務(wù)的例子。

如何進(jìn)行Serverless 開發(fā)和應(yīng)用

比如我們有一個運行中的系統(tǒng),設(shè)定異常報警發(fā)生時會將報警消息發(fā)送給 SNS 服務(wù)。SNS 服務(wù)是一個消息的 Pub/Sub 服務(wù),對報警消息執(zhí)行一個基礎(chǔ)的 fan-out 發(fā)布操作,一方面通過電話、郵件通知負(fù)責(zé)人,另一方面同時調(diào)用 Lambda,Lambda 中可以進(jìn)行一些對報警的自動化處理。這就是一個最簡單的報警處理系統(tǒng)。

但是在這里要注意,SNS 服務(wù)本身不存儲消息。SNS 接收到消息后,會馬上進(jìn)行發(fā)布消息。如果此時沒有消息的接受者,那么這條消息就會被丟棄。除此之外,消息傳遞成功,即調(diào)用 Lambda 的接口成功之后,無論處理結(jié)果如何,消息都會被丟棄。如果 Lambda 因為一些內(nèi)部邏輯錯誤、或者外部依賴系統(tǒng)故障等原因,處理過程執(zhí)行失敗了,那么對已經(jīng)丟失的消息是無法進(jìn)行重試操作的。要提高消息處理的可靠性,可以通過在 SNS 和 Lambda 之間加入消息隊列服務(wù)(SQS)來實現(xiàn)。

SQS 標(biāo)準(zhǔn)隊列提供一個無序可靠、支持高并發(fā)的隊列服務(wù),可以存儲消息長達(dá)14天。SNS 將消息發(fā)布至 SQS,消息首先會被存儲在 SQS 中。此時,再設(shè)置 SQS 為 Lambda 的事件源(event source),那么消息就會被發(fā)送至 Lambda 進(jìn)行下一步處理。SQS 喚起 Lambda 可以配置為一個同步的過程,也就是說,如果 Lambda 執(zhí)行失敗并返回錯誤,SQS 就不會從隊列中刪除這條消息。處理失敗的消息暫時會被標(biāo)記為不可見,在一段隱藏期限過后,SQS 將會再次重復(fù)喚起 Lambda 來處理這條消息。這種方式可以大大提高消息處理的可靠性。

但是上述方式同時也引入了異常消息大量堆積而降低正常消息執(zhí)行效率的問題。為了解決這個新問題,我們可以為消息隊列配置一個 Dead-Letter Queue。如果某條消息經(jīng)過多次處理依然不成功,可被從原來的隊列中刪除,并且轉(zhuǎn)移到 Dead-Letter Queue中。標(biāo)準(zhǔn)隊列的 Dead-Letter Queue 本質(zhì)上也是標(biāo)準(zhǔn)隊列,同樣可以繼續(xù)對其中的“廢棄”消息進(jìn)行其他后續(xù)處理。

標(biāo)準(zhǔn)隊列能夠較好地支持高并發(fā)場景。一個標(biāo)準(zhǔn)隊列能夠同時接受大量消息,并發(fā)地喚起大量 Lambda 實例進(jìn)行處理。與此對應(yīng),標(biāo)準(zhǔn)隊列服務(wù)不能保證消息投遞的順序,同一條消息也可能重復(fù)投遞。所以在使用 SQS 標(biāo)準(zhǔn)隊列時,需要考慮消息的去重、處理邏輯的冪等性等問題。除了標(biāo)準(zhǔn)隊列,SQS 還有另一種先進(jìn)先出型(FIFO)隊列。FIFO 犧牲了并發(fā)性能,來保證消息投遞的順序性和唯一性。在不同應(yīng)用場景下,可以根據(jù)具體需求來靈活選擇使用不同的隊列類型。

總結(jié)

如何進(jìn)行Serverless 開發(fā)和應(yīng)用

AWS Serverless 服務(wù)在解耦合、彈性擴(kuò)展、跨區(qū)域部署等方面有天然的優(yōu)勢,但同時也有局限性:

  • 單次 Lambda 的執(zhí)行上限為15分鐘,對長時間工作支持性較差。

  • 構(gòu)筑在 Serverless 架構(gòu)上服務(wù)的可用性非常依賴于 AWS 可用性。

  • 基于 Serverless 的開發(fā)會產(chǎn)生對 AWS 系統(tǒng)的學(xué)習(xí)成本,調(diào)試、故障處理的難度也會變高。

在實際生產(chǎn)活動中,需要全面考慮需求,平衡好成本與效果。在某些適合微服務(wù)的應(yīng)用場景下,特別在執(zhí)行短狀態(tài)、臨時性等任務(wù)時,基于 AWS Serverless 的開發(fā)可以成為十分便利的開發(fā)手段。

看完上述內(nèi)容,你們掌握如何進(jìn)行Serverless 開發(fā)和應(yīng)用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

文章題目:如何進(jìn)行Serverless開發(fā)和應(yīng)用
URL地址:http://muchs.cn/article28/ghedjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、手機(jī)網(wǎng)站建設(shè)、企業(yè)建站小程序開發(fā)、靜態(tài)網(wǎng)站、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作