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

在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是支持接入域可編程和回源域可編程。

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允許用戶自定義變量,這也是可編程非常重要的基礎能力,詳情可以參考下圖:

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

三、運算符

EdgeScript支持少量的原生運算符,包括賦值運算符:operator = 、負號運算符:operator – 、函數調用:operator ()

那麼這麼少的運算符,那麼多數據類型,怎麼去操作呢?實際上對各數據類型的操作,是不再通過運算符去支持的,均由對應內置函數支持。提供不同數據類型的函數操作API,如:數字運算、字符串操作、布爾比較、字典操作。具體示例如下圖:

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

EdgeScript希望提供給用戶一個簡單的編程界面,在僅支持少量原生運算符之外,大部分運算符都通過API這個一致性的編程界面提供出去。這樣做的好處是:一方面運算符複雜度均被隱藏,包括優先級、結合性、數據類型語義等;另一方面DSL代碼轉換過程中仍會使用原生runtime operator,進而繼續保持高性能。

四、控制語句

支持If、if-else、多層嵌套;return;foreach callback,具體見下面if-else的示例:

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

五、函數

在函數部分,EdgeScript支持用戶定義函數和內置函數庫。用戶自定義函數可以見如下示例:
CDN雲課堂 |可編程CDN – EdgeScript應用場景、語言速覽和實操演示

整個函數調用的話,那麼無論是內置函數還是自定義函數,均通過括號操作符進行函數調用。

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

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

實操ABC

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

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

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

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

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

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

點擊觀點完整直播回放: https://yq.aliyun.com/live/2740

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

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