Close

如何控制软件蔓延

软件蔓延的三个迹象以及如何防范

Andrew Boyagi 头像
Andrew Boyagi

资深宣传员


单体架构正在迅速消失。现在,全球无数公司采用松散耦合架构来开发软件。分布式自主团队正在将单体应用分解为微服务等组件集合。

背后的原因是松散耦合架构可以更轻松地扩展软件性能和提高弹性,同时降低交付新应用功能的风险和缩短提前期。除了软件,还有很多其他益处。松散耦合的架构使团队能够独立行动,并频繁发布对用户有益的更改。在松散耦合架构中构建软件的自主团队具有更高的幸福感、参与度和生产力。

但是,新的工作方式往往伴随着新的挑战。在创建一个动态且可扩展的环境时,各个组件相互独立构建,复杂性因此增加,从而催生了一种新的挑战:软件蔓延。

方块插图

什么是软件蔓延?


软件蔓延是指环境中应用或软件组件的数量迅速增长和变化,从而显著增加复杂性并导致传统软件管理方法失败。这种情况通常发生在分布式软件架构的速度加快时。

即使对单个单体式应用进行现代化改造,也可能导致数百个微服务由多个团队管理,这些团队经常独立地将新功能发布到生产环境中。将其扩展到应用项目组合可能意味着在多个开发团队中引入数千种微服务。即使是小型应用项目组合的传统管理方式也不太可能带来长期成功,这一点也不奇怪。在 Atlassian 支撑我们当今产品的数千种微服务的旅程中,我们发现控制软件蔓延是释放松散耦合架构和自主团队力量的关键。

代码库图标
相关资料

微服务与单体式架构

三环图标
查看解决方案

使用 Compass 来管理组件

一开始可能很难识别软件蔓延的症状。起初可能只是微小隐患,可以被搁置一边,转而先完成优先级更高的工作。然而,如果任其发展,软件蔓延可能会削弱开发团队的能力,增加认知负荷,降低团队参与度,并扭转与松散耦合架构相关的好处。就像谚语一样:“种树的最佳时机是20年前。其次是现在。”未来的成功取决于能否在软件蔓延成为问题之前控制住它。

以下是软件蔓延的三个迹象,以及您可以做些什么来控制混乱局面,同时创造一个创新的动态环境,释放每个团队的潜力。

事后审查将上游变化确定为根本原因


软件蔓延的早期症状是多次事后审查 (PIR) 表明上游变化是事件的根本原因。微服务数量的增加和环境中变更量的增加会给围绕开发人员协作和变更协调的现有规范带来压力。即使一个现代化应用的变更频率从每月一次小幅增加到每周一次,也可能导致每月的发布量增加 100 倍。因此开发人员需要调整协作方式。当开发人员协作规范无法适应快节奏的环境,生产中更有可能发生事件。

为开发人员创造一种非侵入性的方式来了解上游和下游的变更,这是遏制软件蔓延影响的好方法。在 Atlassian,我们使用 Compass(帮助团队浏览分布式架构的开发人员门户)向开发团队发送有关上游和下游服务重大变更的应用内通知。确认此通知会向变更发起人发出信号,表明负责相关服务的团队已知悉该变更。如果预计会出现任何问题,这提供了就变更进行合作的机会,从而降低了生产中出现意外影响的可能。由于事件必然会在动态环境中发生,因此开发人员在事件期间的协作对于快速恢复服务至关重要。

在上游变更为根本原因的事后审查中,恢复服务的时间通常会受到识别有问题的上游变更所花费的时间以及负责服务的团队或人员的影响。从逻辑上讲,随着时间的推移,减少识别违规上游变更所需的时间可以缩短平均恢复时间 (MTTR)。这在松散耦合架构中变得更加困难,在这种架构中,服务具有丰富的依赖关系层次结构,事件的根本原因可能在堆栈中的任何地方。传统上,事件响应者会浏览日志或变更记录,以确定可能导致事件的变更。在动态环境中,这就像拆除蚂蚁山来找到咬你的蚂蚁一样。

在 Atlassian 中,我们使用 Compass 中的动态订阅源来降低 MTTR。它显示了上游系统的所有事件以及负责该系统的团队的详细信息。这通过在事件发生期间支持开发人员协作,大幅缩短了分类时间。事件不可避免,但及时将上游变更确定为事件的根本原因对于确保最大限度地减少影响和快速恢复服务至关重要。

软件蔓延

Compass 中的动态订阅源显示上游系统的所有事件,从而缩短了事件期间的分类时间。

队伍产出很高,但又好似什么也没做


转向松散耦合架构是提高团队生产力和幸福感的关键要素之一,即能够在高度自主的情况下独立行动。如果不加以控制,软件蔓延可能会逆转其中一些好处,导致团队忙碌但效率低下且不开心。在与开发团队交谈时,一个常见的抱怨就是“一切都正常,直到需要与其他团队合作。”当软件蔓延成为问题时,这种情况就会加剧。快速扩张和变化的环境降低了开发人员跟踪上游或下游依赖关系应与谁互动的能力,最终导致努力按时交付的团队速度变慢且挫败感增加。

