Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

从开发到上线-实战持续交付

427 views

Published on

从开发到上线 实战持续交付

Published in: Internet
  • Be the first to comment

从开发到上线-实战持续交付

  1. 1. 从开发到上线
 实战持续交付 LI Daobing <lidaobing@gmail.com> 七⽜牛云存储 2014-11 杭州
  2. 2. 先推荐两本书
  3. 3. 普通⺴⽹网站的架构
  4. 4. 普通⺴⽹网站的架构 • nginx • 静态⽂文件服务,分发动态请求
  5. 5. 普通⺴⽹网站的架构 • nginx • 静态⽂文件服务,分发动态请求 • 业务逻辑层 • 消除状态,⽅方便⽔水平伸缩
  6. 6. 普通⺴⽹网站的架构 • nginx • 静态⽂文件服务,分发动态请求 • 业务逻辑层 • 消除状态,⽅方便⽔水平伸缩 • 数据库 • ⾼高可⽤用架构,定时备份
  7. 7. 普通⺴⽹网站的架构 • nginx • 静态⽂文件服务,分发动态请求 • 业务逻辑层 • 消除状态,⽅方便⽔水平伸缩 • 数据库 • ⾼高可⽤用架构,定时备份 • ⽤用户上传的⽂文件 • 跨机器同步/mogilefs/fastdfs/公有云存储
  8. 8. 普通⺴⽹网站的架构 • nginx • 静态⽂文件服务,分发动态请求 • 业务逻辑层 • 消除状态,⽅方便⽔水平伸缩 • 数据库 • ⾼高可⽤用架构,定时备份 • ⽤用户上传的⽂文件 • 跨机器同步/mogilefs/fastdfs/公有云存储 • 缓存层 • 降低数据库压⼒力/如何保持数据⼀一致/如何避免缓存机死亡之后雪崩
  9. 9. 部署⼯工具演化史
  10. 10. 部署⼯工具演化史 • 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装
  11. 11. 部署⼯工具演化史 • 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装 • FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难 回滚
  12. 12. 部署⼯工具演化史 • 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装 • FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难 回滚 • 打包部署 (⽐比如 Java 的 war ⽂文件) #需要⼿手动拷⻉贝,多机情况下仍然要配 合其他部署系统
  13. 13. 部署⼯工具演化史 • 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装 • FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难 回滚 • 打包部署 (⽐比如 Java 的 war ⽂文件) #需要⼿手动拷⻉贝,多机情况下仍然要配 合其他部署系统 • 做成系统安装包 #⽐比较累,但⼤大规模部署⽆无压⼒力,听说yahoo以前主要是 这么部署的
  14. 14. 部署⼯工具演化史 • 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装 • FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难 回滚 • 打包部署 (⽐比如 Java 的 war ⽂文件) #需要⼿手动拷⻉贝,多机情况下仍然要配 合其他部署系统 • 做成系统安装包 #⽐比较累,但⼤大规模部署⽆无压⼒力,听说yahoo以前主要是 这么部署的 • capistrano #我们使⽤用的,但配置⼀一般建议单独管理
  15. 15. 部署⼯工具演化史 • 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装 • FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难 回滚 • 打包部署 (⽐比如 Java 的 war ⽂文件) #需要⼿手动拷⻉贝,多机情况下仍然要配 合其他部署系统 • 做成系统安装包 #⽐比较累,但⼤大规模部署⽆无压⼒力,听说yahoo以前主要是 这么部署的 • capistrano #我们使⽤用的,但配置⼀一般建议单独管理 • capistrano+puppet/salt #puppet和salt 可以⽤用来解决配置问题
  16. 16. 部署⼯工具演化史 • 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装 • FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难 回滚 • 打包部署 (⽐比如 Java 的 war ⽂文件) #需要⼿手动拷⻉贝,多机情况下仍然要配 合其他部署系统 • 做成系统安装包 #⽐比较累,但⼤大规模部署⽆无压⼒力,听说yahoo以前主要是 这么部署的 • capistrano #我们使⽤用的,但配置⼀一般建议单独管理 • capistrano+puppet/salt #puppet和salt 可以⽤用来解决配置问题 • docker #很酷炫,但还不成熟
  17. 17. capistrano • Ruby 社区的⼀一个产品,主要解 决⼀一键部署/⼀一键回滚的问题 • 下载新的代码到releases ⺫⽬目录 下的⼀一个新的⼦子⺫⽬目录 • 链接配置⽂文件, ⽇日志⺫⽬目录 • 切换 current 链接 • 重启程序
  18. 18. 新的问题 • 如果你的系统盘毁了,你需要多久才能恢复服务 • 如果你需要扩容100台机器,你需要花多久 • 系统上要安装哪些软件 • 要修改哪些配置 • 要配置哪些监控
  19. 19. puppet/salt • puppet 都能很好地解决,不过⽐比较偏运维,我就不 详细讲了,简单来说就是⼏几点 • 所有配置⼊入库,可以快速知道所有机器的配置情况 • ⽤用模板简化配置 • 同时管理⼤大量的机器 • ⽤用依赖和消息来简化复杂性
  20. 20. cap+puppet的问题 • 我们在开发⼀一个新的部署系统 • 程序和配置分离带来的问题,回滚的时候要同时回 滚程序和配置 • 伸缩性不够,机器量太多的时候性能下降 • 需要很多辅助程序来帮助开发⼈人员在不登录的情况 下了解情况
  21. 21. ⾃自动测试/持续集成 • 持续集成 • 是否要合并⼀一个 pull request: github+travis • 是否可以发布这个版本: jenkins • jenkins 的额外好处 • 测试/代码质量的可视化
  22. 22. 串起你的⼯工具链 • 提交 issue • 修改代码->提交PR(Pull Request) • 持续集成通过->合并PR • 持续集成通过 • capistrano 部署 • 再次检验 • 关闭 issue 或者快速回滚
  23. 23. 正规化 • 所有源码⼊入库 • 特别是第三⽅方的软件(你迟早会改的) • 线上配置不要⼊入代码库,软件和配置分离 • 密码/私钥不要⼊入库,puppet ⽀支持⽤用模板替换
  24. 24. 测试环境 • 集成测试不能保证不出任何问题 • 那么就搭⼀一个测试环境吧 • cap test deploy • 与线上系统完全独⽴立 • 注意要使⽤用独⽴立的 secret token
  25. 25. ⼩小⼊入⼝口 • 测试环境也不能保证不出任何问题 • 弄⼀一个⼩小⼊入⼝口 • 跟线上系统共⽤用数据库和存储,缓存看情况 • 部署时先部署⼩小⼊入⼝口 • 部署完成后跑测试或者⼈人⼯工查看 • ⼩小⼊入⼝口没有问题之后才部署⼤大⼊入⼝口 • 额外有点:⽅方便调试
  26. 26. 遗留问题 • Go 语⾔言的问题 • 编译,capistrano-scm-jenkins • 可执⾏行程序的分发 • 推送到内⺴⽹网 • 纯内⺴⽹网机器 • Ubuntu approx
  27. 27. Thanks for your attention

×