CDN雲課堂 | EdgeRoutine技術專家教你把JS代碼跑到CDN邊緣

CDN雲課堂第一講中,阿里雲智能技術專家洪曉龍分享《阿里雲CDN輕量編程環境》,對EdgeRoutine的背景、功能、案例實踐介紹並在線進行上手操作演示,希望更多用戶能夠使用CDN輕量編程環境服務自主編程、快速落地實際線上業務。本文爲直播分享全文。

雲原生與邊緣計算概念火熱

以雲原生爲理念的基礎服務快速增長

近年來,“雲原生”概念在技術領域大熱,企業上雲意願越來越強烈。不管在國內還是全球,雲原生技術在公共雲和私有云的使用量一路領先增長,Gartner等多家行業機構已經預測雲原生即將進入爆發階段。

而同屬雲原生陣營, Serverless&FaaS年增長率這一點上已經逐漸趕上甚至超過以容器形態提供服務的使用量。Serverless&FaaS已經證明了其擁有巨大的技術優勢和商業價值潛力。

5G引爆邊緣計算的概念

除了“雲原生”,“邊緣計算”也是近年來最熱門的技術領域之一。CDN其實就是邊緣生態的重要一環,在CDN遍佈全球的邊緣節點上提供計算服務是目前“邊緣計算”概念快速落地的最大助力。邊緣計算的最大特性低時延,Gartner甚至預測到2025年,超過75%的雲服務將外遷到邊緣。目前,邊緣計算的應用場景已經陸續覆蓋到交通、醫療、娛樂等各行業各領域,離大衆生活越來越近。

雲原生和邊緣計算的組合碰撞能夠催生出什麼樣的技術和產品?

傳統的IaaS是抽象物理機資源來提供服務,如虛擬機ECS、彈性容器ECI,再到更上層的Serverless和FaaS服務形態,整個服務邊界一直在上移,資源隔離開銷越來越小,給雲的客戶帶來更靈活的按需付費和彈性伸縮能力。阿里雲CDN在全球部署了超過2800個邊緣節點,兼具了“雲原生”和“邊緣計算”兩大最熱門的技術理念和業務場景,當真正將Serverless落地到邊緣,將給客戶帶來什麼樣的技術和產品服務?

這就是今天洪曉龍爲大家介紹的產品:阿里雲CDN輕量編程環境-EdgeRoutine。顧名思義它是一個邊緣程序,屬於邊緣Serverless服務範疇,主要特性是超低時延、按需付費和無需運維。

從物理機走向雲原生,我們可以在多個能力矩陣上作對比:在延遲方面,數據中心的網絡帶寬和地域限制決定了它的平均時延會比較高,Serverless更輕量遷移成本更低,在region選擇時相對可以做到中延時,而依賴邊緣節點能力的邊緣Serverless則可以實現更低的延時;在計算能力方面,因爲邊緣節點資源有限,提供的更多是輕量級計算服務,對比更下層的容器、虛擬機、物理機等,資源隔離開銷更小,彈性能力更強;在成本方面,從物理機、虛擬機、彈性容器到Serverless,價格越來越低,而邊緣Serverless基於CDN資源複用的場景,它的價格將做到更低,滿足業務對於邊緣節點的總體規劃和預期。

因爲EdgeRoutine(ER) 是依託於阿里雲CDN去提供服務的,所以它的很大的一個優勢是覆蓋了全球6大洲70多個國家,基本上在全球做到了所有邊緣節點的覆蓋。

阿里雲CDN輕量編程環境-EdgeRoutine是什麼?

EdgeRoutine(ER) 是阿里雲CDN團隊開發的邊緣Serverless計算環境,支持在CDN邊緣執行客戶編寫/編譯的JavaScript或者WebAssembly代碼(未來會推出)。客戶無需關心實際機器、部署region、調度和伸縮性。一經上傳,全球部署,全球執行!EdgeRoutine主要具有以下四個特徵:

輕量級

l 簡單代碼片段

l 單個文件最大1M,當項目比較複雜時候,支持webpack打包生成JS文件再上傳

l 支持多種事件觸發,fetch、chrome、set

延遲低

l 冷啓動5-10ms,當代碼在全球已經部署完成之後,客戶請求進來縮短冷啓動時間,直接提供服務

l 邊緣部署,就近接入

l 代碼check完成之後,下發到全球秒級生效,修改配置秒級刷新

l DCDN全站加速幫助客戶回源加速

限制高

l 內存128M、CPU時間5ms,5ms可以支持絕大部分客戶的業務,隨着計算複雜度升高可付費升級,動態可配

l 因爲是輕量級針對網絡帶寬流量爲主,對文件、進程、Socket進行了限制,網絡限於HTTP/HTTPS

l 敏感信息不建議放入,後續將支持邊緣KV/cache讓客戶能實現計算、存儲等業務場景

功能靈活

l 提供完整JavaScript環境,支持ES6語法

l Web標準Service Worker API支持,前端應用無需更改即可適配

l 與CDN融合,可配置擴展任意CDN邏輯,做到CDN可編程

