微信号:jishutoutiao

介绍:国内领先的互联网技术类原创订阅号,聚焦当下技术热点、行业资讯、技术实战及管理经验,专注于技术类原创内容的发布和业内交流,打造专业的互联网技术交流和分享平台.

公共JS组件安全部署实战

2016-10-11 13:59 杜亦舒

本文转载自公众号“性能与架构”,作者是杜亦舒
Twitter有一个对外开放的JS组件,widgets.js,其他站长可以把这个js嵌入到自己的网页中,就可以有Twitter的一些功能(类似新浪微博开放的JS组件)

为了让站长简单方便的集成,所有功能都在这一个js文件中,引用时也不需要版本号
widgets.js 的访问量巨大,每秒30万次

所以,这个js的更新部署是个比较麻烦的任务,如何安全的部署新版,出现问题时把影响范围尽量降低?Twitter特别对这个js的部署流程进行了优化

部署流程的要求

1.可回退
回退第一,改错第二’是Twitter的重要理念,回退必须快速、简单

2. 渐进式发布
任何代码都可能有bug,所以要分阶段逐渐发布,尽早发现问题,尽快回退

3. 可视性
需要实时看到部署过程的状态,例如浏览器类型、国家地区、新旧版本的当前比例


部署流程

部署过程使用 DNS 来控制,通过规则的配置,决定当前这个请求使用新版本还是旧版本


共有3个部分:


1. DNS 管理服务
每当有请求来到 platform.twitter.com 时,会根据这个请求的地理位置区域来决定解析到哪个IP(IP1 是旧版,IP2 是新版)
例如以地区A作为试点儿,具体规则如下:
第1阶段:来自地区A的 5% 流量会被解析到 IP2,其他的所有流量都进入 IP1
第2阶段:所有来自地区A的流量都解析到 IP2,其他进入 IP1
第3阶段:所有流量都解析到 IP2

2. CDN
IP1 的请求会从源1获取 widgets.js,IP2 的请求会从源2获取

3. Origin 源
是上传 widgets.js 的地方,CDN 会从 Origin 获取最新的 widgets.js
Origin 1 上是旧版,Origin 2 上是新版,流量被逐渐转移到 Origin 2,当部署完全成功后,widgets.js 会被拷贝到 Origin 1,然后把所有流量都转到 Origin 1
部署过程中发现问题的话,立即把所有流量转到 Origin 1,实现快速回退
widgets.js 在客户端执行时会返回日志信息,服务端就可以实时构建出统计图表
一个成功的部署过程如下图


白色线是使用新版的数量,灰色线是旧版数量,整个过程是新版部署比例逐渐提高,旧版反比例变化
这个部署流程已经运行了1年,非常高效,新版有bug时可以把影响降到最低,也可以看出影响的范围


小结

这套思路很值得学习,高效可靠的部署流程会直接影响产品的发展速度,好的部署流程会使产品升级更加放心,也就更加敢于进行创新尝试


干货不够看?
一场20000+互联网技术人士与400+行业领袖共同围观的大会让你心动吗?
GITC2016即将在北京国家会议中心开幕啦!
GITC全球互联网技术大会绝对高逼格,不辜负你的眼球

▼ 

GITC2016即将于11月24日-11月25日在北京国家会议中心举办,本届主题定为技术源动力,届时将与您一同探讨当下互联网技术热点,汇聚互联网行业技术大咖们进行主题演讲。同时将引入全球领先的AI,VR技术,让与会观众全方位领略、感受世界领先技术。更有更有炫酷好玩的黑科技游乐场和首届音乐盛典等待你的加入。这场技术的饕餮盛宴小伙伴千万不要错过哦!

▼ 

更多精彩内容技术头条将持续跟进,第一时间为大家送上最新动态~
o(^▽^)o

 
请扫描以下二维码关注技术头条公众号
更多精彩内容将在技术头条持续发布,敬请关注!
微信号:jishutoutiao
点击“阅读原文”,快来购票吧!
 
 
技术头条 更多文章 Goole的长胜法宝,为什么成了你的绊脚石? 独家连载:《运维之下》——第八章:服务器硬件测试选型
猜您喜欢 Thrift——跨越多语言RPC性能鸿沟 从视觉到App:网易有钱iOS项目切图与适配实践 Android样式的开发:layer-list篇 【干货巴36期】AdvancedMaterialDrawer『源码』7.2 建设可用&能用&宜用的三用大数据