Twitter是如何部署公共JS组件的?

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时可以把影响降到最低,也可以看出影响的范围

小结

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

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2016-09-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏韩伟的专栏

经典游戏服务器端架构概述 (1)

现代电子游戏,基本上都会使用一定的网络功能。从验证正版,到多人交互等等,都需要架设一些专用的服务器,以及编写在服务器上的程序。因此,游戏服务器端软件的架构,本质...

4.9K30
来自专栏知晓程序

微信小程序快速开发,两周内从创意到上线

31730
来自专栏菜鸟致敬

免主机搭建动态博客WordPress

之前有说到了如何利用GitHub Pages来搭建自己的静态博客hexo,今天我来说一下如何免主机搭建自己的动态博客WordPress。

23050
来自专栏腾讯云技术沙龙

刘敏洁:API网关和SCF深度结合应用

这次我们主要介绍面向于API网关和SCF深度结合应用,API网关与SCF结合可以形成比较完整的Serverless方案。

46030
来自专栏程序工场

个人博客如何快速搭建?

36090
来自专栏面朝大海春暖花开

对java前后端分离的理解

在工作期间,无非就是ui设计页面,前端开发html,之后将做好的页面交给我,我负责后台逻辑一件html的页面渲染。

2.4K60
来自专栏FreeBuf

魔兽世界中招:一条命令行就能劫持你的游戏!

最近出现了一种涉及社工技术的新型游戏攻击骗局,攻击者利用了魔兽世界(World of Warcraft,WoW)游戏插件中一个隐藏的功能。 新型攻击 想象一下这...

60980
来自专栏安恒信息

数十万安卓设备存在漏洞,你的手机还是你的吗!!!

安卓系统有一个隐藏的功能叫做开发者选项。这个功能是为了方便开发人员测试性能的时候调试手机,所以这个选项在安卓手机里是隐藏起来的,但是大多数安卓设备厂商,以及安卓...

13520
来自专栏悦思悦读

码农的瑞士军刀-脚本语言

首先声明,这里关于语言间的比较仅仅是为了说明问题。世界上没有一个开发语言有绝对的好坏,只有是否适合你当前的环境。 很多码农工作的非常辛苦,每天加班。一般情况,团...

428100
来自专栏嵌入式程序猿

让你的手机顺利访问你的设备

最近一直在看freeRTOS给出的物联网方案是使用Nabto,Nabto是在嵌入式领域目前算是很火的方案,发展也比较迅速,是由丹麦的一家公司开发的,在freeR...

32360

扫码关注云+社区

领取腾讯云代金券