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

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

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

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

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

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

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

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

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

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

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

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

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

新功能:Lambda Function URLs

亞馬遜云科技經(jīng)常會(huì)收到客戶的反饋??蛻粝M?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 提供,在中國(guó)區(qū)會(huì)于近期上線。Function URLs 指向 Amazon Lambda 的最新版本,或者是 Amazon Lambda 別名。Amazon Lambda 別名可以指向 1~2 個(gè) Amazon Lambda 的版本,因此可以通過(guò)指向 alias 的方式進(jìn)行灰度發(fā)布或者藍(lán)綠部署。

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

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

其次,Lambda Function URLs 的超時(shí)時(shí)間是與函數(shù)的超時(shí)時(shí)間是一樣的,比如,函數(shù)最長(zhǎng)要運(yùn)行 15 分鐘,Lambda Function URLs 請(qǐng)求就可以運(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èn)網(wǎng)站。這時(shí),可以在前面通過(guò) CDN 的方式,加上自定義域名,比如,在 CloudFront 上加上自己的域名,同時(shí)結(jié)合 Amazon WAF 進(jìn)行相應(yīng)集成應(yīng)用的防護(hù)。因?yàn)?Function URLs 只提供 HTTPS 的入口,在 CDN 回源的時(shí)候,是通過(guò) HTTPS 回到源站的,不能把 Host Header 傳回源站,不能獲得用戶真正訪問(wèn)的自定義域名。如果域名是固定的,可以在應(yīng)用里通過(guò)配置了解,但如果域名不是固定的,那么就需要根據(jù)二級(jí)域名確定是哪個(gè)租戶在做相應(yīng)的處理。這種情況下,就可以利用 CloudFront Function 的功能。CloudFront Function 可以在用戶請(qǐng)求端獲取域名,加到另外的 Header 里面,再把 Header 傳回源站,在源站的應(yīng)用里面就可以通過(guò)這個(gè) Header 獲得用戶訪問(wèn)的真實(shí)的域名。

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

新工具:Lambda Adapter

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

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

同時(shí),Adapter 支持用容器鏡像的方式打包函數(shù),也支持用 zip 的方式來(lái)打包函數(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ú)服務(wù)器 Web 應(yīng)用實(shí)踐

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

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

亞馬遜云科技團(tuán)隊(duì)采用了如下無(wú)服務(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)站,用戶瀏覽商品、將商品加入購(gòu)物車(chē)、提交訂單、支付,是動(dòng)態(tài)請(qǐng)求,需要回到后端的 PHP 應(yīng)用上。對(duì)于靜態(tài)應(yīng)用,性能方面可以做到 3 分鐘內(nèi)從無(wú)請(qǐng)求到最高峰值,每分可處理 2 萬(wàn)多筆訂單,持續(xù) 1 小時(shí)。成本方面,每處理一筆訂單需要調(diào)用 10 次 API,也就是處理 100 萬(wàn)筆訂單需要調(diào)用 1000 萬(wàn)次 Lambda 函數(shù)。據(jù)統(tǒng)計(jì),1000 萬(wàn)次 Lambda 函數(shù)調(diào)用的費(fèi)用也僅為 300 美元。不僅如此,在測(cè)試過(guò)程中網(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)的資料,感興趣的開(kāi)發(fā)可掃描下方二維碼進(jìn)行獲取。

非常感謝您讀完創(chuàng)新互聯(lián)的這篇文章:"Serverless時(shí)代,這才是Web應(yīng)用開(kāi)發(fā)正確的打開(kāi)方式",僅為提供更多信息供用戶參考使用或?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)用開(kāi)發(fā)正確的打開(kāi)方式
URL網(wǎng)址:http://www.bm7419.com/news43/311243.html

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

廣告

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

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