27
从开发到上线 实战持续交付 LI Daobing <[email protected]> 七云存储 2014-11 杭州

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

Embed Size (px)

Citation preview

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

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

LI Daobing <[email protected]> 七⽜牛云存储

2014-11 杭州

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

先推荐两本书

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

普通⺴⽹网站的架构

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

普通⺴⽹网站的架构• nginx

• 静态⽂文件服务,分发动态请求

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

普通⺴⽹网站的架构• nginx

• 静态⽂文件服务,分发动态请求

• 业务逻辑层

• 消除状态,⽅方便⽔水平伸缩

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

普通⺴⽹网站的架构• nginx

• 静态⽂文件服务,分发动态请求

• 业务逻辑层

• 消除状态,⽅方便⽔水平伸缩

• 数据库

• ⾼高可⽤用架构,定时备份

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

普通⺴⽹网站的架构• nginx

• 静态⽂文件服务,分发动态请求

• 业务逻辑层

• 消除状态,⽅方便⽔水平伸缩

• 数据库

• ⾼高可⽤用架构,定时备份

• ⽤用户上传的⽂文件

• 跨机器同步/mogilefs/fastdfs/公有云存储

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

普通⺴⽹网站的架构• nginx

• 静态⽂文件服务,分发动态请求

• 业务逻辑层

• 消除状态,⽅方便⽔水平伸缩

• 数据库

• ⾼高可⽤用架构,定时备份

• ⽤用户上传的⽂文件

• 跨机器同步/mogilefs/fastdfs/公有云存储

• 缓存层

• 降低数据库压⼒力/如何保持数据⼀一致/如何避免缓存机死亡之后雪崩

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

部署⼯工具演化史

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

部署⼯工具演化史• 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装

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

部署⼯工具演化史• 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装

• FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难回滚

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

部署⼯工具演化史• 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装

• FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难回滚

• 打包部署 (⽐比如 Java 的 war ⽂文件) #需要⼿手动拷⻉贝,多机情况下仍然要配合其他部署系统

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

部署⼯工具演化史• 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装

• FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难回滚

• 打包部署 (⽐比如 Java 的 war ⽂文件) #需要⼿手动拷⻉贝,多机情况下仍然要配合其他部署系统

• 做成系统安装包 #⽐比较累,但⼤大规模部署⽆无压⼒力,听说yahoo以前主要是这么部署的

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

部署⼯工具演化史• 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装

• FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难回滚

• 打包部署 (⽐比如 Java 的 war ⽂文件) #需要⼿手动拷⻉贝,多机情况下仍然要配合其他部署系统

• 做成系统安装包 #⽐比较累,但⼤大规模部署⽆无压⼒力,听说yahoo以前主要是这么部署的

• capistrano #我们使⽤用的,但配置⼀一般建议单独管理

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

部署⼯工具演化史• 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装

• FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难回滚

• 打包部署 (⽐比如 Java 的 war ⽂文件) #需要⼿手动拷⻉贝,多机情况下仍然要配合其他部署系统

• 做成系统安装包 #⽐比较累,但⼤大规模部署⽆无压⼒力,听说yahoo以前主要是这么部署的

• capistrano #我们使⽤用的,但配置⼀一般建议单独管理

• capistrano+puppet/salt #puppet和salt 可以⽤用来解决配置问题

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

部署⼯工具演化史• 安装⽂文档 (⽐比如 wordpress) #要么线上修改,要么就得重装

• FTP/SFTP 上传 (⽐比如 PHP) #适⽤用⾯面很窄,本地要做版本管理,否则很难回滚

• 打包部署 (⽐比如 Java 的 war ⽂文件) #需要⼿手动拷⻉贝,多机情况下仍然要配合其他部署系统

• 做成系统安装包 #⽐比较累,但⼤大规模部署⽆无压⼒力,听说yahoo以前主要是这么部署的

• capistrano #我们使⽤用的,但配置⼀一般建议单独管理

• capistrano+puppet/salt #puppet和salt 可以⽤用来解决配置问题

• docker #很酷炫,但还不成熟

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

capistrano• Ruby 社区的⼀一个产品,主要解决⼀一键部署/⼀一键回滚的问题

• 下载新的代码到releases ⺫⽬目录下的⼀一个新的⼦子⺫⽬目录

• 链接配置⽂文件, ⽇日志⺫⽬目录

• 切换 current 链接

• 重启程序

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

新的问题

• 如果你的系统盘毁了,你需要多久才能恢复服务

• 如果你需要扩容100台机器,你需要花多久

• 系统上要安装哪些软件

• 要修改哪些配置

• 要配置哪些监控

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

puppet/salt• puppet 都能很好地解决,不过⽐比较偏运维,我就不详细讲了,简单来说就是⼏几点

• 所有配置⼊入库,可以快速知道所有机器的配置情况

• ⽤用模板简化配置

• 同时管理⼤大量的机器

• ⽤用依赖和消息来简化复杂性

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

cap+puppet的问题

• 我们在开发⼀一个新的部署系统

• 程序和配置分离带来的问题,回滚的时候要同时回滚程序和配置

• 伸缩性不够,机器量太多的时候性能下降

• 需要很多辅助程序来帮助开发⼈人员在不登录的情况下了解情况

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

⾃自动测试/持续集成• 持续集成

• 是否要合并⼀一个 pull request: github+travis

• 是否可以发布这个版本: jenkins

• jenkins 的额外好处

• 测试/代码质量的可视化

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

串起你的⼯工具链• 提交 issue

• 修改代码->提交PR(Pull Request)

• 持续集成通过->合并PR

• 持续集成通过

• capistrano 部署

• 再次检验

• 关闭 issue 或者快速回滚

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

正规化

• 所有源码⼊入库

• 特别是第三⽅方的软件(你迟早会改的)

• 线上配置不要⼊入代码库,软件和配置分离

• 密码/私钥不要⼊入库,puppet ⽀支持⽤用模板替换

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

测试环境• 集成测试不能保证不出任何问题

• 那么就搭⼀一个测试环境吧

• cap test deploy

• 与线上系统完全独⽴立

• 注意要使⽤用独⽴立的 secret token

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

⼩小⼊入⼝口• 测试环境也不能保证不出任何问题

• 弄⼀一个⼩小⼊入⼝口

• 跟线上系统共⽤用数据库和存储,缓存看情况

• 部署时先部署⼩小⼊入⼝口

• 部署完成后跑测试或者⼈人⼯工查看

• ⼩小⼊入⼝口没有问题之后才部署⼤大⼊入⼝口

• 额外有点:⽅方便调试

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

遗留问题• Go 语⾔言的问题

• 编译,capistrano-scm-jenkins

• 可执⾏行程序的分发

• 推送到内⺴⽹网

• 纯内⺴⽹网机器

• Ubuntu approx

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

Thanks for your attention