【摘要】 针对应用架构师相关窘境,在现代化的应用开发中,DevOps组织需要定义应用架构师职责,使应用架构师与DevOps团队各角色更有效的沟通,交付更有价值的产品。在多数情况下,应用架构师不是DevOps团队的成员,因为架构技能非常稀缺,必须服务多个团队。架构师应该成为具有独特视角的领域专家、在团队内提升架构知识与技能的教练、帮助团队做出最佳决策的指导者。

DevOps组织的成功,很大程度上来自于聚焦培养强有力的DevOps团队。然而随着DevOps深入实施,DevOps组织却面临窘境,在交付团队与流程中无法为应用架构师定义相应的角色与活动。DevOps组织努力引入应用架构看护,却发现与DevOps价值观、目标与实践难以协调一致。同时,由于缺乏应用架构指导,DevOps组织难以将DevOps行动规划化推广。

DevOps组织面临的应用架构相关的窘境,概括来讲,主要体现在以下3方面:

1.     应用架构师与DevOps团队间关系越发失调,同时缺乏沟通基础与机制,难以有效沟通;

2.     开发流程中没有阐述何时寻求应用架构指导,导致应用开发缺乏架构指导,同时难以协调浮现式架构(Emergent Architecture)与前期架构需求;

3.     产品管理中没有定义应用架构角色,跨应用影响(例如协同与依赖)可能没有被有效识别。

针对应用架构师相关窘境,在现代化的应用开发中,DevOps组织需要定义应用架构师职责,使应用架构师与DevOps团队各角色更有效的沟通,交付更有价值的产品。在多数情况下,应用架构师不是DevOps团队的成员,因为架构技能非常稀缺,必须服务多个团队。架构师应该成为具有独特视角的领域专家、在团队内提升架构知识与技能的教练、帮助团队做出最佳决策的指导者。具体来讲,应聚焦以下3方面:

1.     建立DevOps团队与应用架构师的沟通机制,使DevOps团队将应用架构师视为SME、教练和指导者。

2.     让应用架构师提供架构原则和模式来指导单个解决方案的浮现式设计(Emergent Design)

3.     让应用架构师维护产品backlog的高层次视图以及跨DevOps团队协调来发现系统之间的影响,例如接口、重用等。

1      应用架构师与DevOps团队不同角色有效地沟通

通常情况下,DevOps团队最初先使用敏捷框架(Agile Framework)(例如Scrum)来定义以开发为中心的角色和活动,然后增加面向运维的角色和活动,以帮助团队成员更好地协同工作。DevOps团队的主要角色如下图所示:

图1 典型DevOps团队角色

DevOps团队的成员每天面对面一起工作。随着时间的推移,通过持续改进,DevOps团队形成了透明、信任、高效的工作氛围。DevOps这种以团队为中心的方法很难容下外来者。例如, ScrumMaster的职责之一就是保护团队免受外部打扰。

DevOps应该确定并促进DevOps团队与应用架构师之间的关系,使DevOps团队将应用架构从干扰者转变为合作伙伴,应用架构师成为领域专家(SME)、教练(Coach)与指导者(Guide),来共同负责有价值软件的成功交付。