EdgeRoutine的技術原理

很多瞭解CDN的人都知道CDN是一個多級緩存的架構,CDN加速靜態資源時,將源站上的資源緩存到距離客戶端最近的CDN節點上。當您訪問該靜態資源時,直接從緩存中獲取,避免通過較長的鏈路回源,提高訪問效率。且阿里雲CDN支持多級緩存架構(默認爲兩級),可以有效提高資源命中率,大大減少回源請求數量。

CDN雲課堂 | EdgeRoutine技術專家教你把JS代碼跑到CDN邊緣

EdgeRoutine(ER) 是依託阿里雲CDN這套多級緩存架構,處在邊緣節點這樣一個位置,和邊緣網關邊緣緩存都處在同一層,它是一個獨立的組件,提供了一個獨立的JS runtime。

當邊緣環境、邊緣網關收到客戶請求之後,它可以智能識別,如果客戶配置了邊緣代碼,邊緣網關會將這個請求直接透明代理到EdgeRoutine(ER)。EdgeRoutine(ER)完全接管這個請求去執行客戶部署的邊緣代碼,實際上是客戶用邊緣代碼去直接接管了請求的生命週期。

在請求的生命週期裏面,支持去執行一些輕量級的計算,同時依然可以使用CDN相關的業務功能,在函數中利用cdnproxy:true這樣的參數去將請求代理給邊緣網關,然後再走CDN多級緩存架構,同樣可以利用到CDN高命中率的這個特點。

EdgeRoutine(ER)其實也是支持Serverless或者再重新發起一個fetch請求,這個fetch請求和主請求無關,完全是在代碼裏由客戶生成的子請求,子請求可以直接訪問其它任意互聯網域名,也可以繼續使用cdnproxy代理到阿里雲CDN。如果中小站長,僅僅是簡單的靜態頁面的話,完全可以直接託管在邊緣,不再需要購買額外雲服務,既可以享受Serverless的便利,也可以享受CDN的邊緣內容分發優勢。

EdgeRoutine適用場景

第一個場景是針對CDN本身提供的一些功能:包括攔截請求、限流限速、內容生成、多源合併、異步鑑權等等,這些完全是可以通過EdgeRoutine(ER) 自主編程實現,代碼基本上可以隨時隨地的去進行更改測試、灰度發佈、上線,EdgeRoutine(ER)將CDN相關功能可編程化,無論大型企業還是中小企業,都可以自由定製組合,無需提工單提需求,作爲開發者幫助業務快速實現落地;

第二個場景針對前端網頁這一塊,支持web API、網頁加速、HTML解析、ESI、邊緣渲染、邊緣***等,然後當然也可以實現一個簡單的邊緣API網關去實現業務中轉。前端是EdgeRoutine(ER)一個非常創新的場景,前端同學往往非常關注網頁如何優化渲染和提高終端客戶體驗,前端技術也是近些年變革最快創新不斷的領域,CDN的靜態內容分發技術針對css、js、圖片、視頻等各類靜態資源的加速也正是基於前端體驗不斷的追求而持續迭代的。EdgeRoutine(ER)爲前端優化在端和雲之間開闢了一個新的方向-“邊”(邊緣),雲邊端協同,爲瀏覽器/APP客戶端減壓,在邊緣上實現部分前端業務和輕量計算,可以是“微前端”概念的一個探索方向;

第三個場景,當在寫代碼或者發版的時候,可以通過一個AB測試的這樣的功能灰度發佈灰度上線,增加穩定性的同時也可以逐步的去觀察自己新功能的受衆率和期望轉化率,實現逐步優化或及時調頭。比如:通過代碼中使用Geo地域信息,CDN完全支持在國家/省市/區縣等更細粒度如浙江區域或者廣東區域去灰度不同的功能;

第四個場景,IoT的設備網關在進行數據生成之後,期望把這些數據分析後記錄到中心,可能需要一些簡單的邊緣合併、分析,再把彙總好的數據,回傳回中心,邊緣可以在端的基礎上再加一層收集分析彙總,將海量數據的流式/離線計算壓力分散到邊緣節點,保障低時延的同時可以有效減輕端和源站壓力。

除此之外還有網站託管、小程序等,可以參考下面的大圖:

CDN雲課堂 | EdgeRoutine技術專家教你把JS代碼跑到CDN邊緣

開發者能用EdgeRoutine(ER)做什麼事情?

接下來用幾個案例進行說明開發者可以基於ER做一些什麼典型的事情。

第一, 網頁加速

當2G、3G的時候,大家可能都有過這種體驗:打開一個網頁不停的轉圈,等待的時間非常煩惱。4G來了之後這種情況會少一些,5G會更好。

CDN核心價值其實就是幫助實現網頁靜態加速,縮短這種轉圈等待的過程,通過網頁資源靜態的就近分發,去幫助終端用戶更快的觸達到對應的資源,更快地訪問對應的網頁、圖片、視頻等等。

