DevOps 是什么?企业该如何建设 DevOps 能力?我们必须在数字化转型的背景下加以考察,具体来说包含业务交付和系统运行两个方面。
第一:持续顺畅高质量地交付有效价值。它的目的是缩短从业务想法的提出到实现和交付的时长,使这一过程更加顺畅和精准。数字化的组织,要围绕这一目标构建技术工程体系和协作模式,消除业务需求交付过程中的一切阻碍和等待,让 IT 交付节奏,跟上业务发展的需要。
第二:极致弹性和韧性的系统运行。IT 系统必须满足业务运营的要求,具备极致的弹性和韧性。弹性是指它随业务负载自动、实时的扩缩容,以精准的弹性和合理的成本满足业务;韧性指的是确保系统安全、合规和稳定的运行,实现系统运行的连续可用性和安全稳定。
《精益思想》一书将精益定义为:有效组织人类活动的一个新的思维方法,目标是消除浪费,以更多地交付有用的价值。书中进一步总结了精益的 5 个原则,同时也是精益的 5 个实施步骤:
- 定义价值:站在用户的视角定义什么是价值,并把它描述为具体产品或服务;
- 识别价值流:识别和映射创造价值的流程步骤,消除不增加用户价值的步骤和活动;
- 让价值持续流动:让用户价值在流程步骤中流动起来,使它们持续、顺畅地流向最终用户;
- 用户价值拉动:由用户价值拉动流动,避免不带来用户价值的浪费
- 精益求精:不断重复 1 到 4 步。追求完美的价值和价值流动,消除过程中所有浪费。
在传统的 IT 组织下,开发团队(Dev)和运维团队(Ops)之间诉求不同——开发团队(尤其是敏捷团队)追求变化,运维团队追求稳定。双方往往存在利益的冲突,比如,精益和敏捷的团队把持续交付作为目标,而运维团队则为了线上的稳定而强调变更控制。部门墙由此建立起来,这当然不利于 IT 价值的最大化。
DevOps 的目标是支持业务敏捷
进入数字化时代,IT 成为业务的一部分。以项目为单位来规划和交付,越来越不能满足即时响应业务的需要。项目面向一次性交付的特点,也不利于资产(特别是软件资产)的长期积累和优化,不利于工程能力及基础设施的持续优化。
高效本地开发
为了进行全流程的高效开发,应该尽量使用反馈比较快的验证方式,并及早发现问题,逐步进行更加集成,更加真实的测试。
一般来讲,一个开发过程可以经过下面的三个阶段:
- 编码+单元测试。在小的逻辑单元的层面保证正确性。
- 针对单个应用的集成测试,可能需要对依赖的应用进行 HTTP 级别的 mock。
- 结合公共测试环境进行完整的集成测试。
基于上面的三个阶段,可以使用以下的方式来解决前面提到的几个问题 - 使用各个语言相应的测试工具(比如 JUnit)来进行单元测试
- 使用 moco 等 HTTP Mock 工具来解决本地隔离验证的问题,完成单个应用的集成测试。
- 使用 kt-connect 和 virtual-environment 等工具来解决云原生基础设施下,本地和测试环境的互相连通性问题,
及 http 请求链路的染色和路由。 - 使用 ngrok 等工具解决外部依赖调用本地应用的问题
- 使用“主干稳定环境”作为公共测试环境,提高其稳定性
- 使用中间件的染色隔离能力保证 http 请求之外的其它链路(比如消息)的染色和路由。
其中第 1、4 是成熟的技术,这里不再赘述。第 5、6 点会在后面的测试环境相关的章节中我们详细讲解。
本文主要就第 2、3 点展开讲解