在传统软件开发实践中,应用架构师可能只与开发团队的技术领导人或者项目经理进行沟通交互。然而,在DevOps团队中,应用架构师需要理解典型DevOps团队的角色,并与之建立关系,形成有效沟通。

  • ScrumMaster:ScrumMaster是团队的教练(Coach))、促进者(Facilitator)、保护者(Guardian)和指导者(Guide)。他们可以确保所有人理解并且遵从开发流程的应用架构的方方面面,并与团队和应用架构师一起优化流程,促进团队和应用架构师的交互。应用架构师应将ScrumMaster视为非常有价值的联盟。

  • Product Owner:PO是客户(或者业务)的代表,保证应用中包含了有价值的特性。他们与应用架构师一起工作确保backlog中涵盖了应用架构需求。PO和应用架构师合作来识别并理解跨团队影响以及调整backlog。

  • Developers:将应用架构师视为指导者和潜在的教练和顾问。如同与任何SME工作一样,开发人员应该在必须的时候寻求应用架构师的输入和澄清。在故事的开发与设计中,开发人员可与应用架构师讨论架构重要性或者影响。拥有架构知识的开发者可以作为应用架构师的代表和代言人。

  • Platform团队:与架构师确保应用更合适地使用平台的服务。反过来,架构师为平台的演进提供反馈。例如,架构师可以建议将功能创建为应用服务,而不是应用本身的一部分。在多个平台选择的情况下,架构师帮助确定哪个平台是合适的。

  • Operations团队:与应用架构师共同工作来识别方法最大化应用的可运维性、弹性、可持续性与安全。这些方法包括增加度量、增加或者修改工具链组件、与安全事件监控等管理工具集成、为应用行为提供可配置选项。

  • Support团队:是架构师的关键反馈来源,这些反馈包括设计决策的实际的、生产有效性。

除此之外,应用架构师通常与产品价值流的总体解决方案有关,因此应用架构师能够以更广的视角来识别DevOps团队间的协作,并提供权衡方案;同时可以帮助DevOps团队充分理解只有应用组合更强大,客户才能获得最大化的价值。

2      应用架构师为解决方案持续提供原则与模式,并拥抱反馈

在传统的软件开发组织中,应用架构师一直致力于提供大量的前期设计,为开发团队提供应用架构输入。在DevOps组织中,DevOps团队通常会引用敏捷宣言,特别是 “最好的架构、需求与设计出自自组织团队” 这条原则。DevOps团队采用迭代增量方式来构建应用,不断演进解决方案,以不断增进和改善对干系人需求的了解以及如何最好地满足需求。因此,应用架构师交付的大量静态架构规范无法演进,也无法提供价值,从而变成了浪费的源头与价值流的一种约束。

这不意味着应用架构输入对DevOps团队没有帮助。如果没有应用架构输入,DevOps团队创建的应用将缺乏重要特性(例如缺少安全性、扩展性或可靠性等),无法为客户提供足够的价值;同时应用也可能因基础平台不同及集成性弱等而无法很好地与产品组合中的其它产品相匹配。此外,如果团队不能利用可重用模式中的知识,将增加SME的负担,因为SME不得不重新发明轮子。最终,导致专家将用完容量,阻止规模化扩展。

尽管被视为深思熟虑架构的障碍,浮现式架构使敏捷团队参与到应用架构的创建中,并且更好与应用架构匹配。应用架构师和DevOps的团队目标是统一的,即为客户创建有价值的应用,但是他们有不同的视角。DevOps团队主要聚焦应用本身,而应用架构师更关注应用在企业应用组合中的位置,并在应用组合间提供一致的客户体验。因此,DevOps团队与应用架构师之间的紧张关系是不可避免的。然而,应用架构师必须愿意摒弃先入之见,并将架构决策延迟到最后时刻。

为实现持续的指导,应用架构师不被鼓励事先为敏捷团队提供大量的应用架构工件。敏捷团队会没做好使用的准备,或者会视为控制应用设计的尝试。相反地,应用架构师应该每次输入一些,按照敏捷团队的节奏,随着应用创建过程中出现的问题和机会。这需要应用架构师持续与DevOps团队沟通。

应用架构原则形成了持续指南的基础。应用架构师需要从基础中提供指南。应用架构师应该全面理解企业应用架构原则,并且一致地运用这些原则。应用架构师应该准备好传递基于原则的理由,来阐明为什么需要引入给定的需求,或者推荐某个特定模式的使用。实际的应用架构在应用架构师和DevOps团队的讨论中浮现。

定期的反馈应该在整个过程中收集。团队创建应用过程中浮现的实际的应用架构,不但与应用架构原则保持一致,而且经常会揭示这些原则新洞察。应用架构师领导者应该使用这些洞察来演进应用架构原则和实践。应用架构领导者应该考虑使用敏捷“回顾”技术,与应用架构师团队来增强反馈回路。

3      应用架构师维护产品待办事项的高级视图并影响事项

