首页 > 其他分享 >ArchKeeper(开篇):架构守护平台的问题与理念

ArchKeeper(开篇):架构守护平台的问题与理念

时间:2023-03-09 20:31:44浏览次数:42  
标签:架构 开篇 ArchKeeper 约束 应用 评审 团队 演进

作者:京东科技 倪新明

在敏捷开发环境下,系统通过迭代增量的交付价值,系统架构也是如此。团队不可能在项目之初就建立完美的系统架构,系统架构应该随着系统迭代不断演进。架构演进和架构腐化是看待架构的不同视角:架构腐化着眼于现状,架构演进侧重于未来架构腐化不可避免,随着时间流转腐化现象必然发生。而我们需要做的是:通过某种方式及早发现和修正

1 面临的问题

把目光从宏观的演进和腐化视角聚焦在更加具体的问题和挑战层面,作为团队负责人或架构师,你是否面临以下问题:

•团队已经制定的开发规范很难持续性的落地,并在应用中保持较高的健康状态

•系统制定的架构决策在系统迭代过程中逐渐弱化、打破,甚至随着时间的推移,团队中已经没有人关注决策的落地和遵守情况

•历史的架构决策早已 ”无迹可寻“,更何谈对系统架构演进的追溯

•如何快速的判断当前系统腐化程度或健康情况?

•不论是架构升级、系统演进,系统缺失指导性的自动化约束,确保演进方向不会偏离

基于以上的问题,我相信团队都会做过一些实践,不管是流程的强约束,还是系统的自动化,都尝试解决如上所面临的所有或部分问题。典型的方式:

•方式一:代码评审(强流程)

•方式二:静态分析工具,并结合CICD流水线

•方式三:基于ArchUnit的架构约束单元测试实践

ArchKeeper(开篇):架构守护平台的问题与理念_系统架构

1.1 代码评审

代码评审是最典型的方式,对每次迭代的代码交付进行强流程的评审,通过多干系人参与,可以灵活的、深入的评估实现对于约束的遵守情况。当然,评审越完备,需评审人员投入的精力和时间成本越大。

大量的开发实践表明,系统无法持续保持高强度的、完备的代码评审,评审的力度会由于各种因素而下降,最终导致系统的腐化,这种人为不可控因素是代码评审的主要问题。

另外一个问题是,代码评审在研发流程中的后置性。一般情况下,代码评审介入的实际可能是在开发提测之后,联调结束之前,当然有些团队可能更后置。流程越后置,如果存在大规模的架构约束破坏,则可能导致重构成本与项目周期的冲突。

ArchKeeper(开篇):架构守护平台的问题与理念_代码评审_02

ArchKeeper(开篇):架构守护平台的问题与理念_静态分析_03

1.2 静态分析工具

代码的静态分析工具比较多,比如CheckStyle 、FindBug、Sonar,公司内部的EOS等等,这些静态分析工具能够对代码的规范,比如注释、命名、可能存在潜在缺陷的代码段、圈复杂度等进行分析。

ArchKeeper(开篇):架构守护平台的问题与理念_ArchKeeper_04

ArchKeeper(开篇):架构守护平台的问题与理念_ArchKeeper_05

静态分析工具的最大优势在于:

平台化支持,丰富的产品矩阵:比如既有面客的PC端平台,又有方面研发使用的IDE插件等等

•校验的自动化执行能力:可以通过平台、IDE插件工具或是流水线(如果集成CICD)触发自动化执行并生成分析报告。

静态分析工具的不足主要表现在:

•一般情况下,这些工具仅仅是提供建议的扫描报告,不具强流程控制,在约束打破时不会阻断应用构建。部分工具(并不是所有)与CICD流水线进行了打通,通过质量门禁来干预构建流程,一定程度上能作为系统约束校验的最后卡点。

•静态分析工具的能力侧重点一般在于开发编码规范的约束,比如命名、注释、代码段规约等等,而对于高层的架构约束的校验较弱,比如分层架构约束、”组件“间约束、类位置约束、包与类的包含关系约束等等。

•约束执行的粒度更倾向于统一规范,比如在团队维度、编程语言维度,而实际上忽略了应用级的定制化约束。不同的应用工程具备特定的应用架构风格,基于特定风格下有不同的架构约束。这些差异化规划与团队统一规则存在潜在冲突,并不一定在跨应用下都适用。

1.3 基于ArchUnit

ArchUnit是一个基于Junit运行的架构约束类库,其能够通过单元测试的形式对系统架构约束进行自动化的校验。团队引入ArchUnit的成本并不高,由于是基于单元测试形式引入,并不影响应用程序的主线流程。团队在引入往往有集中形式:

•单个应用引入,每个应用都定义各自的单测

•公共jar包,多应用复用

上述应用模式也同样在统一规范和应用差异化层面存在类似的问题。

ArchKeeper(开篇):架构守护平台的问题与理念_代码评审_06

ArchKeeper(开篇):架构守护平台的问题与理念_系统架构_07

1.4 共性问题

以上的三种实践方案存在以下几个共性问题无法解决:

•团队统一规范和应用级别的定制化支持

•架构决策记录的管控与追踪

•多维度的架构指标分析

ArchKeeper(开篇):架构守护平台的问题与理念_系统架构_08

ArchKeeper(开篇):架构守护平台的问题与理念_系统架构_09

2 ArchKeeper 平台建设的核心目标

基于对已有问题及解决方案的分析,我们希望平台化的解决方案,ArchKeeper平台建设的核心目标如下:

•架构约束自动化测试能力:支持架构约束的自动化执行

•灵活、简单的规则扩展能力:规则的定制扩展应尽量保持简单、灵活,满足实际的定制化需求

团队统一规范与应用扩展规则的统一执行

