DevOps定义
DevOps是一套实践方法,在保证高质量的前提下缩短系统变更从提交到部署至生产环境的时间。
解说DevOps定义隐含内容如下:
- 在部署对系统的变更时,质量很重要
- 交付机制要求高质量
- 开发人员提交新开发的代码的时间和把代码部署到现场生成环境的时间很重要
- 目标导向
- 目标是确保部署的系统在整个生命周期中都是高质量
DevOps实践
- 从需求的角度把运维人员视为首要干系人(运维需求)
- 让开发人员更多地负责相关事件处理(部署由开发人员先负责)
- 强制推行所有人使用的部署过程(易于追踪且易于理解)
- 使用持续部署(高质量且缩短提交到部署时间)
- 有一套适用于基础设施代码开发的实践(部署高质量)
DevOps生命周期过程:需求(运维干系人)——开发(小团队、单元测试)——构建(持续集成)——测试(自动化)——部署(持续部署)——执行(监控、响应)
DevOps运动
把以前由运维人员完成的很多任务都自动化了,并让开发人员承担部分剩余的工作,通过这种方法,可以减少对专业运维人员的需求。
DevOps视角
-
自动化
工具可以执行过程中每一步所需的操作;工具和脚本也可以强制推行组织层面的策略;基础设施即代码(脚本和文件的版本控制,错误检测等质量控制) -
开发团队的职责
所有所需的知识都保留在开发团队,不需要转移知识过程中的大量协作步骤
DevOps与敏捷开发
规范敏捷交付包含三个步骤:开始阶段(构想、建模、计划)——构造阶段(开发解决方案)——转换阶段(部署解决方案)
DevOps针对三阶段的影响:
-
开始阶段
增加运维人员需求;发布计划包含了与运维人员之间的配合;发布计划中与协作相关的很多主题不再需要,变得高度自动化 -
构造阶段
-
转换阶段
等同敏捷实践,新的部分是在构建与转换活动之间,集成和自动连接
DevOps团队结构
1、团队规模:相对较小
- 可以快速做出决定
- 人少容易组成密切群体
- 容易表达意见
- 缺点是大任务需要合理拆分,各团队高效配合
- 小团队围绕一组微服务架构,减少显式配合
2、团队角色
- 团对领导:负责协调团队、获取资源、保护团队不受问题的干扰等
- 团队成员:负责系统的创建和交付
- 服务所有者:负责外部协作(既能与其他干系人交流,又能与团队的其他成员交流)
- 可靠性工程师:负责部署后的监控以及服务执行期间出现问题后的联系人
- 看门人:从本地开发到部署阶段的每一步都需要看门人根据测试结果,使用一个检测表做出决策(是否允许到下一步)
- DevOps工程师:负责DevOps工具链中使用的各种工具的护理和保养(可以是个人、团队或组织层面)
以上角色可以一人承担多角,一角也可以由多人承担,取决于个人能力、个人工作负荷以及这个角色所需的能力和工作量
DevOps协作
DevOps的一个目标是最大程度减少协作,以缩短推向市场的时间
1、协作的形式
- 直接的
- 间接的
- 持久的
- 短暂的
- 同步的
- 异步的
2、团队协作
- 人工过程:取自敏捷过程
- 自动化过程
3、跨团队协议
- 与干系人和客户的上游协作
- 与运维人员的下游协作
- 与其他开发团队的交叉协作
DevOps过程试图尽量减少这种协作
-
软件架构
职责分配;协作模型;数据模型;资源管理;架构元素之间的映射;绑定时决策 -
避免重复工作
避免重复工作并鼓励复用:每个团队任务都很小,重复工作量也很小;每个团队都负责自己的服务,有问题时排除障碍较快
DevOps障碍
1、采用DevOps实践时,组织需要考虑在缩短面市时间所带来的收益与一些事情出现差错之间的权衡,一个特定组织所担忧的风险取决于他们的活动领域,对于一些组织来说,出现问题所带来的风险比尽快推向市场更重要。
2、确定一个组织的文化的方法之一是看它的激励产生什么样的结果,不同的激励机制培育出不同的态度,可能成为文化冲突的原因
3、筒仓思维方式
4、工具支持
- 每个工具的安装、配置和使用都必须具备专业技能
- 不同开发团队使用同一过程,需要定义共同使用过程,确保都遵守
5、人员问题
- 开发人员薪资的成本/收益问题
- 在开发人员中增加更多的任务会加剧开发人员短缺
DevOps权衡
1、在对DevOps工具进行支持与缩短新功能投向市场的时间之间进行权衡
2、把职责从IT人员转向开发人员的权衡(两个团队完成任务的成本、时间、投入情况以及协议问题等)
3、开发团队自治与整体协议之间的权衡