cdn 版本化解决方案
如果无法正常显示,请先停止浏览器的去广告插件。
1. CDN 版本化解决方案
CDN 在不可变基础设施中的探索
刘彬德 QQ-web 团队 高级前端工程师
2. 自我介绍
2017
2019
3.
4.
5.
6. CD 环节遇到点问题
html
html 和 静态资源不同源
cdn 发布依赖发布平台
静态资源
发布平台发布
7. 目录
1. 传统的 CDN 的困境
8. 01
传统的 CDN 的困境
原始的生产工具制约生产效率的提升
9. 传统 CDN 的困境
传统 CDN 给研发人员和运维人员带来很大困扰
10. 传统 CDN 的困境
· 漏发 CDN 文件导致服务异常
11. 传统 CDN 的困境
· 漏发 CDN 文件导致服务异常
正常的构建产物有 3 个 js 文件和 3 个 css 文件需要发布。
12. 传统 CDN 的困境
· 漏发 CDN 文件导致服务异常
发布时不慎遗漏文件
13. 传统 CDN 的困境
· 漏发 CDN 文件导致服务异常
导致外网服务崩溃
14. 传统 CDN 的困境
· 漏发 CDN 文件导致服务异常
ttf
js
静态资源
png mp4 …
css
15. 传统 CDN 的困境
· 漏发 CDN 文件导致服务异常
16. 传统 CDN 的困境
· 漏发 CDN 文件导致服务异常
· 公共组件 bug 引发联动故障
17. 传统 CDN 的困境
· 漏发 CDN 文件导致服务异常
· 公共组件 bug 引发联动故障
全网支付组件异常
18. 传统 CDN 的困境
· 漏发 CDN 文件导致服务异常
· 公共组件 bug 引发联动故障
19. 传统 CDN 的困境
· 漏发 CDN 文件导致服务异常
· 公共组件 bug 引发联动故障动
· 祖传代码排雷定位问题困难
20. 传统 CDN 的困境
· 漏发 CDN 文件导致服务异常
· 公共组件 bug 引发联动故障动
· 祖传代码排雷定位问题困难
祖传业务报错,引用资源文件 404
21. 传统 CDN 的困境
文档
如何发布
· 漏发 CDN 文件导致服务异常
· 公共组件 bug 引发联动故障动
· 祖传代码排雷定位问题困难
svn
如何测试
没有构建
不一致
我是谁?我在哪?我要怎么修?
22. 传统 CDN 的困境
· 无法快速定位责任人
这是啥?谁来修?
23. 传统 CDN 的困境
· 无法快速定位责任人
· IPV6 升级改造带来额外的工作量
多域名、多业务、多团队配合
24. 传统 CDN 的困境
· 无法快速定位责任人
· IPV6 升级改造带来额外的工作量
· https证书年度更新的姨妈式阵痛
每年每个域名都要来一发,好烦
25. 目录
2. 当 CDN 遇到不可变
26. 02
当 CDN 遇到不可变
小改动带来大变化
27. 当 CDN 遇到不可变
云原生
不可变基础设施
28. CDN的组成
分析
配置管理
OC节点
源站
DNS
调度
监控
29. CDN的组成
源站
30. 当 CDN 遇到不可变
资源版本化
发布自动化
源站
发布结果可回溯
31. Git-分布式版本控制系统
当 CDN 遇到不可变
源站
32. CI-自动化部署工具
当 CDN 遇到不可变
git 更新
git-hook
CI 工具
源站
cdn 插件
源站
33. 不可变 CDN 的原理
CI 插件
· 以 GIT 为核心
· 以 CI 为工具
过滤
cdn
git
检查
34. 不可变 CDN 的原理
ci 插件
· 以 GIT 为核心 Commit hash
· 以 CI 为工具 Tag version
过滤
git
Group name
Repo name
检查
35. 不可变 CDN 的原理
ci 插件
· 以 GIT 为核心
· 以 CI 为工具
过滤
检查
校验
Name
space
Version
cdn
36. 不可变 CDN 的原理
· 以 GIT 为核心
· 以 CI 为工具
protocol
domain
prepath
version
filename
37. 当 CDN 遇到不可变
protocol
domain
group
repo
version
filename
https://cdn-go.cn/security-web/ti.qq.com_safe_authenticate/03e615b5/app/home/dist/cdn/index.css
38. 当 CDN 遇到不可变
protocol
group
domain
repo
version
filename
https://cdn-go.cn/security-web/ti.qq.com_safe_authenticate/03e615b5/app/home/dist/cdn/index.css
https://security-web.cdn-go.cn/ti.qq.com_safe_authenticate/03e615b5/app/home/dist/cdn/index.css
39. 当 CDN 遇到不可变
版本唯一固定
产物源头易追溯
发布过程自动化
发布后不可变
产物稳定可信赖
https://cdn-go.cn/security-web/ti.qq.com_safe_authenticate/03e615b5/app/home/dist/cdn/index.css
https://security-web.cdn-go.cn/ti.qq.com_safe_authenticate/03e615b5/app/home/dist/cdn/index.css
40. 目录
3. 基于不可变CDN的应用
41. 03
基于不可变 CDN 的应用
更多精彩,聚变未来
42. 基于不可变 CDN 的应用
在 CI / CD 中如何构建发布 CDN 文件
43. 基于不可变 CDN 的应用
组装前缀
前缀参与构建
发布产物
44. 基于不可变 CDN 的应用
45. 基于不可变 CDN 的应用
静态资源
46. 静态资源
47. 基于不可变 CDN 的应用
48. 基于不可变 CDN 的应用
npm 第三方库在不可变 CDN 中的应用
49. 基于不可变 CDN 的应用
protocol
domain
prepath
version
filename
50. npm ❤ cdn
创建 package 对应仓库
创建对应版本 tag
CI npm install
CDN 发布
protocol
domain
package
version
filename
51. npm ❤ cdn
创建 package 对应仓库
创建对应版本 tag
CI npm install
CDN 发布
52. 基于不可变 CDN 的应用
53. 不可变 CDN 在业务中的实践
不可变 === 可信赖
54. 不可变 CDN 在业务中的实践
可信质量报告
CI 结合 不可变 CDN,将构建信息固化在 CDN 上,方便第三方平台消费举证
仓库徽章
仓库徽章是通过收集全方位各个维度的数据,来给仓库打标记,用可信赖的徽
章数据来量化评估仓库,让代码仓库成为公司的基建财富。
55. 不可变 CDN 在业务中的实践
56. 不可变 CDN 在业务中的实践
马赛克
57. 不可变 CDN 在业务中的实践
徽章名称
徽章数据
58. 不可变 CDN 在业务中的实践
git
Group name
Repo name
Commit
Data
59. 不可变 CDN 在业务中的实践
CI
bazel
other
数据仓库
不可变CDN
svg
api
度量
离线计算
60. CDN 版本化解决方案
便捷 稳定
自动发布 CDN 文件到源站 支撑海量用户
安全 可靠
独立域名,内容检查 发布后唯一不变
61. 前端不可变基础设施
代码不可变
过程数据不可变
数据仓库
不可变
CDN
产物不可变
62. 感谢倾听
大会官网