•结果及时反馈,支持与CICD流水线集成:自动化执行前置到开发阶段,并通过CICD流水线作为最后卡点

•ADR管控与追踪:以产品线和应用为载体,对系统的架构决策进行统一管控,并具备ADR的可视化追溯能力

•架构约束静态分析模式,以评估架构腐化:基于代码仓库及规则库的静态分析能力,以提供高层的应用规则分析报表

•多维度架构治理指标分析能力:对应用提供更多维度的指标分析,比如组件耦合度等,为架构演进提供指引

ArchKeeper(开篇):架构守护平台的问题与理念_代码评审_10

ArchKeeper(开篇):架构守护平台的问题与理念_静态分析_11

3 ArchKeeper 核心理念

ArchKeeper(开篇):架构守护平台的问题与理念_系统架构_12

ArchKeeper(开篇):架构守护平台的问题与理念_代码评审_13

理念一:架构约束是强制规则,应用必须遵守,否则应阻断应用构建

系统的架构决策是影响系统的“重要”的东西,决策评审通过之后应确保应用的遵循,团队应该评估校验决策执行的方式,比如哪些可以自动化校验,哪些需要基于人工审查。对于支持自动化校验的架构约束,应用必须遵守,不能破坏约束限制。因此,如果存在破坏约束情况,应当阻断应用构建。

理念二:架构约束测试的执行应该尽量前置,及时反馈

流程后置带来的问题就是如果存在架构约束的破坏,研发进行重构需要一定时间成本。流程越后置,重构成本越高。因此,架构约束的自动化执行应该尽量前置,提前至开发阶段,并尽可能的及时反馈校验结果以提升效率。

理念三:架构约束无法完全统一,在团队统一规范之外,允许应用级的定制,且须统一执行

架构约束的范围比较广,团队无法形成完全统一的、标准一致的约束规范。有些约束是团队层面的,比如编码规范中的某些强制约束。而有些则是应用级别的,比如特定应用下的分层约束等等。因此,这种定制化是必然存在的。虽然,团队统一约束和应用级别的定制化约束无法完全统一,但二者应该在统一的自动化流程中执行。

理念四:系统的架构决策记录应当留存并可追溯

系统的架构决策记录(ADR)是团队的重要资产,ADR应该以文档化形式留存,并能够对ADR的演进提供追溯能力。

理念五:多维度的架构指标分析有利于防止架构腐化,为架构演进提供指引

ArchKeeper平台之所以计划提供多维度架构指标的分析能力正是基于这样一个前提理念:对应用进行多维度的架构指标分析,有利于观测系统的腐化情况,并为系统的架构演进提供一定的指引。

4 结语

文章主要阐述了研发中存在的问题及ArchKeeper平台化建设理念及目标,并没有涉及具体的实现。后续的系列文章会对ArchKeeper能力规划、设计实现(基于DDD)进行持续的分享交流。

关联文章:

《 通过自动化单元测试的形式守护系统架构 》

《 轻量级的架构决策记录机制 》

标签:架构,开篇,ArchKeeper,约束,应用,评审,团队,演进
From: https://blog.51cto.com/u_15714439/6110257

相关文章

  • 测试之魂之软件测试架构设计
    测试架构的设计❝部门的人员流动一直很大,每次公司为了降低成本都会招一些新毕业的人从头培养,那么存在的问题是,新人什么都不熟悉,部门没有知识架构体系,无法将信息快速给到......
  • 需求分析之道——需求分析要做什么(C系架构设计法,sishuok)
    需求分析之道——需求分析要做什么。需求分析是架构师开始做架构设计的第一步,对架构师来讲非常非常的重要。因为需求分析能够告诉我们,到底我们要做什么,架构设计就是为了去......
  • 软考架构师备考
    第一阶段(3月)学习软件工程、系统架构、需求分析等基础知识复习计算机网络、数据库等相关知识点练习历年真题,了解考试形式和难度第二阶段(4月)学习IT服务管理、安全技术、大数......
  • 架构设计思想-“开闭原则”
    架构设计思想,其中有一种设计原则叫“开闭原则”,其核心是:一个对象对扩展开放,对修改关闭。就是说,一旦写好了某个类,就不要去轻易改动他,而是要保证它一直能运行下去,而面对新的......
  • 浅析三款大规模分布式文件系统架构设计
    什么是文件系统当提到文件系统,大部分人都很陌生。但我们每个人几乎每天都会使用到文件系统,比如大家打开Windows、macOS或者Linux,不管是用资源管理器还是Finder,都是在......
  • SOA架构浅析
    SOA架构浅析什么是soasoa就是把业务拆分成刚刚正好的模块,每一个模块都相互独立网上看了一个故事比较有意思:一开始农民伯伯来养猪,农民伯伯需要打猪草,还需要喂泔水,然后......
  • ArchKeeper (开篇):架构守护平台的问题与理念
    作者:京东科技倪新明在敏捷开发环境下,系统通过迭代增量的交付价值,系统架构也是如此。团队不可能在项目之初就建立完美的系统架构,系统架构应该随着系统迭代不断演进。架构......
  • 10Wqps评论中台,如何架构?B站是这么做的!!!
    文章持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+......
  • 架构师是如何进行前端性能优化设计的 All In One
    架构师是如何进行前端性能优化设计的AllInOne做为一名架构师应该如何对前端项目性能优化方案进行设计和落地执行性能优化设计模式/优化策率/投入产出比/性价比量化......
  • Rudin 数学分析原理开篇的例子(平方小于 2 的正有理数构成的集合没有最大值)分析
    令A={p>0:p∈Q,p2<2},则A中没有最大的数.这个命题节选自WalterRudin在他的《数学分析原理》一书开篇的例子.证明思路就是任取p∈A,总能找到q∈A满......