網(wǎng)站開發(fā) 如何高效、極簡(jiǎn)構(gòu)造無服務(wù)器Web應(yīng)用(組圖) aspnet開發(fā)酒店網(wǎng)站 大約多少錢
2022-10-01
正如它在過去顛覆諾基亞一樣,它的出現(xiàn),也帶來了一種全新的、顛覆性的云開發(fā)架構(gòu)模式。在它出現(xiàn)之前,開發(fā)人員無法想象能夠在幾分鐘內(nèi)快速在線部署 Web 應(yīng)用程序。近日,騰云網(wǎng)絡(luò)技術(shù)講座特邀資深技術(shù)專家孫華分享《如何高效、最小化地構(gòu)建 Web應(yīng)用》。孫華從 .
時(shí)代應(yīng)用發(fā)展
2012年,鐵云網(wǎng)首先提出了這一概念。2014年,騰云網(wǎng)絡(luò)的發(fā)布,首次從概念走向落地,也標(biāo)志著時(shí)代的開始。孫華認(rèn)為,作為一種計(jì)算服務(wù),主要有以下四個(gè)特點(diǎn)。
的出現(xiàn),為應(yīng)用程序的開發(fā)和部署提供了極簡(jiǎn)模式。目前有幾十萬用戶,用戶的通話高峰通常在每秒百萬以上。
可口可樂騰云網(wǎng)是用戶之一。疫情期間,可口可樂在短短一周內(nèi)迅速將倒酒應(yīng)用原型上線,實(shí)現(xiàn)了手機(jī)與飲料機(jī)的毫秒級(jí)通信,從構(gòu)思到交付的時(shí)間縮短了50%。
它是一家在線教育服務(wù)提供商。疫情期間,在線學(xué)習(xí)訪問量增長(zhǎng)了2-3倍。通過將服務(wù)遷移到服務(wù)器,P95 的性能得到了提高(降低了近 50%),并且通過提高利用率將成本降低了四分之一。
無服務(wù)器 Web 應(yīng)用程序用例
該架構(gòu)常見的應(yīng)用場(chǎng)景包括數(shù)據(jù)處理、IT運(yùn)維自動(dòng)化等,很多用戶也會(huì)將其應(yīng)用到前端的web應(yīng)用中,包括.js、.js等應(yīng)用。它可以將對(duì)應(yīng)的網(wǎng)頁渲染到客戶端,也支持提供json來分離前后端的REST API。靜態(tài)的,Vue前端通過HTTP請(qǐng)求調(diào)用后端API網(wǎng)站開發(fā),獲取數(shù)據(jù),展示給客戶。此外,移動(dòng)后端應(yīng)用程序經(jīng)常使用開發(fā)小程序的后端。
無服務(wù)器 Web 應(yīng)用程序的特點(diǎn)是什么?首先,在開發(fā)Web應(yīng)用程序最常見的方式中,Web應(yīng)用程序進(jìn)程運(yùn)行在服務(wù)器中。此時(shí),Web 應(yīng)用程序?qū)⒈O(jiān)聽一個(gè)端口。此外,每個(gè)請(qǐng)求都由一個(gè)單獨(dú)的計(jì)算實(shí)例處理,無論 CPU 或內(nèi)存如何,它都專用于服務(wù)該請(qǐng)求。這種方式的好處是可以隔離每個(gè)請(qǐng)求,不會(huì)有一個(gè)請(qǐng)求崩潰,影響其他用戶的并發(fā)需求。
其次,Web 應(yīng)用程序在其中運(yùn)行,并且需要是無狀態(tài)的應(yīng)用程序。由于請(qǐng)求是隨機(jī)分布到多個(gè)計(jì)算實(shí)例上的,每個(gè)計(jì)算實(shí)例在本地緩存數(shù)據(jù),下一個(gè)請(qǐng)求可能不會(huì)分配到同一個(gè)實(shí)例。因此網(wǎng)站優(yōu)化,如果您需要共享狀態(tài),可以將其存儲(chǔ)在 or 數(shù)據(jù)庫中。
第三,在計(jì)算環(huán)境中,每次調(diào)用的請(qǐng)求處理完畢后,計(jì)算環(huán)境都會(huì)被凍結(jié)網(wǎng)站建設(shè),直到下一個(gè)請(qǐng)求。在這段時(shí)間內(nèi),沒有CPU資源,后臺(tái)任務(wù)無法運(yùn)行,因此后臺(tái)進(jìn)程無法在其中運(yùn)行。
最常見的基于前后端分離的Web應(yīng)用架構(gòu)通常將前端SPEA應(yīng)用放在S3上進(jìn)行HTTP等,前端通過CDN加速。用戶下載前端后,前端會(huì)通過API調(diào)用后端的動(dòng)態(tài)數(shù)據(jù)。API 提供相應(yīng)的 HTTP 入口并觸發(fā)該函數(shù)以運(yùn)行 Web 應(yīng)用程序。Web 應(yīng)用程序可以訪問數(shù)據(jù)庫或任何后端。
新:網(wǎng)址
騰云網(wǎng)絡(luò)經(jīng)常收到客戶的反饋??蛻粝M麑W(xué)習(xí)在 Web 上運(yùn)行 Web 應(yīng)用程序或在其上運(yùn)行單個(gè)應(yīng)用程序。URL對(duì)應(yīng)的所有業(yè)務(wù)邏輯都在里面處理,只需要暴露一個(gè)HTTP入口,幾乎沒有額外的學(xué)習(xí)成本。上個(gè)月,騰云網(wǎng)絡(luò)推出了內(nèi)置的 URLs 端口,可以通過在函數(shù)中配置 URL 來提供。此功能目前僅可用,并將在不久的將來在中國(guó)推出。URL 指向的最新版本或別名。別名可以指向1或2個(gè)版本,所以可以通過指向來進(jìn)行灰度發(fā)布或者藍(lán)綠部署。
URL 和 API 有什么區(qū)別?
首先,URL 是提供 HTTP 條目的一種非常簡(jiǎn)單的內(nèi)置方式。它是在公共網(wǎng)絡(luò)上公開的 HTTP 條目。入口方式是yes,認(rèn)證方式可以通過IAM權(quán)限控制,也可以在公網(wǎng)上實(shí)現(xiàn)。URL 不提供支持,但提供 CORS 支持,因此可以進(jìn)行跨站請(qǐng)求,例如從瀏覽器,URL 會(huì)根據(jù)配置主動(dòng)返回相應(yīng)的結(jié)果,不會(huì)違反功能。但是,URLs只有一些簡(jiǎn)單的功能,并沒有辦法實(shí)現(xiàn)一些高級(jí)功能,例如使用、基于WAF的集成和內(nèi)部配置,目前還不能實(shí)現(xiàn)URLs。因此,如果要使用WAF、、、等,請(qǐng)使用API??的Rest API。
其次,URL 的超時(shí)時(shí)間與函數(shù)的超時(shí)時(shí)間相同。例如,如果函數(shù)運(yùn)行時(shí)間最長(zhǎng)為 15 分鐘,則 URLs 請(qǐng)求可以運(yùn)行 15 分鐘,而 Rest API 和 HTTP API 的超時(shí)時(shí)間僅為 29-30s。在大小上,URL 與 6MB 相同。
第三,使用 URL 沒有額外費(fèi)用,但使用 Rest API 和 HTTP API 有相應(yīng)的費(fèi)用。
許多用戶要求 Web 應(yīng)用程序具有相應(yīng)的自定義域名才能訪問網(wǎng)站。此時(shí),您可以在前面通過CDN的方式添加自定義域名,例如添加自己的域名,同時(shí)結(jié)合WAF保護(hù)相應(yīng)的集成應(yīng)用。因?yàn)?URL 只提供入口,所以 CDN 回源時(shí),會(huì)回源站點(diǎn)。Host無法返回源站,無法獲取用戶實(shí)際訪問的自定義域名。如果域名是固定的,可以通過應(yīng)用中的配置來學(xué)習(xí),但是如果域名不固定,則需要根據(jù)二級(jí)域名來判斷是哪個(gè)租戶在做相應(yīng)的處理。在這種情況下,您可以利用該功能。域名可以在用戶請(qǐng)求端獲取,添加到另一個(gè),然后發(fā)送回源站。在源站的應(yīng)用中,可以通過這個(gè)獲取用戶訪問的真實(shí)域名。
如果基于 URL 部署單功能 Web 應(yīng)用,靜態(tài)資源通過代理放在 S3 中進(jìn)行動(dòng)態(tài)請(qǐng)求,結(jié)構(gòu)統(tǒng)一如下,不需要 API。
新工具:
URL 為您提供了一種非常簡(jiǎn)單的獲取 HTTP 入口的方法,但開發(fā)方法是基于事件驅(qū)動(dòng)的方法網(wǎng)站開發(fā),將事件從事件源轉(zhuǎn)換為 json 對(duì)象。對(duì)于熟悉 Web 應(yīng)用開發(fā)的開發(fā)者,會(huì)有額外的學(xué)習(xí)成本。一般的做法是在應(yīng)用中寫一個(gè)函數(shù),進(jìn)行一層轉(zhuǎn)換,將json轉(zhuǎn)換成web應(yīng)用需要的格式,不過這種方法還可以進(jìn)一步簡(jiǎn)化。.
騰云網(wǎng)絡(luò)推出的新工具的作用是幫助用戶完成轉(zhuǎn)化。Web 應(yīng)用程序可以在 Web 應(yīng)用程序上運(yùn)行而無需修改代碼。獲取對(duì)應(yīng)的json對(duì)象,轉(zhuǎn)換成HTTP請(qǐng)求,發(fā)送給Web應(yīng)用。Web應(yīng)用程序處理完后,通過HTTP返回,并轉(zhuǎn)換成需要的json格式。這樣,無論使用什么語言或 Web 框架,都可以通過這種方式開發(fā) Web 應(yīng)用程序或 HTTP API,而無需修改代碼或添加任何依賴項(xiàng)。,您可以使用熟悉的方法在本地開發(fā)和調(diào)試 API。
此外,API 的 Rest API、HTTP API 都支持作為 HTTP 的事件源。無論是哪種格式,都可以進(jìn)行相應(yīng)的解析和轉(zhuǎn)換。同時(shí),由于 URL 的事件格式與 API HTTP API V2 的事件格式完全相同,因此無需任何修改即可訪問 URL。用戶結(jié)合 URL 并可以在其上運(yùn)行 Web 應(yīng)用程序或 HTTP API。同時(shí),由于web應(yīng)用可能會(huì)返回圖片等數(shù)據(jù),因?yàn)閿?shù)據(jù)不能直接存儲(chǔ)在json中,所以需要做數(shù)據(jù),會(huì)檢測(cè)返回的數(shù)據(jù)是否為數(shù)據(jù),并自動(dòng)完成轉(zhuǎn)碼。
同時(shí)支持容器鏡像形式的打包功能,也支持zip形式的打包功能。當(dāng)用戶使用容器鏡像打包功能時(shí),生成的容器鏡像既可以運(yùn)行在互聯(lián)網(wǎng)上,也可以運(yùn)行在容器環(huán)境中,甚至可以運(yùn)行在本地計(jì)算機(jī)上。因此,Web 應(yīng)用程序可以很容易地運(yùn)行在不同的計(jì)算平臺(tái)上,并且可以在不同平臺(tái)之間平滑遷移而無需修改。
在實(shí)踐中構(gòu)建無服務(wù)器 Web 應(yīng)用程序
Web 應(yīng)用程序是使用 URL 構(gòu)建的,并且可以通過熟悉的 API 輕松訪問。但是如果使用它,是否可以在其上運(yùn)行現(xiàn)有的 Web 應(yīng)用程序?
騰云網(wǎng)試過了。是電商場(chǎng)景,為什么要在上面跑呢?首先,在網(wǎng)站上,100個(gè)訪問量最大的網(wǎng)站中,份額第一;其次,是基于PHP開發(fā)的,在web應(yīng)用網(wǎng)站建設(shè)中使用了PHP,大約70-80%的網(wǎng)站都是基于PHP開發(fā)的,用途非常廣泛;第三,每次請(qǐng)求進(jìn)入都需要重新初始化PHP語言,與無狀態(tài)計(jì)算環(huán)境非常兼容。
騰云網(wǎng)絡(luò)團(tuán)隊(duì)采用以下 架構(gòu)運(yùn)行。
前端架構(gòu)采用并做CDN,使用運(yùn)行中的應(yīng)用,使用URL代替API作為入口,通過S3存儲(chǔ)靜態(tài)資源。然后,通過函數(shù)中的鏡像方式,加載PHP、PHP和PHP FPM運(yùn)行的進(jìn)程管理服務(wù),并用它打包代碼。后端使用相應(yīng)的數(shù)據(jù)庫,例如最新的V2數(shù)據(jù)庫來緩存數(shù)據(jù),并使用EFS共享系統(tǒng)保存用戶上傳的文件。通過這個(gè)架構(gòu),騰云網(wǎng)絡(luò)實(shí)現(xiàn)了在基礎(chǔ)上的運(yùn)營(yíng)。
在其上運(yùn)行的網(wǎng)站的實(shí)際性能如何?如果你想在你的網(wǎng)站上取得更好的性能,你可以將靜態(tài)內(nèi)容制作成靜態(tài)內(nèi)容,放到前端的CDN網(wǎng)站上。如果您正在運(yùn)營(yíng)電子商務(wù)網(wǎng)站,用戶會(huì)瀏覽產(chǎn)品、將產(chǎn)品添加到購(gòu)物車、提交訂單和付款。這些是動(dòng)態(tài)請(qǐng)求,需要返回到后端 PHP 應(yīng)用程序。對(duì)于靜態(tài)應(yīng)用,可以在3分鐘內(nèi)實(shí)現(xiàn)從無請(qǐng)求到最高峰的性能,1小時(shí)內(nèi)每分鐘可以處理多個(gè)訂單。在成本方面,每處理一個(gè)訂單需要調(diào)用 10 次 API,即處理 100 萬個(gè)訂單需要調(diào)用 1000 萬次函數(shù)。據(jù)統(tǒng)計(jì),1000 萬次函數(shù)調(diào)用的成本僅為 300 美元。不僅,
分享最后,孫華演示了網(wǎng)站運(yùn)行的實(shí)際表現(xiàn)并提供了相關(guān)信息。有興趣的開發(fā)者可以掃描下方二維碼獲取。