背景信息
内容分发网络CDN可以保护源站IP、降低源站流量风险、提升终端用户体验,同时可以将源站的应用功能卸载到边缘,进一步释放边缘算力满足业务需求。在CDN的基础上,DCDN面向动态元素,通过智能路由、协议优化、压缩传输等手段,将转发场景的性能进一步提升,广泛应用于电商、游戏、政企等行业。在互联网蓬勃发展、传统企业寻求数字化转型机会的今天,DCDN作为流量的入口,搭配灵活易扩展的高级条件及边缘脚本EdgeScript,通过流量转发这一技术手段,实现客户上云的“安全灰度”。
业务背景
A公司以直销模式闻名,生产的产品有450余种,其业务遍布80多个国家和地区,在全球范围内积累了一批忠实用户,形成了一套循环、高利润的商业模式。
A公司为什么要上新电商平台?
A公司在电商模式及线上直销业务上颇具经验,早期通过某公司的电商平台(本场景示例为Platform),搭建了如下图所示的环境:
可以看出A公司的电商系统高度依赖电商平台,在业务运营过程中,该套业务架构存在如下问题:
- 上线难
电商平台版本更新周期长,割接工作数量繁多,实际操作大量回滚。
- 扩展差
单集群支撑的用户数量有上限,无法支持A公司300万用户在线的电商愿景。
- 低可靠
基于电商平台集群流量调度的问题,同一集群主机负载不均衡,系统稳定性差。
- 不敏捷
无法满足A公司数字化转型的核心诉求,即“创新与快”。
A公司希望如何切换到新电商平台?
A公司切换到新电商平台的诉求包含登录中心、API中心和电商主站,由于实施方案类似,因此本方案以电商主站的切换作为主线进行分解。电商主站切换包含前端切换及后端切换。
- 前端切换
前端切换是指A公司需要根据特定的范围(如访问IP、HTTP头部、URL参数等),将新功能发布到特定的URL上。由于测试环境有限(仅有功能测试、压力测试两个环境),而项目周期较紧,各个部门对于测试环境同时存在测试需求,因此A公司需要DCDN具备在同一个测试环境区域灰度更新前端功能的能力。
- 后端切换
后端切换是指A公司需要根据特定的范围(特定工作室IP、用户IP所在的区域),将服务从电商平台迁移到阿里云业务中台上,同时阿里云业务中台上已部署新版本的电商平台服务。A公司计划分四次将流量从旧电商平台逐步迁移到新电商平台。
问题拆解
A公司新电商切换是A公司整体业务的重中之重,切换成功与否、顺利与否,决定了整个阿里云业务中台项目的交付。DCDN作为流量的入口,承担了前端切换与后端切换的主要工作,承担着重大的责任,面临着困难和挑战。
- 问题一:时间紧,需要解决交付时间紧的问题
从制定切换计划到首次切换,仅有不到20天的时间。在这段时间里,需要完成方案设计、方案测试、方案演练和方案完善等一系列动作,已经没有足够的时间为该项目开发及发布定制化场景的功能来趋于完善地满足需求,因此需要以低开发、轻发布的方式来进行方案设计和落地。
- 问题二:变量多,需要解决灰度维度灵活多变、逻辑复杂的问题
本次切换不仅从架构上区分了前端切换及后端切换,每个切换动作的规则变量和维度都是多种多样,对于如何合理地构建代码逻辑、最大程度地符合业务需求提出了挑战。
- 问题三:需敏捷,需要解决灰度及回退的敏捷性问题
A公司电商平台的在线用户数量虽然不多,但所有用户本质上都是渠道代理商,客单价较高。DCDN作为流量入口,不仅是精细维度的切换开关,还承载着交易、下单等用户核心业务接口的加速职责,一旦出现问题,将直接影响用户的GMV,因此需要分钟级的灰度下发及版本回退能力。
- 问题四:要可靠,需要解决配置同步、失败驱逐、可视化监控等问题
灰度首要解决的问题是确保灰度区域范围生效,确保非灰度区域不生效,针对灰度出现异常的单元及时进行驱逐,同时需要可视化的方式全面、客观地了解灰度进程、单元细节、验证手段及业务整体情况。
解决方案
DCDN在整体系统架构中处于流量的入口,同时具备转发能力这一核心模块,因此推荐使用DCDN进行流量切换。本方案介绍持续开发DCDN的转发能力,使其成为切换灰度的关键。
设计思路
如上图所示,集成DCDN高级条件及EdgeScript,利用其可扩展性及丰富的变量表和函数库,来实现前端切换及后端切换的定制化请求改写与转发。
代码示例
阿里云EdgeScript是面向DCDN可编程化演进的重要产品,通过简单易学的语法、扩展多元的变量、丰富实用的函数、快速轻量的部署,可以自由定义业务需求。本方案介绍使用阿里云EdgeScript来实现A公司较为复杂的前端灰度需求,示例如下:
- 灰度对象:
/test/
路径下包含state
文件名的JSON类型文件、主页文件。 - 灰度变量:测试人员IP、
grayID
头部、ada
参数。 - 灰度规则:
- 规则一
请求IP为测试人员IP,且请求URI为
/test/
路径下包含example
文件名的JSON类型文件,且携带grayID
头部且头部值为59384454。需要灰度,将请求转发至/canarytest/
路径下(金丝雀环境),增加灰度标识。 - 规则二
请求IP为测试人员IP,请求主页文件,且携带参数
ada
,参数值为3d3debc39e1ed1d0c56aa54d7e5af80b
(登录场景);或请求IP为办公室IP,请求主页文件,不携带ada
参数(游客场景)。需要灰度,将请求转发至/canarypc/index
(金丝雀环境),增加灰度标识。该业务诉求较为复杂,存在多场景、多判断变量,通过EdgeScript实现,代码示例如下:
m1 = match_re($remote_addr, '1.1.XX.XX|2.2.XX.XX') m2 = match_re($uri, '^/pc/index$') if and (m1,match_re($uri, '^/test/example.*json$'),$http_grayID, eq($http_grayID, '59384454')) { pcs = capture_re($uri,'^/([^/]+)/(.*)') pcs1 = get(pcs,2) new_uri = concat('/canarytest/',pcs1) add_rsp_header('X-DEBUG-INFO', 'on gray') rewrite(new_uri, 'break') return true } if or(and(m1,m2,$arg_ada,eq($arg_ada, '3d3debc39e1ed1d0c56aa54d7e5af80b')),and(m1,m2,not($arg_ada))){ add_rsp_header('X-DEBUG-INFO', 'on gray') rewrite('/canarypc/index', 'break') } else { add_rsp_header('X-DEBUG-INFO', 'off gray') }
通过该代码,实现了前端切换诉求,且可以灵活更换灰度范围和灰度目标,具备一定的扩展性。相关代码仅使用了EdgeScript内置函数库中的条件判断类函数、字符串类型函数和请求处理函数,而EdgeScript所具备的函数库可以支持更为复杂的业务场景,详情请参见EdgeScript内置函数库。
- 规则一
基于DCDN的高级条件、高级回源、更改回源HOST功能模块,设计了如下的转发路径:
阿里云DCDN具备高级条件配置功能,可以引用丰富的变量,制定灵活的规则,再搭配转发功能模块,可以实现不同规则、不同路径的灵活转发,实现灰度上云的业务目标。示例如下:
高级条件配置
#灰度条件
(($remote_addr~"3.3.XX.XX|4.4.XX.XX")|($ip_region_id~"610000|630000"))>if_stmt
#非灰度条件
(($remote_addr!~"3.3.XX.XX|4.4.XX.XX")&($ip_region_id!~"610000|630000"))>if_stmt
上述代码展示了当用户IP为3.3.XX.XX或4.4.XX.XX,或用户的IP归属于陕西、青海时,执行灰度规则,转发至新电商平台,否则按照原有业务架构转发。
高级条件具备丰富的变量可用,本次切换规则仅涉及用户IP(A公司办公室灰度测试IP)及灰度区域用户IP归属区域,其他变量详见<Nginx变量说明>。
项目管理
实施本次项目,除了满足代码和架构层面的业务需求外,通过项目管理进行管控,确保业务平稳过渡也是重要的一环。
- 切换计划
每一次切换均会提前至少一周制定计划,该计划在于厘清业务耦合关系、确认工作执行顺序、规划时间节点及里程碑事件、工作项具体到人、工作内容代码化等。
- 回退方案
通过脚本的方式生成一键回退方案,后台保存配置历史版本,如有异常一键回退,回退性能可以达到秒级,确保业务无损。
- 切换/回退演练
每一次切换及回退,需要在功能测试环境演练至少三遍,用来发现代码层级、业务层级、执行人层级的潜在风险。
- 现场协同办公
切换当天集中现场协同办公,PM(项目经理)来主导切换实施节奏,确保执行切换时的各个环节可知、可控。
运营监控
- 发布监控
通过内容管理系统的任务监控模块,监控每一次变更的全局生效进度、节点生效进度,出现异常及时进行节点驱逐(如发布卡死或失败等)。
- 业务监控
通过业务监控系统关注对应域名的带宽、请求数、状态码和响应时间,重点关注天眼监测下灰度区域的业务情况。
- 第三方监控
通过周期任务重点关注灰度区域的用户访问情况,并在灰度完成后第一时间进行即时监测,确保服务可用、功能生效。
方案优势
- 灵活易扩展
该方案通过集成EdgeScript、高级条件下的Nginx变量与Tengine API,满足A公司的业务需求。同时由于所引用的变量表和函数库存在更为丰富的资源,因此适用于更加复杂的应用场景,存在被持续开发的潜力。
- 敏捷高可用
该方案通过DCDN自有的动态配置发布变更逻辑,确保了发布及回退分钟级粒度的性能及完整性。同时通过低开发、轻发布的方式,避免了软件版本的迭代发布,对于DCDN可编程化的应用是一个良性的促进。
- 完善可复用
该方案的硬性集成(产品、组件)及软性集成(项目管理体系)比较完善,类似场景下移植成本接近于0,存在较高的复用性。
项目成果
该方案的交付成果,对于阿里云及A公司来说是一次双赢。
对于A公司来说,四次切换,单次切换生效时间可以控制在5分钟以内,且通过热切换避免了用户体验受到影响,全程0客情、0问题,保证了业务平稳过渡。同时切换到新电商平台后,用户访问的速度翻倍,服务侧RT时间减半,也解决了业务背景中提及的电商平台运营难题。
对于阿里云来说,该次DCDN的切换完成了临门一脚,标志着A公司业务中台交付的正式上线,收获了商业价值及A公司的高度认可。对于DCDN产品来说,由于用户访问速度的提高,带宽接近翻倍。同时通过实践证明了可编程化应用的巨大潜力,也衍生了更多的应用机会。
适用场景
- 有上云需求且具备一定数字化转型能力的客户(如阿里云业务中台、数据中台等)。
- 存在动态加速业务需求,对于流量转发有定制化要求的客户。
总体而言,依托于商业数字化转型的浪潮,及对终端用户性能体验的重视,会有越来越多的客户选择对动态内容加速,如API(内部API+外部应用API)、POST场景、无法缓存的持续变化内容等,DCDN的应用机会也会相应增加。在这种场景下,DCDN作为流量入口,结合本文描述的功能,可以成为微服务中间件的一部分,帮助客户实现流量的灵活转发,达到上好云、用好云的目的。