Serverless時(shí)代,這才是Web應(yīng)用開發(fā)正確的打開方式

2023-12-31    分類: 網(wǎng)站建設(shè)

如同 iPhone 當(dāng)年顛覆了諾基亞,Serverless 的出現(xiàn)也帶來了一種全新的、顛覆式的云開發(fā)架構(gòu)模式。在 Serverless 出現(xiàn)前,開發(fā)者們根本無法想象幾分鐘就能快速部署一個(gè) Web 應(yīng)用上線。近日,亞馬遜云科技 Tech Talk 特別邀請了資深無服務(wù)器技術(shù)專家孫華帶來分享《 如何高效、極簡構(gòu)造無服務(wù)器 Web 應(yīng)用》。孫華以 Amazon Lambda 的視角介紹了無服務(wù)器 Web 應(yīng)用的構(gòu)造方式,并講述了如何利用最新發(fā)布的 Lambda Function URLs 和 Lambda Adapter 進(jìn)一步簡化無服務(wù)器 Web 應(yīng)用的開發(fā)和調(diào)試并且實(shí)現(xiàn) Web 應(yīng)用在 Lambda,F(xiàn)argate 和 EC2 等計(jì)算平臺(tái)之間平滑遷移。

Serverless 時(shí)代的應(yīng)用開發(fā)

2012 年,Iron 公司首次提出 Serverless 的概念。2014 年亞馬遜云科技發(fā)布 Amazon Lambda 第一次讓 Serverless 從概念走向落地,也標(biāo)志著 Serverless 時(shí)代的開啟。孫華認(rèn)為,Amazon Lambda 作為無服務(wù)器計(jì)算服務(wù),主要有以下四個(gè)特點(diǎn)。

無需部署管理基礎(chǔ)設(shè)施:無服務(wù)器計(jì)算并不代表真的沒有服務(wù)器,而是不需要管理部署服務(wù)器。自動(dòng)擴(kuò)展:不用考慮擴(kuò)容、容量規(guī)劃的問題,底層的服務(wù)會(huì)自動(dòng)實(shí)現(xiàn)按需擴(kuò)容。按需付費(fèi):按照時(shí)間和使用量收費(fèi),避免為閑置計(jì)算資源浪費(fèi)。高度可靠與安全:基于高可用架構(gòu)開發(fā),可用性高。

Amazon Lambda 的出現(xiàn)為應(yīng)用開發(fā)和部署提供了極簡的模型。目前,Amazon Lambda 已有數(shù)十萬用戶,用戶的調(diào)用峰值通常超過每秒超過百萬級(jí)。

Babble 是一家線上教育服務(wù)商。疫情期間,線上學(xué)習(xí)訪問量激增 2-3 倍。Babble 通過將服務(wù)遷移到 Amazon Lambda 服務(wù)器,P95 性能提高了 250ms (降低近 50%),且通過提高利用率,成本降低了四分之一。

無服務(wù)器 Web 應(yīng)用使用場景

無服務(wù)器 Web 應(yīng)用有哪些特點(diǎn)呢?首先,最常見的 Web 應(yīng)用開發(fā)方式,服務(wù)器里面運(yùn)行的是 Web 應(yīng)用進(jìn)程,此時(shí),Web 應(yīng)用會(huì)監(jiān)聽到一個(gè)端口。并且,在 Amazon Lambda 里面每個(gè)請求都是由一個(gè)單獨(dú)的計(jì)算實(shí)例來處理的,不管 CPU 還是內(nèi)存,都專門為這一個(gè)請求服務(wù)。這種方式的優(yōu)勢在于,可以將每個(gè)請求全部隔離開,不會(huì)出現(xiàn)某一個(gè)請求崩潰,影響其他用戶的并發(fā)需求。

其次,Web 應(yīng)用在 Amazon Lambda 里面運(yùn)行,需要是無狀態(tài)的應(yīng)用。因?yàn)?Amazon Lambda 請求會(huì)隨機(jī)分發(fā)到多個(gè)計(jì)算實(shí)例上,每個(gè)計(jì)算實(shí)例在本地緩存數(shù)據(jù),下一個(gè)請求進(jìn)入,可能不會(huì)分配到同一個(gè)實(shí)例上。所以,如果需要共享狀態(tài),可以存儲(chǔ)在 Redis 或者數(shù)據(jù)庫中。

