1.业务背景
A公司是一家总部位于美国密歇根州的亚达城的家居护理产品公司,业务遍布80多个国家和地区。A公司生产的产品有450余种,包括营养保健食品、美容化妆品、个人护理用品、家居护理用品和家居耐用品等。A公司以直销模式闻名,在全球范围内广泛拥有忠实拥趸,形成了一套循环、高利润的商业模式。
1.1A公司为什么要上新电商平台?
A公司在电商模式及线上直销业务的探索颇具经验,早期通过甲骨文公司的Hybris电商平台,搭建了如下图的环境:
从中不难看出,A公司的电商系统高度依赖Hybris,在业务运营过程中,该套业务架构引起了如下问题:
上线难:
电商平台版本更新,准备时间旷日持久,割接工作数量繁多,实际操作大量回滚。
扩展差:
单集群支撑的用户数量有上限,无法支持A公司300w用户在线的电商愿景。
低可靠:
基于Hybris集群流量调度的问题,同一集群主机负载不均衡,系统稳定性差。
。不敏捷:
无法满足A公司数字换转型的核心诉求,即“创新与快”
因此,A公司计划上线阿里云业务中台,构建新电商平台。
1.2A公司希望怎么切换到新电商平台?
A公司切换到新电商平台的诉求包含登录中心、API中心、电商主站,由于实施方案类似,因此本方案以电商主站的切换作为主线进行分解。电商主站切换包含前端切换及后端切换。
• 前端切换:
前端切换是指客户需要根据特定的范围(如访问IP、HTTP头部、URL参数等),将新功能发布到特定的URL上,由于测试环境有限(仅有功能测试、压力测试两个环境),而项目周期较紧,各个部门对于测试环境同时存在测试需求,因此客户需要我们具备在同一个测试环境区域灰度新前端功能的要求。
• 后端切换:
后端切换是指客户需要根据特定的范围(特定工作室IP、用户IP所在的区域),将服务从Hybris迁移到阿里云业务中台上,同时阿里云业务中台上已部署新版本的电商平台服务。
客户计划分四次,将流量从旧电商平台逐步迁移到新电商平台。
2.问题拆解
A公司新电商切换是2020年A公司整体业务的Top Priority。
切换成功与否,顺利与否,决定了整个阿里云业务中台项目的交付,DCDN作为流量的入口,承担了前端切换与后端切换的主要工作,承担着重大的责任,面临着困难的挑战——
问题一:时间紧,需要解决交付时间紧的问题
从制定Cutover Plan,到首次切换,仅有不到20天的时间。
在这一段时间里,需要我们完成方案设计、方案测试、方案演练、方案完善,已经没有足够的时间为这次项目目标开发及发布定制化场景的功能来趋于完善地满足需求,需要我们以低开发、轻发布的方式来进行方案设计和落地。
问题二:变量多,需要解决灰度维度灵活多变逻辑复杂的问题
本次切换不仅从架构上区分了前端切换及后端切换,每个切换动作的规则变量和维度都是多种多样,对于我们合理地构建代码逻辑、最大程度地符合业务需要提出了挑战。
问题三:需敏捷,需要解决灰度及回退的敏捷性问题
A公司电商平台的在线用户数量虽然不多,但所有用户本质上都是渠道代理商,客单价极高。DCDN作为流量入口,不仅是精细维度的切换开关,还承载着交易、下单等客户核心业务接口的加速职责,一旦出现问题,将直接影响客户的GMV,因此需要分钟级的灰度下发及版本回退要求。
问题四:要可靠,需要解决配置同步、失败驱逐、可视化监控等问题
灰度首要解决的问题是,确保灰度区域范围生效,确保非灰度区域不生效,针对灰度出现异常的单元及时进行驱逐,同时需要可视化的方式全面、客观地了解灰度进程、单元细节、验证手段及业务整体情况。
3.解决方案
如上文中提及,DCDN在整体系统架构中,处于流量的入口,同时具备转发能力这一CDN核心模块,是执行流量切换的最优选择。
本方案即在于持续开发DCDN的转发能力,使其成为切换灰度的“关键”。
3.1设计思路
如上图所示,我们将集成DCDN高级条件及EdgeScript,利用其可扩展性及丰富的变量表/函数库,来实现前端切换及后端切换的定制化请求改写与转发。
3.2代码示例
阿里云EdgeScript是面向CDN可编程化演进的重要产品。
通过简单易学的语法、扩展多元的变量、丰富实用的函数、快速轻量的部署,可以自由定义业务需求,本方案即使用阿里云EdgeScript来实现客户较为复杂的前端灰度需求——
示例需求:
灰度对象:/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.1.1|2.2.2.2')
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所具备的函数库可以支持更为复杂的业务场景,可点击以下链接进行了解
基于DCDN的高级条件、高级回源、更改回源HOST功能模块,我们设计了如下的转发路径
阿里云CDN具备高级条件配置功能,可以引用丰富的变量,制定灵活的规则。再搭配转发功能模块,可以实现不同规则不同路径的灵活转发,实现灰度上云的业务目标。
示例如下
高级条件配置
#灰度条件
(($remote_addr~"3.3.3.3|4.4.4.4")|($ip_region_id~"610000|650000"))>if_stmt
#非灰度条件
(($remote_addr!~"3.3.3.3|4.4.4.4")&($ip_region_id!~"610000|650000"))>if_stmt
上述代码即当用户IP为3.3.3.3或4.4.4.4,或用户的IP归属于陕西、新疆时,执行灰度规则,转发至新电商平台,否则按照原有业务架构转发。
注:高级条件具备丰富的变量可用,本次切换规则仅设计用户IP(A公司办公室灰度测试IP)及灰度区域用户IP归属区域,其他变量详见Nginx变量说明。
3.3项目管理
实施本次项目,除了代码和架构层面满足业务的需求,通过项目管理进行管控,确保Kiss Landing,也是重要的一环,我们做了如下工作——
CutOver Plan
每一次切换,均会提前至少一周的时间制定清楚CutOver Plan,该计划在于厘清业务耦合关系、确认工作执行顺序、规划时间节点及里程碑事件、工作项具体到人、工作内容代码化等。
回退方案
通过脚本的方式生成一键回退方案,后台保存配置历史版本,如有异常一键回退,回退性能可以达到秒级,确保业务无损。
切换/回退演练
每一次的切换及回退,需要至少在功能测试环境演练至少三遍,用来发现代码层级、业务层级、执行人层级的潜在风险。
现场协同办公
切换当天集中现场协同办公,PM来主导切换实施节奏,确保切换执行时的各个环节可知、可控。
3.4运营监控
发布监控:
通过内容管理系统的任务监控模块,监控每一次变更的全局生效进度、节点生效进度,出现异常及时进行节点驱逐(如发布卡死或失败等)。
业务监控:
通过业务监控系统关注对应域名的带宽、请求数、状态码、响应时间,重点关注天眼-日志分析下灰度区域的业务情况。
第三方监控:
通过周期任务重点关注灰度区域的用户访问情况,并在灰度完成后第一时间进行即时监测,确保服务可用、功能生效。
4.方案优势
灵活易扩展
该方案通过集成EdgeScript、高级条件下的Nginx变量与Tengine API,满足了客户的业务需求。同时由于所饮用的表/库存在更为丰富的资源,因此适用于更加复杂的应用场景。还存在被持续开发的潜力。
敏捷高可用
该方案通过CDN自有的动态配置发布变更逻辑,确保了发布及回退分钟级粒度的性能及完整性。同时通过低开发、轻发布的方式,避免了任何软件版本的迭代发布,对于CDN可编程化的应用是一个良性的促进。
完善可复用
该方案的硬性集成(产品、组件)及软性集成(项目管理体系)比较完善,类似场景下移植成本接近于0,存在较高的复用性。
5.项目成果
该方案的交付成果,对于阿里云及A公司来说,是一次双赢。
对于客户来说,四次切换,单次切换生效时间可以控制在5分钟以内,且通过热切换避免了用户体验受到影响,全程0客情、0问题,如丝般顺滑。同时切换到了新电商平台后,用户访问的速度翻倍,服务侧rt时间减半,也解决了业务背景中提及的Hybris“四大难”。
对于阿里云来说,该次DCDN的切换完成了临门一脚,标志着A公司业务中台交付的正式上线,收获了商业价值及客户的高度认可。
对于DCDN产品来说,由于用户访问速度的提高,带宽接近翻倍。同时通过实战证明了可编程化应用的巨大潜力,也衍生了更多的应用机会。
6.适用场景
1.有上云需求且具备一定数字化转型能力的客户(如阿里云业务中台、数据中台等)。
2.存在动态加速业务需求,对于流量转发有定制化要求的客户。
总体来说,依托于商业数字化转型的浪潮,及对终端用户性能体验的重视,会有越来越多的客户选择对动态内容加速,如API(内部API+外部应用API)、POST场景、无法缓存的持续变化内容等,DCDN的应用机会也会相应增加,在这种场景下,DCDN作为流量入口,结合本文描述的功能,可以成为微服务中间件的一部分,帮助客户实现流量的灵活转发,达到上好云,用好云的目的。期待DCDN可以为客户的数字化转型创造更多的价值。