45

可编程CDN – EdgeScript应用场景、语言速览和实操演示

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzI0NTE4NjA0OQ%3D%3D&%3Bmid=2658364439&%3Bidx=3&%3Bsn=864c0f3b0c0ba4120d9b3d54cf15c4d1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

5月8日下午15:00,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是支持接入域可编程和回源域可编程。

63eQnub.png!web

在接入域可编程领域,第一个是鉴权场景,这个场景在点播、直播中的防盗链需求中十分普遍,基于请求参数、基于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、SSR、ESI等。

EdgeScript的语言速览

那么整个EdgeScript在设计的过程中有一个原则,就是维持着一个小语法和大函数库的语言能力设计。

在小语法的话,EdgeScript对新的语法元素的吸纳上,保持得非常的程度的克制,很大程度上降低了用户学习EdgeScript的成本。同时,EdgeScript也提供非常非常庞大的函数库,所有函数库在夯实了稳定性和安全性的基础之后,会不断输出到公共云之上,提供丰富的CDN领域操纵能力给用户,对于使用受众,EdgeScript不要求编程背景,希望基于阿里云CDN,任何人都可以构建定制化业务系统。

一、数据类型

EdgeScript支持四种数据类型,数字、布尔、字符串和字典。

FBzMFrz.png!web

二、变量

在变量这一块,EdgeScript支持内置变量的和用户自定义变量。关于内置变量,详情可以参考官网文档:https://help.aliyun.com/document_detail/126568.html

同时,EdgeScript允许用户自定义变量,这也是可编程非常重要的基础能力,详情可以参考下图:

BrqMFn7.png!web

三、运算符

EdgeScript支持少量的原生运算符,包括赋值运算符:operator = 、负号运算符:operator – 、函数调用:operator ()

那么这么少的运算符,那么多数据类型,怎么去操作呢?实际上对各数据类型的操作,是不再通过运算符去支持的,均由对应内置函数支持。提供不同数据类型的函数操作API,如:数字运算、字符串操作、布尔比较、字典操作。具体示例如下图:

f2qi2mJ.png!web

EdgeScript希望提供给用户一个简单的编程界面,在仅支持少量原生运算符之外,大部分运算符都通过API这个一致性的编程界面提供出去。这样做的好处是:一方面运算符复杂度均被隐藏,包括优先级、结合性、数据类型语义等;另一方面DSL代码转换过程中仍会使用原生runtime operator,进而继续保持高性能。

四、控制语句

支持If、if-else、多层嵌套;return;foreach callback,具体见下面if-else的示例:

umAJJrz.png!web

五、函数

在函数部分,EdgeScript支持用户定义函数和内置函数库。用户自定义函数可以见如下示例:

jMJvUrA.png!web

整个函数调用的话,那么无论是内置函数还是自定义函数,均通过括号操作符进行函数调用。

下图是在官网上的函数库中的一部分,包括条件判断、数字类型、字符串类型、字典类型、请求处理、限速、缓存、时间、密码算法、JSON相关等等,其实在后续,会把内部使用的API、函数不断开放给用户。

MNNnUbB.png!web

实操ABC

接下来拓山将进行EdgeScript的实操ABC演示。EdgeScript有两个编程平台,包括去年公测时开放出来的编程工具ES CLI和ES WebIDE。

ES CLI可以针对模拟环境和生产环境,去添加规则、查询规则、删除规则,以及把模拟环境publish到生产,或者Rollback回滚。

同时也提供ES WebIDE,在阿里云CDN控制台上对全网用户开放,配置详情如下图:

36nMFnb.png!web

现在,默认每个域名可以配置一条EdgeScript规则。后续当一个域名下可能会存在多条EdgeScript规则时,可以通过优先级来定义。同时可以根据执行位置来规定在其他配置之前执行还是其他配置之后执行。出于稳定性的考量,关于规则的编辑、增删改查会在模拟环境中去进行,当模拟环境中操作验证没有问题后,再发布到生产环境中。

在分享的最后一部分,拓山进行了大量实操演示,包括:特定文件类型的封禁、识别低版本IE、限速、基于请求参数的改写、鉴权、调试能力:_es_dbg等等。

点击观点完整直播回放:https://yq.aliyun.com/live/2740

IV3eu2E.png!web

RniiyeQ.png!web

CDN作为云服务的一个基本件,正在从标准化服务向可编程服务进化,可编程化CDN赋能用户快速构建云上个性化业务体系,帮助用户快速实现配置变更和版本迭代,更及时响应业务需求,期待更多用户能使用EdgeScript,与我们一起进行可编程CDN实践。

M7nAzyj.png!web

 动动小手指 了解更多详情 !

R3Ufaay.gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK