ArchKeeper(开篇):架构守护平台的问题与理念
作者:京东科技 倪新明
在敏捷开发环境下,系统通过迭代增量的交付价值,系统架构也是如此。团队不可能在项目之初就建立完美的系统架构,系统架构应该随着系统迭代不断演进。架构演进和架构腐化是看待架构的不同视角:架构腐化着眼于现状,架构演进侧重于未来架构腐化不可避免,随着时间流转腐化现象必然发生。而我们需要做的是:通过某种方式及早发现和修正
1 面临的问题
把目光从宏观的演进和腐化视角聚焦在更加具体的问题和挑战层面,作为团队负责人或架构师,你是否面临以下问题:
•团队已经制定的开发规范很难持续性的落地,并在应用中保持较高的健康状态
•系统制定的架构决策在系统迭代过程中逐渐弱化、打破,甚至随着时间的推移,团队中已经没有人关注决策的落地和遵守情况
•历史的架构决策早已 ”无迹可寻“,更何谈对系统架构演进的追溯
•如何快速的判断当前系统腐化程度或健康情况?
•不论是架构升级、系统演进,系统缺失指导性的自动化约束,确保演进方向不会偏离
基于以上的问题,我相信团队都会做过一些实践,不管是流程的强约束,还是系统的自动化,都尝试解决如上所面临的所有或部分问题。典型的方式:
•方式一:代码评审(强流程)
•方式二:静态分析工具,并结合CICD流水线
•方式三:基于ArchUnit的架构约束单元测试实践
1.1 代码评审
代码评审是最典型的方式,对每次迭代的代码交付进行强流程的评审,通过多干系人参与,可以灵活的、深入的评估实现对于约束的遵守情况。当然,评审越完备,需评审人员投入的精力和时间成本越大。
大量的开发实践表明,系统无法持续保持高强度的、完备的代码评审,评审的力度会由于各种因素而下降,最终导致系统的腐化,这种人为不可控因素是代码评审的主要问题。
另外一个问题是,代码评审在研发流程中的后置性。一般情况下,代码评审介入的实际可能是在开发提测之后,联调结束之前,当然有些团队可能更后置。流程越后置,如果存在大规模的架构约束破坏,则可能导致重构成本与项目周期的冲突。
1.2 静态分析工具
代码的静态分析工具比较多,比如CheckStyle 、FindBug、Sonar,公司内部的EOS等等,这些静态分析工具能够对代码的规范,比如注释、命名、可能存在潜在缺陷的代码段、圈复杂度等进行分析。
静态分析工具的最大优势在于:
•平台化支持,丰富的产品矩阵:比如既有面客的PC端平台,又有方面研发使用的IDE插件等等
•校验的自动化执行能力:可以通过平台、IDE插件工具或是流水线(如果集成CICD)触发自动化执行并生成分析报告。
静态分析工具的不足主要表现在:
•一般情况下,这些工具仅仅是提供建议的扫描报告,不具强流程控制,在约束打破时不会阻断应用构建。部分工具(并不是所有)与CICD流水线进行了打通,通过质量门禁来干预构建流程,一定程度上能作为系统约束校验的最后卡点。
•静态分析工具的能力侧重点一般在于开发编码规范的约束,比如命名、注释、代码段规约等等,而对于高层的架构约束的校验较弱,比如分层架构约束、”组件“间约束、类位置约束、包与类的包含关系约束等等。
•约束执行的粒度更倾向于统一规范,比如在团队维度、编程语言维度,而实际上忽略了应用级的定制化约束。不同的应用工程具备特定的应用架构风格,基于特定风格下有不同的架构约束。这些差异化规划与团队统一规则存在潜在冲突,并不一定在跨应用下都适用。
1.3 基于ArchUnit
ArchUnit是一个基于Junit运行的架构约束类库,其能够通过单元测试的形式对系统架构约束进行自动化的校验。团队引入ArchUnit的成本并不高,由于是基于单元测试形式引入,并不影响应用程序的主线流程。团队在引入往往有集中形式:
•单个应用引入,每个应用都定义各自的单测
•公共jar包,多应用复用
上述应用模式也同样在统一规范和应用差异化层面存在类似的问题。
1.4 共性问题
以上的三种实践方案存在以下几个共性问题无法解决:
•团队统一规范和应用级别的定制化支持
•架构决策记录的管控与追踪
•多维度的架构指标分析
2 ArchKeeper 平台建设的核心目标
基于对已有问题及解决方案的分析,我们希望平台化的解决方案,ArchKeeper平台建设的核心目标如下:
•架构约束自动化测试能力:支持架构约束的自动化执行
•灵活、简单的规则扩展能力:规则的定制扩展应尽量保持简单、灵活,满足实际的定制化需求
•团队统一规范与应用扩展规则的统一执行
•结果及时反馈,支持与CICD流水线集成:自动化执行前置到开发阶段,并通过CICD流水线作为最后卡点
•ADR管控与追踪:以产品线和应用为载体,对系统的架构决策进行统一管控,并具备ADR的可视化追溯能力
•架构约束静态分析模式,以评估架构腐化:基于代码仓库及规则库的静态分析能力,以提供高层的应用规则分析报表
•多维度架构治理指标分析能力:对应用提供更多维度的指标分析,比如组件耦合度等,为架构演进提供指引
3 ArchKeeper 核心理念
理念一:架构约束是强制规则,应用必须遵守,否则应阻断应用构建
系统的架构决策是影响系统的“重要”的东西,决策评审通过之后应确保应用的遵循,团队应该评估校验决策执行的方式,比如哪些可以自动化校验,哪些需要基于人工审查。对于支持自动化校验的架构约束,应用必须遵守,不能破坏约束限制。因此,如果存在破坏约束情况,应当阻断应用构建。
理念二:架构约束测试的执行应该尽量前置,及时反馈
流程后置带来的问题就是如果存在架构约束的破坏,研发进行重构需要一定时间成本。流程越后置,重构成本越高。因此,架构约束的自动化执行应该尽量前置,提前至开发阶段,并尽可能的及时反馈校验结果以提升效率。
理念三:架构约束无法完全统一,在团队统一规范之外,允许应用级的定制,且须统一执行
架构约束的范围比较广,团队无法形成完全统一的、标准一致的约束规范。有些约束是团队层面的,比如编码规范中的某些强制约束。而有些则是应用级别的,比如特定应用下的分层约束等等。因此,这种定制化是必然存在的。虽然,团队统一约束和应用级别的定制化约束无法完全统一,但二者应该在统一的自动化流程中执行。
理念四:系统的架构决策记录应当留存并可追溯
系统的架构决策记录(ADR)是团队的重要资产,ADR应该以文档化形式留存,并能够对ADR的演进提供追溯能力。
理念五:多维度的架构指标分析有利于防止架构腐化,为架构演进提供指引
ArchKeeper平台之所以计划提供多维度架构指标的分析能力正是基于这样一个前提理念:对应用进行多维度的架构指标分析,有利于观测系统的腐化情况,并为系统的架构演进提供一定的指引。
4 结语
文章主要阐述了研发中存在的问题及ArchKeeper平台化建设理念及目标,并没有涉及具体的实现。后续的系列文章会对ArchKeeper能力规划、设计实现(基于DDD)进行持续的分享交流。
关联文章:
《 通过自动化单元测试的形式守护系统架构 》
《 轻量级的架构决策记录机制 》

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
女神节特辑 | 5%的故事,看见女性开发者的力量
摘要:愿你卓然而立绽放光芒,你是员工,是母亲,是妻子,更是你自己!祝福全体女性开发者们节日快乐! 本文分享自华为云社区《女神节特辑 | 5%的故事,看见女性开发者的力量》,作者:技术火炬手。 据CSDN发布的《2021-2022中国开发者现状调查报告》显示,40岁以下的女性开发者占比达到20%,但40岁以上仅占5%。 华为云HCDE(华为云开发者专家)王苏西就是这5%,不仅如此,在女性凤毛麟角的行业里,她作为一名技术管理者主导了云计算领域多个突破性技术项目的研发工作,让更多的人看见女性开发者卓尔不凡的的力量。 女性开发者是少数派,也是中坚力量 王苏西觉得自己是很幸运的一代人,从东南大学计算机专业毕业后,赶上了国内互联网蓬勃发展的时代,一路走来,从消费、医疗到环保行业,她做过产品研发、项目经理、技术管理…… 如今,她在一家聚焦清洁能源制造业需求的数据公司担任研发中心主任兼高级技术总监,负责公司整体技术战略规划,于她来说,是站在新赛道上的又一次颇具挑战性的工作。 为什么会选择能源赛道,这也是她给作为少数派的女性开发者们的建议。“在工作大方向上选择有潜力的行业,选对赛道将事半功倍。” 同时,...
- 下一篇
React Hooks源码深度解析
作者:京东零售 郑炳懿 前言 React Hooks是React16.8 引入的一个新特性,它允许函数组件中使用state和其他 React 特性,而不必使用类组件。Hooks是一个非常重要的概念,因为它们提供了更简单、更易于理解的React开发体验。 React Hooks的核心源码主要包括两个部分:React内部的Hook管理器和一系列预置的Hook函数。 首先,让我们看一下React内部的Hook管理器。这个管理器是React内部的一个重要机制,它负责管理组件中的所有Hook,并确保它们在组件渲染期间以正确的顺序调用。 内部Hook管理器 示例: const Hook = { queue: [], current: null, }; function useState(initialState) { const state = Hook.current[Hook.queue.length]; if (!state) { Hook.queue.push({ state: typeof initialState === 'function' ? initialState() : in...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7