Len Bass,Ingo Weber和Liming Zhu的新书“ DevOps:软件架构师的观点 ”,是SEI系列软件工程的一部分,着眼于DevOps如何影响架构决策以及软件架构师在DevOps中的角色。

作者着重于DevOps的目标:尽快将工作软件投入生产,同时将风险降至最低,并在上市时间和质量之间取得平衡。

“ DevOps是一组旨在减少对系统进行更改与将更改投入正常生产之间的时间,同时又确保高质量的实践。”

这些基本做法是:

作为客户和合作伙伴(“一流的利益相关者”)参与开发。 了解并满足应用程序开发中的部署,日志记录,监视和安全性要求。

让开发人员参与事件处理。 开发人员负责其代码,确保其正确运行,从而帮助(通常充当第一响应者)调查和解决生产问题。 这包括在每个开发团队中扮演“可靠性工程师”的角色,负责协调下游变更与运营并确保变更成功部署。

确保使用自动,可追溯和可重复的机制(部署管道)对代码和配置进行所有更改。

使用这些管道,可以持续部署从签入到生产的变更,以最大程度地提高交付速度。

基础设施即代码 。 通过软件进行操作供应和配置,并遵循与应用程序软件相同的质量控制措施(版本,审查,测试)。

开发人员与运营机构之间的文化与协作,共同的价值观和组织问题,DevOps的人性方面较软,仅在它们可能影响上市时间交付速度或质量的因素时才被考虑。

云架构和微服务

作为架构师的参考,该书重点介绍了DevOps的架构注意事项。 它介绍了基于云的系统的工作方式,虚拟化概念,尤其是微服务 。

尽管DevOps不一定需要进行重大的体系结构更改,但作者们认为,大多数采用DevOps的组织都会发现,如Netflix和Amazon这样的组织所倡导的基于微服务的方法,是将系统不同部分之间以及不同团队之间的依赖性降到最低。 ,还将最大限度地减少将变更投入生产所需的时间-DevOps的首要目标。

康韦定律在这里也起作用。 DevOps工作通常由小型敏捷的跨职能团队完成,以独立解决端到端问题,这意味着他们自然会最终构建小型,独立的服务:

“拥有由小型服务组成的架构是对拥有小型团队的一种回应。”

但是基于微服务的方法存在弊端和成本。

正如Martin Fowler和James Lewis指出的那样,微服务引入了更多的故障点。 这意味着必须在每个服务中设计和构建弹性。 服务不能信任他们的客户或他们调出的其他服务。 您需要对数据进行防御性检查,并预期其他服务的故障,实施超时和重试,并在其他服务不可用时回退替代方案或安全的默认行为。 您还需要设计服务,以最大程度地减少故障对其他服务的影响,并使恢复/重新启动更加轻松快捷。

微服务还增加了端到端系统测试的成本和复杂性。 由于远程调用的开销,运行时性能和延迟会降低。 生产中的监视和故障排除可能更加复杂,因为单个操作通常会涉及许多微服务的协同工作(在LinkedIn上的示例中,单个用户请求可能链接至多达70个服务)。

体系结构中的DevOps:监控

在DevOps中,为了满足操作要求,监视已成为体系结构和设计中更为重要的因素。

关于监控的章节说明了您需要监控的内容以及为什么要监控DevOps指标,在不断变化的情况下监控系统的挑战,在云中监控微服务和监控以及在线系统的通用日志管理和监控工具。

监视也成为DevOps中实时测试( 监视即测试 )的重要组成部分,并在持续部署中发挥关键作用。 作者从被动检查(Security Monkey,Compliance Monkey)和主动实时测试(Chaos Monkey和Latency Monkey)方面着眼于常见的实时测试,包括金丝雀,A / B测试以及Netflix著名的Simian Army 。

体系结构中的DevOps:安全性

安全是本书解决的软件体系结构中另一个重要的跨领域问题。 它着眼于安全性基础知识,包括如何识别威胁(使用Microsoft的STRIDE模型 )以及需要保护的资源,CIA,身份管理,访问控制。 它概述了NIST 800-53中的安全控制以及VM和云体系结构(特别是AWS)中的常见安全问题。

在DevOps中,需要将安全性关联到持续部署中:

  1. 强制对代码和配置的所有更改都是通过持续部署管道完成的
  2. 安全测试应包含在持续部署流程的不同阶段中
  3. 保护管道本身,包括日志和工件

并且安全检查需要成为监视的一部分(例如Netflix的Compliance Monkey和Security Monkey)。

持续部署管道和关守

开发人员和架构师必须负责构建自动化测试和部署管道。 该书解释了持续部署如何利用持续集成以及代码管理和测试自动化的常用方法。 它强调了关守人员在整个流程中的作用-在不同点进行手动决策或自动检查,以确定是否可以继续进行,从开发到测试再到现场生产测试再到生产。

DevOps和现代软件架构

“ DevOps:软件架构师的观点”很好地解释了开发中(而不是操作)上下文中常见的DevOps做法,尤其是持续部署。 它还着眼于软件架构中的当代问题,包括虚拟化和微服务。

它不像Bass的另一本书“ 实践中的软件体系结构 ”那样具有学术性,并且强调了在架构和部署中对现实世界中操作的重要性,例如可靠性,安全性和透明性(监视以及实时检查和测试)。

这是一本主要为企业软件架构师和经理编写的书,他们希望了解有关DevOps和持续部署以及云服务的更多信息。

如果您已经深入研究DevOps并在云中使用微服务,那么您可能不会在这里找到很多新东西。

但是,如果您正在考虑如何大规模应用DevOps,或者如何将旧企业系统迁移到微服务和云,或者您是一名想了解操作以及DevOps对您和您的工作意味着什么的开发人员,这就是值得一读。

翻译自: https://www.javacodegeeks.com/2015/06/software-architecture-in-devops.html