但當涉及到一些動態資源,單純的靜態分發是無法解決這部分請求的時延問題的。舉個實例,像阿里巴巴國際站,他更多的是海外的服務,源站在海外受衆在國內,或者與之相反,這種網絡鏈路顯而易見就會比較差,造成終端用戶等待時間長體驗極差。

下圖上半部分是常規的渲染效果,當一秒鐘的時候頁面仍顯示白框,下一秒的時候可能一下彈出來很多內容。因爲網頁是在服務端一次性渲染出來再傳輸到客戶端的,甚至對於一些子資源如圖片,都是需要前端JS多次發起網絡請求,當客戶端收到所有資源之後,才渲染出完整的頁面。

CDN雲課堂 | EdgeRoutine技術專家教你把JS代碼跑到CDN邊緣

那秒級的等待體驗好不好呢?

如果使用了EdgeRoutine(ER) ,那是否可以在邊緣上去動態渲染?回答是Yes。

在EdgeRoutine(ER)的幫助下, 前端的業務邏輯也可以實現流式,如流水線般提高業務效率,一般會選擇優先渲染頁面框架,再逐步渲染一些靜態的資源,整個過程客戶端只發起一次網絡請求,所有的內容都是在邊緣渲染拼裝,流式輸出,包括所有的圖片、視頻資源,甚至可以在邊緣實現異步模式,併發地去請求各類資源。在整個邊緣渲染過程中,參考上圖下半部分,在0.3秒的時候還是一個白框,當不到0.4秒時,整體頁面框架已經出來,然後是文字介紹和價格部分,當一秒鐘不到,除了圖片之外的其他簡單數據其實都已經顯現,最重的圖片資源留在最後逐步加載。

從上圖的TTFB和Download來對比,整體的首屏時間、下載時間都得到了極大的提升。邊緣渲染、邊緣***都是ER提供的創新場景,只有在邊緣低時延模式下,纔可以實現和瀏覽器本地優化相似的效果,且還可以利用CDN同時完成靜態內容加速。

第二,邊緣執行業務計算,降低源站壓力

終端發達的今天,手機移動端、瀏覽器端不可避免仍會包含一些簡單或複雜的業務計算,比如輸入的會員賬號密碼就必須回源做校驗,這種動態的計算邏輯要回到雲上的服務器纔可以,這個過程QPS量級和時延都比較高,源站服務器壓力也很大。

那在邊緣執行計算是不是可以優化這種情況呢?

剛說到的動態的鑑權,如果直接在邊緣環境裏面直接去做校驗,同樣可以校驗內容是否正確,就不需要回源,減少QPS,而且利用邊緣特性實現了超低時延的優點。甚至當有部分業務依賴動態數據和靜態資源做拼裝組合,比如AB、小程序模板等,都可以直接依託CDN去做緩存。

第三,邊緣Serverless

如果企業擁有一個爆款APP,當幾億iOS、Android各種各樣的設備同時在線,那開發者一定有此類需求:海量在線設備要做採樣打點,多版本的灰度升級,AB測試觀察新版本功能的效果或轉化率。如果幾億設備全部打點回源,那源站QPS肯定是扛不住的,一般情況只會選擇3%或5%的樣本率隨機去打點觀察。

當使用EdgeRoutine(ER)邊緣服務,可以將海量設備的QPS分散到遍佈全國甚至全球的CDN節點,QPS的壓力已經不是問題,甚至可以簡單分析彙總後再將數據回傳到企業數據中心,方便業務回溯。

另外,現在很多電商網站都在做千人千面,如果通過回源去實現的話,整個成本會非常高,在邊緣上直接通過用戶地域信息推薦相應內容,就不再需要通過源站服務來做決策,直接在邊緣將人和資源做匹配即可。

如何使用EdgeRoutine(ER)?——實操演示(點擊直接觀看視頻)

基於以上的功能介紹和案例實踐,如何通過EdgeRoutine(ER) 去編寫邊緣代碼,如何上傳部署,如何本地調試和在線測試?阿里雲技術專家洪曉龍在直播中也做了相關演示。

EdgeRoutine(ER)推出了命令行相關工具edgeroutine-cli,開發者可以直接在Windows/Mac/Linux本地環境進行代碼調試,上傳代碼,也可以完成灰度測試,灰度上線。具體查看阿里雲官網或者開源頁面:https://help.aliyun.com/document_detail/154621.html

https://github.com/aliyun/alibabacloud-edgeroutine-cli

https://www.npmjs.com/package/@alicloud/edgeroutine-cli

具體實操演示:

1、EdgeRoutine demo:Hello World
CDN雲課堂 | EdgeRoutine技術專家教你把JS代碼跑到CDN邊緣

2、EdgeRoutine demo:Hello World本地調試
CDN雲課堂 | EdgeRoutine技術專家教你把JS代碼跑到CDN邊緣

3、EdgeRoutine demo:webpack打包
CDN雲課堂 | EdgeRoutine技術專家教你把JS代碼跑到CDN邊緣

點擊觀看直播回放:https://yq.aliyun.com/live/2690

點擊瞭解EdgeRoutine(ER)詳情與申請試用:https://www.aliyun.com/activity/cdn/edgeroutine

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章