第三,在 Amazon Lambda 的計(jì)算環(huán)境上,每次調(diào)用的請求處理完畢后,計(jì)算環(huán)境會(huì)被凍結(jié)到下一次請求來之前。在這段時(shí)間里是沒有 CPU 資源的,后臺(tái)任務(wù)不能運(yùn)行,所以不能在 Amazon Lambda 里面運(yùn)行后臺(tái)的進(jìn)程。

最常見的基于前后端分離的 Web 應(yīng)用架構(gòu),通常會(huì)把前端的 SPEA 應(yīng)用放在 Amazon S3 上做 HTTP、Django 等,前端用 CDN 加速。用戶下載了前端后,前端會(huì)通過 API Gateway,來調(diào)用后端動(dòng)態(tài)的數(shù)據(jù)。API Gateway 提供相應(yīng)的 HTTP 的入口,觸發(fā) Lambda 函數(shù),從而運(yùn)行 Web 應(yīng)用。Web 應(yīng)用可以訪問數(shù)據(jù)庫或者任何后端。

新功能:Lambda Function URLs

亞馬遜云科技經(jīng)常會(huì)收到客戶的反饋。客戶希望在 Amazon Lambda 上學(xué)習(xí)運(yùn)行 Web 應(yīng)用或者將單獨(dú)的應(yīng)用運(yùn)行在 Lambda Function 里面。在 Lambda Function 里面處理所有 URL 相應(yīng)的業(yè)務(wù)邏輯,只需要暴露一個(gè) HTTP 入口就可以了,幾乎不需要任何額外的學(xué)習(xí)成本。上個(gè)月,亞馬遜云科技推出了 Amazon Lambda 內(nèi)置的 Function URLs 端口,在 Lambda 函數(shù)里配置一個(gè) Function URL,就可以提供 HTTPS Endpoint。目前該功能僅在 Amazon Global 提供,在中國區(qū)會(huì)于近期上線。Function URLs 指向 Amazon Lambda 的最新版本,或者是 Amazon Lambda 別名。Amazon Lambda 別名可以指向 1~2 個(gè) Amazon Lambda 的版本,因此可以通過指向 alias 的方式進(jìn)行灰度發(fā)布或者藍(lán)綠部署。

Lambda Function URLs 與 API Gateway 之間有什么區(qū)別?

首先,F(xiàn)unction URLs 是非常簡單地內(nèi)置提供 HTTP 入口的方式。它是暴露在公網(wǎng)上的 HTTP 入口,其入口方式是 HTTPS 的,認(rèn)證方式可以采用 IAM 的權(quán)限控制或者在公網(wǎng)上實(shí)現(xiàn)。Function URLs 不提供 Custom domain 支持,但是提供 CORS 支持,因此可以跨站請求,比如,瀏覽器發(fā)來 Option,F(xiàn)unction URLs 會(huì)主動(dòng)根據(jù)配置,返回相應(yīng)的結(jié)果,不會(huì)觸犯 Lambda 函數(shù)。但是,F(xiàn)unction URLs 只具備一些簡單的功能,對(duì)于一些高級(jí)的功能沒辦法實(shí)現(xiàn),比如,使用 Usage Plans,基于 WAF 的集成和在內(nèi)部提供 Private Enedpoint,目前 Function URLs 是無法實(shí)現(xiàn)的。因此,如果想使用 WAF、Usage Private、Private Enedpoint 等功能,請使用 API Gateway 的 Rest API。

其次,Lambda Function URLs 的超時(shí)時(shí)間是與函數(shù)的超時(shí)時(shí)間是一樣的,比如,函數(shù)最長要運(yùn)行 15 分鐘,Lambda Function URLs 請求就可以運(yùn)行 15 分鐘,而 Rest API 和 HTTP API 的超時(shí)時(shí)間僅為 29-30s。在 Payload Size 上,F(xiàn)unction URLs 跟 Amazon Lambda 是一樣的,均為 6MB。