待办工作列表(Backlog)是DevOps团队活动的主要驱动力。待办工作列表中的工作项初始是粗粒度的,DevOps团队会分解为更细粒度的故事(Story)。随着工作的开展,待办工作列表越来越大,导致不同团队的跨单个Backlog的影响难以识别。反过来,这导致了某些冲突只能在生产环境上发现,需要昂贵的重复工作。也导致重用或者协同的机会没有得到实现。发现这些冲突与机会,同时采取行动避免或者利用他们,是应用架构师的作用之一。通过持续地指导应用开发团队,应用架构师将维护Backlog视图,此视图既有广度又有深度。这样,他们就可以相应地影响Backlog。当敏捷团队需要应用架构指导时,理解并监控Backlog是准备提供指导的关键。应用架构师可以在3方面影响Backlog:Item优先级、跨团队影响和DoD(Definition of Done)。

应用架构师应该评估每个待办工作列表中工作项与应用架构相关的方方面面,并且聚焦高优先级的工作项。这样做的目的是准备刚刚好、即时的指导,避免backlog变更时的重复工作。某些工作项应用架构意义更大,更复杂或者不确定,将需要应用架构师相应地与敏捷团队更多交互。某些工作项是更好的机会使团队探索替代的应用架构,或者重构现有软件。应用架构师应该与PO讨论,如何对这些item进行优先级排序。一些PO会为应用架构需求创建单独的工作项,而另外一些PO会将应用架构需求作为其他工作项的一部分。无论哪种情况,应用架构师与DevOps团队必须协商解决最重要的应用架构需求而牺牲其他需求,但是应该使DevOps团队意识到这将导致技术负债。

应用架构师应该看护所有敏捷团队的backlog,同时对应用组合有共同理解,以便来识别跨团队的影响和协作,这些主要包括接口、用户体验一致性与重用。重用对于DevOps团队来讲,是一个问题泛滥成灾的领域,因为重用设计会引入额外工作,而不会交付即时价值。应用架构师与DevOps团队可以使用Pay Twice模型来达成协议来减轻这种影响。

增加与敏捷团队的交互将使应用架构师的已经很紧张的安排雪上加霜。一些合规性和安全的需求经常出现并影响大部分团队。与其投入时间去持续重新介绍这些需求,不如考虑将他们纳入到DoD(Definition of Done)中。DoD是所有工作完成前必须满足的标准集合。这种方法是非常有效的。DevOps团队可以结合自动化测试和静态代码扫描工作,减少人工评审、耗时的低价值的应用架构工作。

长期来讲,客户不仅仅满足于软件立即提供的新特性,更需要持续的可靠性、可用性、性能和安全。因此,DevOps组织需要在软件交付中重新定义应用架构师角色,使应用架构师成为SME、教练和指导者,保障应用架构原则在DevOps团队落地,实现DevOps价值观、原则与实践能够规模化应用,最终为客户提供有价值的软件。


华为云DevCloud作为一站式云端DevOps平台,集成华为近30年研发实践和前沿理念,面向开发者提供研发工具服务,让软件开发简单高效。现支持5人以下额度范围内,可以免费使用,并且可以预约免费的产品演示和技术交流,详情查看华为云官网。

来源:华为云社区  作者:伦语春秋