假设 Alpha 小组和 Beta 小组每周在 Jira 中遇到相同数量的问题,故事点移至“完成”。Alpha 小组花了 90% 的精力将新功能投入生产,而 Beta 小组 30% 的精力花在新功能上,70% 的精力研究如何与他们依赖的许多上游服务互动。两支小组的输出水平相同,但可能只有 Alpha 才算是工作效率高。软件蔓延放大了团队之间协作的需求。确定自主团队按需参与的明智方法是释放松散耦合环境力量的关键。

在快速增长和动态的环境中,自助提供信息的能力对于团队的生产力和幸福感至关重要。实现这一目标的一种方法是实施具有分散管理的集中式软件组件目录,这是一个集中式目录,每个团队负责创建和更新他们负责的服务。传统环境通常具有由特定团队或职能部门管理的集中式目录。但是,这跟不上分布式环境的变化速度,导致团队创建影子维基来说明谁参与和如何参与。在 Atlassian 中,我们发现去中心化方法可以减少团队间无形浪费的精力,提高自助服务能力,并创建按需互动的环境。通过提供有关上游和下游依赖关系的自助服务信息来控制软件蔓延,不仅有助于提高团队生产力,还会对团队的幸福感和参与度产生互补作用。

Compass 用户服务屏幕截图。

Compass 为开发人员提供有关他们负责和依赖的软件组件特定信息的中心位置。

变更管理成为瓶颈


软件蔓延的另一个关键标志是,变更管理和网络安全等治理职能越来越频繁地成为生产系统变更的瓶颈。这些职能在确保在将变更部署到生产环境之前满足组织标准和期望方面起着关键作用。但是,随着软件蔓延的出现,它们的效果会降低。在饱受软件蔓延困扰的环境中,随着变更率的提高,治理职能逐渐变得不堪重负,导致需要审查的变更和请求积压,从而延迟了生产部署。2022 年 DevOps 现状报告发现,56% 的受访者认为他们组织的软件安全流程减缓了开发流程。

理想情况下,安全实践可以融入开发流程,但实际上,许多组织在生产部署之前都需要人工审查变更。这无法满足分布式环境所需的规模要求。除了减缓组织实现变更的能力外,它还可能导致开发团队与负责确保组织标准得到满足的人员之间发生摩擦。

在饱受软件蔓延困扰的环境中,大规模实现所需的组织标准的同时实现高速运行至关重要。自动记分卡(或半自动记分卡)是传达组织标准的好方法,也是一种检查整个环境合规性的非侵入性方法。我们在 Atlassian 使用 Compass 来设定组织质量标准和期望——每个软件组件的记分卡为组织提供了合规方面的透明度。团队和工程主管可以将特定产品的标准添加到记分卡中,这样可以全面了解组织质量期望和状态,供组织中的任何人查看。这是一个重大转变,从交付周期结束时进行治理和合规检查,到尽早设定期望并使团队能够在整个开发过程中满足预期。治理团队可以在动态环境中设定期望,而交付团队则有机会在交付周期中了解并满足需求。由于软件蔓延的影响可能对软件交付和治理团队不利,因此记分卡为掌控蔓延提供了机会。

数据安全图像

Compass 记分卡用于根据一组已定义的期望来了解软件组件的运行状况。

总结...


没有控制软件蔓延的灵丹妙药。然而,长期成功取决于及早发现和解决软件蔓延的影响。软件蔓延的一些早期指标包括由上游或下游变更引起的多起事件、繁忙的团队没有实现目标以及治理瓶颈。识别软件蔓延的最佳方法是与开发人员交谈,了解他们面临的挑战。

Atlassian 开发了 Compass,它旨在帮助公司在扩展分布式架构时管理其复杂性。它是一个可扩展的开发人员体验平台,可将有关工程产出及团队协作的分散信息整合到一个集中且可搜索的位置。

了解有关 Compass 的更多信息

Andrew Boyagi
Andrew Boyagi

Andrew 是 Atlassian 敏捷和 DevOps 团队的高级宣传员。Andrew 在企业组织的软件交付和运营方面拥有丰富的经验,为团队和组织如何根据现实生活经验最大限度地发挥敏捷和 DevOps 的优势提供了实用的视角。Andrew 还在澳大利亚最大的金融机构之一澳大利亚联邦银行内建立并完善了平台工程职能,为 7,000 名工程师提供支持。Andrew 热衷于释放软件交付团队的潜力,并认为平台工程是在现代技术环境中成功的关键。

工作之余,Andrew 的目标是体验全球十大最佳摩托车,他与妻子和两个孩子住在澳大利亚悉尼。


分享此文章
下一主题

推荐阅读

将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。

Devops 示意图

Compass 社区

克服障碍插图

教程:创建组件

地图插图

免费试用 Compass

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up