第三,采用 Lambda Function URLs 不需要支付額外的費(fèi)用,但是采用 Rest API 與 HTTP API 都需要支付相應(yīng)的費(fèi)用。

很多用戶需要 Web 應(yīng)用有相應(yīng)的自定義域名訪問網(wǎng)站。這時(shí),可以在前面通過 CDN 的方式,加上自定義域名,比如,在 CloudFront 上加上自己的域名,同時(shí)結(jié)合 Amazon WAF 進(jìn)行相應(yīng)集成應(yīng)用的防護(hù)。因?yàn)?Function URLs 只提供 HTTPS 的入口,在 CDN 回源的時(shí)候,是通過 HTTPS 回到源站的,不能把 Host Header 傳回源站,不能獲得用戶真正訪問的自定義域名。如果域名是固定的,可以在應(yīng)用里通過配置了解,但如果域名不是固定的,那么就需要根據(jù)二級(jí)域名確定是哪個(gè)租戶在做相應(yīng)的處理。這種情況下,就可以利用 CloudFront Function 的功能。CloudFront Function 可以在用戶請求端獲取域名,加到另外的 Header 里面,再把 Header 傳回源站,在源站的應(yīng)用里面就可以通過這個(gè) Header 獲得用戶訪問的真實(shí)的域名。

如果基于 Lambda Function URLs 部署單函數(shù)的的 Web 應(yīng)用,前面通過 CloudFront 做動(dòng)態(tài)請求的代理,靜態(tài)資源放在 Amazon S3,就會(huì)統(tǒng)一為如下架構(gòu),也就不需要 API Gateway 了。

新工具:Lambda Adapter

Lambda Function URLs 為大家提供了一個(gè)非常簡單就可以獲得 HTTP 入口的方式,但是 Amazon Lambda 的開發(fā)方式是基于事件驅(qū)動(dòng)的方法來進(jìn)行開發(fā)的,會(huì)將事件源過來的事件轉(zhuǎn)換為 json 對(duì)象。對(duì)于熟悉 Web 應(yīng)用開發(fā)的開發(fā)者,會(huì)有額外的學(xué)習(xí)成本,一般采用的做法是在應(yīng)用里面寫一個(gè) Handler 函數(shù),進(jìn)行一層轉(zhuǎn)換,把 json 轉(zhuǎn)成 Web 應(yīng)用需要的格式,但是這種方式可以進(jìn)一步簡化。

亞馬遜云科技推出的新工具 Lambda Adapter 作用就是幫助用戶完成轉(zhuǎn)化。采用 Lambda Adapter 無需修改代碼即可在 Amazon Lambda 上運(yùn)行 Web 應(yīng)用。Lambda Adapter 從 Amazon Lambda 獲得相應(yīng)的 json 對(duì)象,把它轉(zhuǎn)換成 HTTP 請求,發(fā)送到 Web 應(yīng)用上,Web 應(yīng)用處理之后通過 HTTP Response 回到 Lambda Adapter,Lambda Adapter 會(huì)將它轉(zhuǎn)換成 Lambda 需要的 json Response 的格式。這樣不管用什么語言,什么樣的 Web 框架,開發(fā) Web 應(yīng)用或者 HTTP API,都可以通過這樣的方式,不需要修改代碼,也不需要添加任何的依賴,就可以在 Amazon Lambda 上運(yùn)行,且不需要用特殊的工具,就可以用熟悉的方法在本地開發(fā)調(diào)試 API。

同時(shí),Adapter 支持用容器鏡像的方式打包函數(shù),也支持用 zip 的方式來打包函數(shù)。當(dāng)用戶使用容器鏡像的方式打包函數(shù),得到的容器鏡像既可以在 Amazon Lambda 上運(yùn)行,也可以在容器環(huán)境里面運(yùn)行,甚至在本地的電腦上運(yùn)行。所以 Web 應(yīng)用可以非常方便地運(yùn)行在不同的計(jì)算平臺(tái)上,不需要做修改,就可以在不同的平臺(tái)之間平滑地遷移。