DevOps组织中应用架构师的新定位与实践的更多相关文章

  1. 【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)

    Lab 1: 应用程序建模 实验目标 这个实验的目的是展示如何在Visual Studio 2010旗舰版中进行应用程序建模.团队中的架构师会通过建模确定应用程序是否满足客户的需求. 你可以创建不同级 ...

  2. java架构师之路--推荐书籍

    1.大型网站技术架构:核心原理与案例分析 本书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选 ...

  3. IT架构师介绍-软件架构设计学习第一天(非原创)

    文章大纲 一.架构师定义二.架构师分类与具备能力三.研发人员发展的技术路线四.架构师知识体系五.参考文章   一.架构师定义   什么是架构师,这个聊架构话题时永恒的问题.每个公司对架构师的定位也有所 ...

  4. [转]如何循序渐进向dotnet架构师发展

    微软的DotNet开发绝对是属于那种入门容易提高难的技术.而要能够成为DotNet架构师没有三年或更长时间的编码积累基本上是不可能的.特别是在大 型软件项目中,架构师是项目核心成员,承上启下,因此RU ...

  5. 向架构师进军--->系统架构设计基础知识

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在讲解系统架构设计之前,有必要补充一下架构相关的概念,因此本博文主要讲述架构.架构师 ...

  6. 向架构师进军--->系统架构设计基础知识

    假设你对项目管理.系统架构有兴趣,请加微信订阅号“softjg”,增加这个PM.架构师的大家庭 在解说系统架构设计之前,有必要补充一下架构相关的概念,因此本博文主要讲述架构.架构师和架构设计等相关的概 ...

  7. 架构师修炼 III - 掌握设计原则

    关于软件的设计原则有很多,对于设计原则的掌握.理解.实践及升华是架构师的一项极为之必要的修炼. 记得在12年前第一次阅读<敏捷开发>时,五大基本设计原则就深深地植入到我的脑海中一直影响至今 ...

  8. 架构师修炼 II - 表达思维与驾驭方法论

    开篇之前我想先说说当年开发的那点事儿:大约10年前吧,我还是一个程序员的时候经常都是遇到这样的项目开发流程: 解决方案 :满足客户目的和投标用的一堆文档(不少还是互联网上抄的) ,是以Word为主的纯 ...

  9. 从程序员到asp.net架构师转变[转]

    微软的DotNet开发绝对是属于那种入门容易提高难的技术.而要能够成为DotNet架构师没有三年或更长时间的编码积累基本上是不可能的.特别是在大型软件项目中,架构师是项目核心成员,承上启下,因此 RU ...

随机推荐

  1. 震惊!我竟然发现了JDK源码的问题

    读源码时的思考 最近在看concurrent包下线程池的源码,当我看到ThreadPoolExecutor类的时候,发现了JDK源码的一个问题.以下是ThreadPoolExecutor类的addWo ...

  2. dhcpv6+radvd服务器搭建

    1.isc-dhcp-server install sudo apt update sudo apt-get install isc-dhcp-server 2.设置dhcp 创建/etc/dhcp/ ...

  3. php Yaf_Loader::import引入文件报错的解决方法

    php Yaf_Loader::import引入文件报错的解决方法 改下配置文件就行<pre>yaf.use_spl_autoload=1</pre> 也可以PHP动态修改 毕 ...

  4. Linux服务器更改Apache2默认页面

    方式一 获取root权限 su root //或者 sudo -i 进入 /var/www目录下 cd /var/www 创建目录 mkdir -m 777 myhtml // myhtml为自己创建 ...

  5. SqlServer2005 查询 第三讲 between

    在数据库的查询中最重要的是要知道命令的顺序,因为在sql命令中有许多的参数,例如distinct,top,in,order by,group by.......如果你不能理解什么时候该执行什么的话,很 ...

  6. mysql提示Packet for query is too large (1142 > 1024)解决方案

    注:最近mysql一直提示如下错误 Packet for query is too large (1185 > 1024). You can change this value on the s ...

  7. 力扣(LeetCode)4的幂 个人题解

    给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方. 示例 1: 输入: 16 输出: true 示例 2: 输入: 5 输出: false 进阶:你能不使用循环或者递归 ...

  8. JAVA继承中子父类的构造方法

    首先,构造方法本身会有一个隐式的无参构造(默认): ①不写构造方法,类中的第一行代码事实上有一个默认的无参构造(系统会隐式为你写好) public class Student { private St ...

  9. Linux安装telnet C/S 【白话文】

    1.安装telnet 和telnet-server yum -y install telnet yum -y install telnet-server 注意:在此安装过程中,会依赖解决xinetd的 ...

  10. vue中动态加载img

    想实现动态加载图片,当点击“首页”时,图片变色 代码如下: <mt-tabbar v-model="selected" fixed class="border-1p ...