CDN雲課堂 |可程式設計CDN – EdgeScript應用場景、語言速覽和實操演示

jackson_wang發表於2020-05-08

在CDN雲課堂的第二期,阿里雲CDN團隊技術專家拓山為大家帶來了《可程式設計CDN – EdgeScript實踐》主題技術分享。本次分享透過對阿里雲CDN成長到當前體量的挑戰以及對應的解法,闡述EdgeScript為何而生,同時也快速對ES語言進行速覽,並透過官網EdgeScript控制檯去進行實操,幫助使用者十分鐘上手EdgeScript。


面對海量使用者之上,阿里雲CDN的挑戰是什麼?


阿里雲CDN已經在全球擁有2800個以上的節點,其中國內2300個以上的節點,覆蓋34個省級地區,海外500以上的節點覆蓋了70多個國家和地區,具有130Tbps頻寬儲備的能力。那麼在如此大體量的情況下,阿里雲CDN之上承接著非常多的使用者,包括各種場景,下載、直播、點播、動態加速,每個客戶都有各自的需求和痛點。


當CDN只具備標準化功能,也就是開箱即用的情況下,希望構建自己業務的客戶就會遇到一些痛點,站在使用者的角度來看,常見的問題可能包括:開發同學需要具備按需定義CDN業務流的能力,完成老闆交代的業務需求;業務專家非常瞭解自己的業務需求,希望能擼起袖子直接開幹,缺少易學易用的程式設計平臺;運維同學認為穩定性重於泰山,需要保障線上業務永不當機,要求CDN平臺能夠做到模擬環境和生產環境隔離,實現功能的快上快下。


所以在標準功能黑盒化基礎之上,CDN平臺還需要做什麼呢?就是可程式設計化。以此來應對使用者各種各樣的非標功能,幫助使用者自定義實現個性化業務系統。


EdgeScript的誕生——快速構建基於CDN的個性化業務體系


為了更好地滿足使用者需求,阿里雲推出EdgeScript,定位於CDN可程式設計配置領域內的專用語言。透過EdgeScript,阿里雲CDN使用者可以快速構建基於CDN的個性化的業務體系,實現敏捷的業務迭代,持續贏得交付收益。


從去年9月,EdgeScript開始公測,在公測期間在阿里巴巴集團內部以及外部使用者側,已經得到廣泛的應用。拓山認為EdgeScript為客戶帶來的最大價值是個性化與敏捷化,能夠廣泛應用於各種業務流的定製開發,同時將原本2-4周的交付週期縮短至1周內。


EdgeScript典型的應用場景


CDN是連線客戶與使用者的通道,使用者那麼在訪問客戶源站之前會透過CDN去做加速分發,那麼其實,CDN會存在兩端,一端是接入域,一端是回源域。EdgeScript是支援接入域可程式設計和回源域可程式設計。



在接入域可程式設計領域,第一個是鑑權場景,這個場景在點播、直播中的防盜鏈需求中十分普遍,基於請求引數、基於cookie或其他複雜演算法有各類鑑權需求,EdgeScript可以快速實現鑑權需求,從而完成對資源的保護。


第二個是遠端鑑權,CDN其實僅僅是作為分散式儲存、內部分發,對端上的處理還是比較缺失的,比如端上使用者的播放、留存資料,這種一般會在客戶側自建鑑權中心對這些資料進行處理。透過EdgeScript提供遠端APP訪問能力,可以實現與客戶側鑑權中心的互動,從而從基本鑑權上,加持對更復雜盜鏈場景的識別。第三個是請求和響應控制,對於傳送到CDN這種請求,具有完全的控制能力。第四個是改寫&重定向,比較常見的應用在多語言版本的網站之上,比如說中文的網站可能會302到1個location,英文或者德文的網站,可能會302到不同的location。


第五個是封禁攔截。比如可能會針對某些地區、某些特殊的邏輯或者特殊的客戶端IP去進行封禁攔截,都可以透過EdgeScript來做到可程式設計化,定製化。同時,還可以針對防爬策略的實現,去防止我們的那個爬蟲爬資源。第六個是A/B Testing。通常在外部系統中,客戶源站上一個新功能時,可能會有A/B Testing的需求,很可能需要CDN側做支援。透過CDN攜帶不同的回源請求頭或不同的URL上,去區分觸發源站的不同功能,從而來實現這個全鏈路的A/B Testing。


第七個是快取策略。在使用者自定義業務場景下,在標準的功能的快取貼條時長或者快取策略不能夠滿足客戶需求時,可以透過EdgeScript去完成自身業務定製化。第八個是限速控制,比如需要對免費客戶和付費客戶進行限速的區分。第九個是M3u8改寫,通常出現在直播類、影片類的業務需求之中。第十個是動態日誌打標,對於我們的CDN日誌做一些打標處理。


在回源域可程式設計領域,第一個是回源鑑權場景,第二個會支援回源策略和容災引流的場景,使用者可以透過EdgeScript來完成多源之間的選擇,比如當A、B、C三個源站,當A負載比較高,可以根據一些策略把回源流量切換到B或者C。第三個是回源請求和響應控制。


