DevOps导论
DevOps概述
软件开发的本质困难
1. 复杂性
2. 不可见:
3. 可变性:需求变更等
4. 一致性:上下兼容,
软件的项目管理
- 成本目标
- 工期目标
- 质量目标
- 功能目标
软件的过程管理
- 研发流程的效率
DevOps的基本原则
- 流动原则
- 让工作可视化
- 限制在制品数
- 减少批量规模
- 减少交接次数
- 持续识别和改善约束点
- 消除价值流中的困境和浪费
- 反馈原则
- 及时发向问题
- 群策群力,战胜问题获取新知
- 在源头保障质量
- 为下游工作进行优化
- 持续学习和改进原则
- 建立学习型组织和安全文化
- 把日常工作的改进制度化
- 把局部发现转换为全局优化
- 在日常工作中注入弹性模式
- 领导层强化学习文化
DevOps定义
- DevOps是一组过程方法与系统的统称,用于促进开发、技术运营和质量保障部门之间的沟通、协作与整合:以始为终,运维合一。
三种开发模式的特点
- 瀑布开发:
- 详尽的开发流程
- 重视过程与文档
- 适合稳定需求的项目
- 不适应需求变化
- 问题:
- 需求经常变更
- 编码周期过长
- 测试经常简略执行或跳过
- 运行维护阶段事故频发
- 敏捷开发(Agile)
- 个体和互动高于流程和工具
- 工作的软件高于详尽的文档
- 响应变化高于遵循计划
- 客户合作高于合同谈判
- 十二条原则:
- 客户满意、掌控变化、缩短周期、相互合作、激励并信任个体、面对面交谈、可用的软件、可持续开发、精益求精、简洁、自组织的团队、反思调整
- 收益:
- 提高了生产率
- 提高客户满意度
- 改善员工的满意度
- DevOps
- 吸收敏捷、精益的优势
- 组织文化、组织架构的变革
- 丰富的工具栈
- 持续交付
- 很好的适应需求的快速变化
- 速度与质量的平衡
- CI/CD/CO
- 研发运营一体化[Dev+Ops]
DevOps的核心概念(CALMS)
- Culture文化
- Sharing分享
- Automation自动化
- Learn精益
- Metrics度量
DevOps的价值
- 提升业务响应能力
- 提升研发规范和效率
- 提升交付频率和质量
- 提升组织的有效性
- 持续学习与改进
流行的敏捷软件开发框架
- SCRUM:
- 定义:一个解决复杂自适应问题的框架,让我们以迭代和增量的方式,在最短时间内交付最大的价值的产品
- 特点:轻量级、易于理解、难以精通
- 三三五五
- 三个角色:产品负责人、敏捷教练、开发团队
- 三个工件:产品待办列表、Sprint待办列表、产品增量
- 五个活动:Sprint、Sprint计划会、每日站会、Sprint评审会、Spring回滚会
- 五个价值观:专注、公开、尊重、承诺、勇气
- 极限编程【XP】
- Kanban
- 可视化目前的工作流程
- 更灵活的项目规划方式
- 缩短项目周期,提高研发效率
用户故事简介
定义
用户故事是从用户的角度来描述用户渴望得到的功能
故事点的使用
基本概念
- 迭代:每一次迭代都包括了需求分析、设计、实现与测试
- 史诗:史诗是一个较大的功能或特性,可以分解为许多较小的事项
- 需求:用户解决殁于一问题或达到某一目标所需的软件功能
- 缺陷:除了错误编码以外的其他导致不符合最初定义的业务需求问题
- 任务:实现某个目标所及你行的具体活动
持续集成(CI)
Jenkins
- Jenkins是一个开源的、提供友好操作界面的CI&CD工具
- 起源于Hudson,主要适用于持续、自动的构建、测试软件项目
- 基于Java语言开发
持续交付(CD)
- 一种能够是的软件在较短的循环中可靠的发布的软件工程方法
- 与持续继承相比较,持续交付添加了Test->Staging->Production的流程,也就是为新增的代码添加了一个保证,确保新增的代码再生产环境中是可用的
持续部署(CO)
为什么需要持续部署
- 更多与真实用户互动,从而快速调整产品方向
- 每次变更规模小,降低发布风险
- 单词不是成本低,且趋于稳定
- 出现问题易于定位,易修复,并且能快速改正
意味着
- 持续部署意味着:通过自动化部署的手段将软件功能频繁的部署到生产环境
- 与持续交付以及持续集成相比,持续部署强调了通过automated deplyment的手段,对新的软件功能进行集成
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9BRjH9S-1606958855357)(C:\Users\huaxin\AppData\Roaming\Typora\typora-user-images\image-20201119165734030.png)]
如何做好持续部署
蓝绿部署:
-
蓝绿部署是不停用老版本,部署新版本后进行测试,确认OK,将流量切到新版本,然后老版本也升级到新版本
-
特点:无需停机,并且风险较小
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bKudaT1N-1606958855359)(C:\Users\huaxin\AppData\Roaming\Typora\typora-user-images\image-20201119165932819.png)]
灰度发布/金丝雀发布(Grayscale release)
灰度发布又叫做金丝雀发布,先发布一小部分来试探整体是否能够正常运行,如果剋则完全部署的发布方式,目前仍然是不少成长性技术组织的主流发布方式。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6zKWioFG-1606958855361)(C:\Users\huaxin\AppData\Roaming\Typora\typora-user-images\image-20201119170239916.png)]
滚动部署(Rolling update)
- 取出一个或多个服务器停止服务,执行更新,并重新将其投入使用,周而复始,直至全部更新完成
- 特点:用户体验影响小,体验较平滑,相对于蓝绿部署,更加节约资源
暗部署(Dark launch)
- 指软件特性在正式发布之前,先将其第一个版本部署在生产环境。通过应用“开关”技术,使用户在无感的情况下应用新特性的功能,软件提供商通过手机用户的实际操作记录来获得针对这个新特性的反馈数据
- 还可以结合流量克隆,每个请求都克隆一份给新的功能代码执行,不向用户反馈,自行收集数据
技术债务
含义
技术债务是指在团队开发过程中为了实现短期目标选择了一种权宜之计,而非更好的解决方案,后续维护要付出的代价
产生原因
紧耦合的组件、缺少必要的文档、代码可读性差、技术外包
压力之下的快速开发、不明真相的临时解决方案、新员工技术水平不足、历史遗留问题
如何避免
架构清晰、代码规范、逻辑有序、注释全面、避免混乱、避免重复代码、调用规范
技术债务是指在团队开发过程中为了实现短期目标选择了一种权宜之计,而非更好的解决方案,后续维护要付出的代价
产生原因
紧耦合的组件、缺少必要的文档、代码可读性差、技术外包
压力之下的快速开发、不明真相的临时解决方案、新员工技术水平不足、历史遗留问题
如何避免
架构清晰、代码规范、逻辑有序、注释全面、避免混乱、避免重复代码、调用规范