前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Twitter是如何部署公共JS组件的?

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

作者头像
dys
发布2018-04-04 10:07:53
1.4K0
发布2018-04-04 10:07:53
举报
文章被收录于专栏:性能与架构性能与架构

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

小结

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 部署流程的要求
    • 1. 可回退
      • 2. 渐进式发布
        • 3. 可视性
        • 部署流程
          • 1. DNS 管理服务
            • 2. CDN
              • 3. Origin 源
              • 小结
              相关产品与服务
              内容分发网络 CDN
              内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档