拓山表示:以上所有的落地場景,在過去公測期間得到了落地應用。我們也計劃逐步將以上功能開放到公共雲平臺上,讓所有使用者都可以享受EdgeScript可程式設計所覆蓋的這些場景的敏捷交付,目前正在逐步開放能力的過程中。


EdgeScript與EdgeRoutine的區別


在上週,阿里雲CDN雲課堂第一期,也對剛剛公測上線的EdgeRoutine進行了詳細的講解,點選觀看影片回放,那麼這兩款產品的區別是什麼呢?


這兩款產品,其實都是對CDN這樣一個分散式快取系統,或者說使用者和源站這樣一個南北流量的資料平面的可程式設計,可以從業務流和資料流去進行劃分。EdgeScript會覆蓋完整的業務流可程式設計,比如說各類鑑權、各類封禁、各種使用者自定義的改寫&重定向、請求控制和A/B Testing。那麼資料流的場景當中,ES只是覆蓋一小部分,比如像M3u8改寫,但更大部分EdgeRoutine來去覆蓋。比如Combo、ESI等。


EdgeScript的語言速覽


那麼整個EdgeScript在設計的過程中有一個原則,就是維持著一個小語法和大函式庫的語言能力設計。


在小語法的話,EdgeScript對新的語法元素的吸納上,保持得非常的程度的剋制,很大程度上降低了使用者學習EdgeScript的成本。同時,EdgeScript也提供非常非常龐大的函式庫,所有函式庫在夯實了穩定性和安全性的基礎之後,會不斷輸出到公共雲之上,提供豐富的CDN領域操縱能力給使用者,對於使用受眾,EdgeScript不要求程式設計背景,希望基於阿里雲CDN,任何人都可以構建定製化業務系統。


一、資料型別

EdgeScript支援四種資料型別,數字、布林、字串和字典。



二、變數

在變數這一塊,EdgeScript支援內建變數的和使用者自定義變數。關於內建變數,詳情可以參考官網文件。同時,EdgeScript允許使用者自定義變數,這也是可程式設計非常重要的基礎能力,詳情可以參考下圖:


三、運算子

EdgeScript支援少量的原生運算子,包括賦值運算子:operator = 、負號運算子:operator – 、函式呼叫:operator ()


那麼這麼少的運算子,那麼多資料型別,怎麼去操作呢?實際上對各資料型別的操作,是不再透過運算子去支援的,均由對應內建函式支援。提供不同資料型別的函式操作API,如:數字運算、字串操作、布林比較、字典操作。具體示例如下圖:


EdgeScript希望提供給使用者一個簡單的程式設計介面,在僅支援少量原生運算子之外,大部分運算子都透過API這個一致性的程式設計介面提供出去。這樣做的好處是:一方面運算子複雜度均被隱藏,包括優先順序、結合性、資料型別語義等;另一方面DSL程式碼轉換過程中仍會使用原生runtime operator,進而繼續保持高效能。


四、控制語句

支援If、if-else、多層巢狀;return;foreach callback,具體見下面if-else的示例:



五、函式

在函式部分,EdgeScript支援使用者定義函式和內建函式庫。使用者自定義函式可以見如下示例:



整個函式呼叫的話,那麼無論是內建函式還是自定義函式,均透過括號運算子進行函式呼叫。


下圖是在官網上的函式庫中的一部分,包括條件判斷、數字型別、字串型別、字典型別、請求處理、限速、快取、時間、密碼演算法、JSON相關等等,其實在後續,會把內部使用的API、函式不斷開放給使用者。


實操ABC


接下來拓山將進行EdgeScript的實操ABC演示。EdgeScript有兩個程式設計平臺,包括去年公測時開放出來的程式設計工具ES CLI和ES WebIDE。


ES CLI可以針對模擬環境和生產環境,去新增規則、查詢規則、刪除規則,以及把模擬環境publish到生產,或者Rollback回滾。


同時也提供ES WebIDE,在阿里雲CDN控制檯上對全網使用者開放,配置詳情如下圖:


現在,預設每個域名可以配置一條EdgeScript規則。後續當一個域名下可能會存在多條EdgeScript規則時,可以透過優先順序來定義。同時可以根據執行位置來規定在其他配置之前執行還是其他配置之後執行。出於穩定性的考量,關於規則的編輯、增刪改查會在模擬環境中去進行,當模擬環境中操作驗證沒有問題後,再發布到生產環境中。


在分享的最後一部分,拓山進行了大量實操演示,包括:特定檔案型別的封禁、識別低版本IE、限速、基於請求引數的改寫、鑑權、除錯能力:_es_dbg等等。


點選觀點完整直播回放:


CDN作為雲服務的一個基本件,正在從標準化服務向可程式設計服務進化,可程式設計化CDN賦能使用者快速構建雲上個性化業務體系,幫助使用者快速實現配置變更和版本迭代,更及時響應業務需求,期待更多使用者能使用EdgeScript,與我們一起進行可程式設計CDN實踐。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490631/viewspace-2690674/,如需轉載,請註明出處,否則將追究法律責任。

相關文章