2023-12-31 分類: 網(wǎng)站建設
如同 iPhone 當年顛覆了諾基亞,Serverless 的出現(xiàn)也帶來了一種全新的、顛覆式的云開發(fā)架構(gòu)模式。在 Serverless 出現(xiàn)前,開發(fā)者們根本無法想象幾分鐘就能快速部署一個 Web 應用上線。近日,亞馬遜云科技 Tech Talk 特別邀請了資深無服務器技術專家孫華帶來分享《 如何高效、極簡構(gòu)造無服務器 Web 應用》。孫華以 Amazon Lambda 的視角介紹了無服務器 Web 應用的構(gòu)造方式,并講述了如何利用最新發(fā)布的 Lambda Function URLs 和 Lambda Adapter 進一步簡化無服務器 Web 應用的開發(fā)和調(diào)試并且實現(xiàn) Web 應用在 Lambda,F(xiàn)argate 和 EC2 等計算平臺之間平滑遷移。
Serverless 時代的應用開發(fā)2012 年,Iron 公司首次提出 Serverless 的概念。2014 年亞馬遜云科技發(fā)布 Amazon Lambda 第一次讓 Serverless 從概念走向落地,也標志著 Serverless 時代的開啟。孫華認為,Amazon Lambda 作為無服務器計算服務,主要有以下四個特點。
無需部署管理基礎設施:無服務器計算并不代表真的沒有服務器,而是不需要管理部署服務器。自動擴展:不用考慮擴容、容量規(guī)劃的問題,底層的服務會自動實現(xiàn)按需擴容。按需付費:按照時間和使用量收費,避免為閑置計算資源浪費。高度可靠與安全:基于高可用架構(gòu)開發(fā),可用性高。Amazon Lambda 的出現(xiàn)為應用開發(fā)和部署提供了極簡的模型。目前,Amazon Lambda 已有數(shù)十萬用戶,用戶的調(diào)用峰值通常超過每秒超過百萬級。
Babble 是一家線上教育服務商。疫情期間,線上學習訪問量激增 2-3 倍。Babble 通過將服務遷移到 Amazon Lambda 服務器,P95 性能提高了 250ms (降低近 50%),且通過提高利用率,成本降低了四分之一。
無服務器 Web 應用使用場景無服務器 Web 應用有哪些特點呢?首先,最常見的 Web 應用開發(fā)方式,服務器里面運行的是 Web 應用進程,此時,Web 應用會監(jiān)聽到一個端口。并且,在 Amazon Lambda 里面每個請求都是由一個單獨的計算實例來處理的,不管 CPU 還是內(nèi)存,都專門為這一個請求服務。這種方式的優(yōu)勢在于,可以將每個請求全部隔離開,不會出現(xiàn)某一個請求崩潰,影響其他用戶的并發(fā)需求。
其次,Web 應用在 Amazon Lambda 里面運行,需要是無狀態(tài)的應用。因為 Amazon Lambda 請求會隨機分發(fā)到多個計算實例上,每個計算實例在本地緩存數(shù)據(jù),下一個請求進入,可能不會分配到同一個實例上。所以,如果需要共享狀態(tài),可以存儲在 Redis 或者數(shù)據(jù)庫中。
第三,在 Amazon Lambda 的計算環(huán)境上,每次調(diào)用的請求處理完畢后,計算環(huán)境會被凍結(jié)到下一次請求來之前。在這段時間里是沒有 CPU 資源的,后臺任務不能運行,所以不能在 Amazon Lambda 里面運行后臺的進程。
最常見的基于前后端分離的 Web 應用架構(gòu),通常會把前端的 SPEA 應用放在 Amazon S3 上做 HTTP、Django 等,前端用 CDN 加速。用戶下載了前端后,前端會通過 API Gateway,來調(diào)用后端動態(tài)的數(shù)據(jù)。API Gateway 提供相應的 HTTP 的入口,觸發(fā) Lambda 函數(shù),從而運行 Web 應用。Web 應用可以訪問數(shù)據(jù)庫或者任何后端。
新功能:Lambda Function URLs亞馬遜云科技經(jīng)常會收到客戶的反饋??蛻粝M?Amazon Lambda 上學習運行 Web 應用或者將單獨的應用運行在 Lambda Function 里面。在 Lambda Function 里面處理所有 URL 相應的業(yè)務邏輯,只需要暴露一個 HTTP 入口就可以了,幾乎不需要任何額外的學習成本。上個月,亞馬遜云科技推出了 Amazon Lambda 內(nèi)置的 Function URLs 端口,在 Lambda 函數(shù)里配置一個 Function URL,就可以提供 HTTPS Endpoint。目前該功能僅在 Amazon Global 提供,在中國區(qū)會于近期上線。Function URLs 指向 Amazon Lambda 的最新版本,或者是 Amazon Lambda 別名。Amazon Lambda 別名可以指向 1~2 個 Amazon Lambda 的版本,因此可以通過指向 alias 的方式進行灰度發(fā)布或者藍綠部署。
Lambda Function URLs 與 API Gateway 之間有什么區(qū)別?
首先,F(xiàn)unction URLs 是非常簡單地內(nèi)置提供 HTTP 入口的方式。它是暴露在公網(wǎng)上的 HTTP 入口,其入口方式是 HTTPS 的,認證方式可以采用 IAM 的權(quán)限控制或者在公網(wǎng)上實現(xiàn)。Function URLs 不提供 Custom domain 支持,但是提供 CORS 支持,因此可以跨站請求,比如,瀏覽器發(fā)來 Option,F(xiàn)unction URLs 會主動根據(jù)配置,返回相應的結(jié)果,不會觸犯 Lambda 函數(shù)。但是,F(xiàn)unction URLs 只具備一些簡單的功能,對于一些高級的功能沒辦法實現(xiàn),比如,使用 Usage Plans,基于 WAF 的集成和在內(nèi)部提供 Private Enedpoint,目前 Function URLs 是無法實現(xiàn)的。因此,如果想使用 WAF、Usage Private、Private Enedpoint 等功能,請使用 API Gateway 的 Rest API。
其次,Lambda Function URLs 的超時時間是與函數(shù)的超時時間是一樣的,比如,函數(shù)最長要運行 15 分鐘,Lambda Function URLs 請求就可以運行 15 分鐘,而 Rest API 和 HTTP API 的超時時間僅為 29-30s。在 Payload Size 上,F(xiàn)unction URLs 跟 Amazon Lambda 是一樣的,均為 6MB。
第三,采用 Lambda Function URLs 不需要支付額外的費用,但是采用 Rest API 與 HTTP API 都需要支付相應的費用。
很多用戶需要 Web 應用有相應的自定義域名訪問網(wǎng)站。這時,可以在前面通過 CDN 的方式,加上自定義域名,比如,在 CloudFront 上加上自己的域名,同時結(jié)合 Amazon WAF 進行相應集成應用的防護。因為 Function URLs 只提供 HTTPS 的入口,在 CDN 回源的時候,是通過 HTTPS 回到源站的,不能把 Host Header 傳回源站,不能獲得用戶真正訪問的自定義域名。如果域名是固定的,可以在應用里通過配置了解,但如果域名不是固定的,那么就需要根據(jù)二級域名確定是哪個租戶在做相應的處理。這種情況下,就可以利用 CloudFront Function 的功能。CloudFront Function 可以在用戶請求端獲取域名,加到另外的 Header 里面,再把 Header 傳回源站,在源站的應用里面就可以通過這個 Header 獲得用戶訪問的真實的域名。
如果基于 Lambda Function URLs 部署單函數(shù)的的 Web 應用,前面通過 CloudFront 做動態(tài)請求的代理,靜態(tài)資源放在 Amazon S3,就會統(tǒng)一為如下架構(gòu),也就不需要 API Gateway 了。
新工具:Lambda AdapterLambda Function URLs 為大家提供了一個非常簡單就可以獲得 HTTP 入口的方式,但是 Amazon Lambda 的開發(fā)方式是基于事件驅(qū)動的方法來進行開發(fā)的,會將事件源過來的事件轉(zhuǎn)換為 json 對象。對于熟悉 Web 應用開發(fā)的開發(fā)者,會有額外的學習成本,一般采用的做法是在應用里面寫一個 Handler 函數(shù),進行一層轉(zhuǎn)換,把 json 轉(zhuǎn)成 Web 應用需要的格式,但是這種方式可以進一步簡化。
亞馬遜云科技推出的新工具 Lambda Adapter 作用就是幫助用戶完成轉(zhuǎn)化。采用 Lambda Adapter 無需修改代碼即可在 Amazon Lambda 上運行 Web 應用。Lambda Adapter 從 Amazon Lambda 獲得相應的 json 對象,把它轉(zhuǎn)換成 HTTP 請求,發(fā)送到 Web 應用上,Web 應用處理之后通過 HTTP Response 回到 Lambda Adapter,Lambda Adapter 會將它轉(zhuǎn)換成 Lambda 需要的 json Response 的格式。這樣不管用什么語言,什么樣的 Web 框架,開發(fā) Web 應用或者 HTTP API,都可以通過這樣的方式,不需要修改代碼,也不需要添加任何的依賴,就可以在 Amazon Lambda 上運行,且不需要用特殊的工具,就可以用熟悉的方法在本地開發(fā)調(diào)試 API。
同時,Adapter 支持用容器鏡像的方式打包函數(shù),也支持用 zip 的方式來打包函數(shù)。當用戶使用容器鏡像的方式打包函數(shù),得到的容器鏡像既可以在 Amazon Lambda 上運行,也可以在容器環(huán)境里面運行,甚至在本地的電腦上運行。所以 Web 應用可以非常方便地運行在不同的計算平臺上,不需要做修改,就可以在不同的平臺之間平滑地遷移。
構(gòu)造無服務器 Web 應用實踐通過 Lambda Function URLs 和 Lambda Adapter 可以很方便的通過熟悉的 API 的方式,構(gòu)建了 Web 應用。但是如果用 Lambda Adapter,是否可以把現(xiàn)有的 Web 應用運行在 Amazon Lambda 上呢?
亞馬遜云科技用 WooCommerce 進行了嘗試。WooCommerce 是一個電商的場景,為什么要嘗試將 WooCommerce 運行在 Amazon Lambda 上呢?首先,在 Buildwith 網(wǎng)站上,訪問量大的一百個網(wǎng)站中,WooCommerce 所占份額第一;其次,Wordpress 是基于 PHP 開發(fā)的,PHP 在 Web 應用網(wǎng)站建設上,大概有 70-80% 的網(wǎng)站是基于 PHP 開發(fā)的,使用量非常廣;第三,PHP 語言,每個請求進入,都需要重新進行初始化,同 Amazon Lambda 無狀態(tài)的計算環(huán)境非常契合。
亞馬遜云科技團隊采用了如下無服務器 WooCommerce 架構(gòu),在 Amazon Lambda 上運行 WordPress。
在 Serverless 上運行網(wǎng)站實際性能如何呢?如果在 WordPress 的網(wǎng)站想要做到比較好的性能,可以把 WordPress 靜態(tài)化,變成靜態(tài)內(nèi)容放在前端的 CDN 網(wǎng)站上。如果運行的是 WooCommerce 電商網(wǎng)站,用戶瀏覽商品、將商品加入購物車、提交訂單、支付,是動態(tài)請求,需要回到后端的 PHP 應用上。對于靜態(tài)應用,性能方面可以做到 3 分鐘內(nèi)從無請求到最高峰值,每分可處理 2 萬多筆訂單,持續(xù) 1 小時。成本方面,每處理一筆訂單需要調(diào)用 10 次 API,也就是處理 100 萬筆訂單需要調(diào)用 1000 萬次 Lambda 函數(shù)。據(jù)統(tǒng)計,1000 萬次 Lambda 函數(shù)調(diào)用的費用也僅為 300 美元。不僅如此,在測試過程中網(wǎng)站的 API 響應時間也非常平穩(wěn),P99 延遲僅為在 1-2s,P50 延遲只有 500ms 左右。
分享的最后,孫華針對 Serverless 上運行網(wǎng)站實際性能進行了演示,并提供了 Serverless 相關的資料,感興趣的開發(fā)可掃描下方二維碼進行獲取。
非常感謝您讀完創(chuàng)新互聯(lián)的這篇文章:"Serverless時代,這才是Web應用開發(fā)正確的打開方式",僅為提供更多信息供用戶參考使用或為學習交流的方便。我們公司提供:網(wǎng)站建設、網(wǎng)站制作、官網(wǎng)建設、SEO優(yōu)化、小程序制作等服務,歡迎聯(lián)系我們提供您的需求。
本文標題:Serverless時代,這才是Web應用開發(fā)正確的打開方式
URL網(wǎng)址:http://www.rwnh.cn/news43/311243.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設、品牌網(wǎng)站建設、全網(wǎng)營銷推廣、營銷型網(wǎng)站建設、企業(yè)建站、網(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)
猜你還喜歡下面的內(nèi)容