構(gòu)造無服務(wù)器 Web 應(yīng)用實(shí)踐

通過 Lambda Function URLs 和 Lambda Adapter 可以很方便的通過熟悉的 API 的方式,構(gòu)建了 Web 應(yīng)用。但是如果用 Lambda Adapter,是否可以把現(xiàn)有的 Web 應(yīng)用運(yùn)行在 Amazon Lambda 上呢?

亞馬遜云科技用 WooCommerce 進(jìn)行了嘗試。WooCommerce 是一個(gè)電商的場景,為什么要嘗試將 WooCommerce 運(yùn)行在 Amazon Lambda 上呢?首先,在 Buildwith 網(wǎng)站上,訪問量大的一百個(gè)網(wǎng)站中,WooCommerce 所占份額第一;其次,Wordpress 是基于 PHP 開發(fā)的,PHP 在 Web 應(yīng)用網(wǎng)站建設(shè)上,大概有 70-80% 的網(wǎng)站是基于 PHP 開發(fā)的,使用量非常廣;第三,PHP 語言,每個(gè)請求進(jìn)入,都需要重新進(jìn)行初始化,同 Amazon Lambda 無狀態(tài)的計(jì)算環(huán)境非常契合。

亞馬遜云科技團(tuán)隊(duì)采用了如下無服務(wù)器 WooCommerce 架構(gòu),在 Amazon Lambda 上運(yùn)行 WordPress。

在 Serverless 上運(yùn)行網(wǎng)站實(shí)際性能如何呢?如果在 WordPress 的網(wǎng)站想要做到比較好的性能,可以把 WordPress 靜態(tài)化,變成靜態(tài)內(nèi)容放在前端的 CDN 網(wǎng)站上。如果運(yùn)行的是 WooCommerce 電商網(wǎng)站,用戶瀏覽商品、將商品加入購物車、提交訂單、支付,是動(dòng)態(tài)請求,需要回到后端的 PHP 應(yīng)用上。對(duì)于靜態(tài)應(yīng)用,性能方面可以做到 3 分鐘內(nèi)從無請求到最高峰值,每分可處理 2 萬多筆訂單,持續(xù) 1 小時(shí)。成本方面,每處理一筆訂單需要調(diào)用 10 次 API,也就是處理 100 萬筆訂單需要調(diào)用 1000 萬次 Lambda 函數(shù)。據(jù)統(tǒng)計(jì),1000 萬次 Lambda 函數(shù)調(diào)用的費(fèi)用也僅為 300 美元。不僅如此,在測試過程中網(wǎng)站的 API 響應(yīng)時(shí)間也非常平穩(wěn),P99 延遲僅為在 1-2s,P50 延遲只有 500ms 左右。

分享的最后,孫華針對(duì) Serverless 上運(yùn)行網(wǎng)站實(shí)際性能進(jìn)行了演示,并提供了 Serverless 相關(guān)的資料,感興趣的開發(fā)可掃描下方二維碼進(jìn)行獲取。

非常感謝您讀完創(chuàng)新互聯(lián)的這篇文章:"Serverless時(shí)代,這才是Web應(yīng)用開發(fā)正確的打開方式",僅為提供更多信息供用戶參考使用或?yàn)閷W(xué)習(xí)交流的方便。我們公司提供:網(wǎng)站建設(shè)、網(wǎng)站制作、官網(wǎng)建設(shè)、SEO優(yōu)化、小程序制作等服務(wù),歡迎聯(lián)系我們提供您的需求。

本文標(biāo)題:Serverless時(shí)代,這才是Web應(yīng)用開發(fā)正確的打開方式
URL網(wǎng)址:http://www.muchs.cn/news43/311243.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)全網(wǎng)營銷推廣、營銷型網(wǎng)站建設(shè)、企業(yè)建站、網(wǎng)站策劃

廣告

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

成都網(wǎng)站建設(shè)公司