写点什么

国内首个开源架构治理平台 ArchGuard,专治分布式场景下各种不服

  • 2022-04-02
  • 本文字数:2371 字

    阅读完需:约 8 分钟

国内首个开源架构治理平台 ArchGuard,专治分布式场景下各种不服

过去的 10 年间,软件的架构发生了巨大的变化,从早先流行的单体 MVC 架构,变成了所谓的 5:5 开,即分布式 vs 单体。只是呢,有大量的软件开发人员,无法看到系统的全貌,又或者是从单体的思维转变过来。于是,哪怕是在使用了微服务的情况下,但是实现的却又是一个一个的单体,只是它们变成了“分布式的单体”。


架构治理变成一个急待解决的问题。

我们所面临的挑战


作为一个架构师或者是软件开发人员,在架构治理上,我们面对的诸多挑战有:


  • 设计与实现不匹配。设计的软件架构与真正实施后的架构,存在着巨大的差异。而这个差异,往往需要编码上线、乃至一段时间之后才能发现

  • 没有规范/不遵守规范。作为一个资深的开发人员,我们制定了一系列的规范,但是没有多少团队人员愿意遵守

  • 代码量巨大,难以识别问题。一个由十几个或者几十个微服务创建的系统,往往难以快速发现它们之间错综复杂的关系

  • 架构模型的每个层级都可能出错。如服务间 API 耦合、代码间耦合、数据库耦合等等

  • 架构师、开发人员自身缺乏丰富的经验。知道有问题,但是说不出来哪有问题,也不知道如何改进


因此,我们需要一个平台/工具,来帮助我们解决这些问题。所以,结合我们过去的一系列软件开发和重构经验,我们(Thoughtworks 的咨询师们)从 2020 年(疫情开始的时候)开始了架构治理平台 ArchGuard 的开发。


如今呢,它开源了,GitHub:https://github.com/archguard/archguard

它能做点什么?


ArchGuard 按照流行的 C4 架构模型进行分层化的分析。即在 System Context(上下文), Container(容器), Component(部件), Code(代码)四个不同的架构视图上,它们是不同的抽象级别,对应于不同的受众,如团队内开发人员关心代码内的依赖,架构师关心组件、窗口间的依赖。



而在最后的实现形式上,它们是以代码库和文档的形式存在的。ArchGuard 是基于代码的静态分析工具,未来也将基于设计提供这方面的功能。


在 ArchGuard 中,我们需要先创建一系列的系统组件,即要配置好对应的语言和 GitHub 地址,就可以对代码进行扫描。

组件/模块


在组件视图内,我们可以看到单个项目的总体情况,根据对应的代码提交历史,不稳定代码模块:



API 声明和使用情况等:



并通过体量维度、耦合维度、内聚维度、冗余维度、测试维度五大维度对架构进行评估,以及一系列的指标来分析系统的情况:



系统依赖分析:服务地图


注意:这种依赖分析方式,依赖于团队开发人员拥有统一的编码规范。


而针对于微服务来说,ArchGuard 可以自动化地分析不同服务之间的依赖关系,并将这种依赖关系可视化出来:



PS:由于 ArchGuard 过去是微服务架构,合并成单体之后,存在自己调用自己的情况。


同时,系统能帮你自动分析哪些 API 是使用的,哪些 API 是未被使用的(有些 API 暂时分析不到):



当前,ArchGuard 可以支持 Spring、RestTemplate、Axios、UMI-Request 等几种有限的 API 调用识别。

数据库依赖分析:数据库地图


注意:这种依赖分析方式,依赖于团队开发人员拥有统一的编码规范。


针对于数据库间的依赖问题,ArchGuard 可以解析代码中的 SQL 调用,并尝试性将这种依赖关系与不同的微服务相匹配,进而分析哪些服务在数据库层是耦合的。由于存在不统一的编码规范,所以有些情况下,我们并没有识别出代码中的数据库表:



通过这种依赖关系,我们可以查看代码中最经常使用的表。再结合我们在代码分析中的功能,就可以查看数据库的调用地图(前端实现中)。

代码分析


对于开发团队来说,它们可以在 ArchGuard 上查看项目的模块、包、类、方法之间的依赖关系:



通过上面的 LoginModuleRepository 就能匹配到数据库对应的结果。

变更影响分析(开发中)


我们正在实现的一个功能是,通过分析和配置系统潜在的代码修改点,进而通过依赖关系,分析出变更的影响范围。它即能帮助架构师分析需求的影响,又能帮助测试人员更精准地测试系统中的内容。

ArchGuard 是如何达成上述功能的?


ArchGuard 内置两个代码分析引擎:Bytecode 分析 + 源码分析。


  • Bytecode 分析。顾名思义,就是通过分析 JVM 中的字节码,从而分析出代码中的依赖关系

  • 源码分析。即通过分析生成编译语言的语法树,产出特定的数据结构


源码分析主要是静态分析,结合先前在重构自动化开源组织 Modernizing 下开源的 Chapi 代码分析引擎。Chapi 基于 Antlr 实现的语法分析,支持主流的编程语言:TypeScript/JavaScript、Kotlin、Java、C# 等等。如下表所示:



由于是静态代码分析,所以有些内容并不是非常准确。


再结合 ArchGuard Scanner 中的几个扫描工具将数据流入数据库中:


  • scan_git,分析 Git 提交历史、行数、语言等基础信息

  • scan_jacoco,分析代码测试覆盖率

  • scan_bytecode,字节码分析

  • scan_sourcecode,源码分析(包含 HTTP API 分析、数据库分析)

  • scan_test_badsmell,测试代码坏味道

  • collector_ci,收集 CI/CD 中的历史记录

其它


欢迎加入 ArchGuard 的开发中来,GitHub:https://github.com/archguard/archguard

作者简介


Phodal,Thouhgtworks 技术专家。长期活跃于开源软件社区 GitHub,目前专注于编程语言、云研发、架构治理。


黄雨青,Thouhgtworks 架构师。金融行业数字化转型亲历者,致力于以平台架构为核心、架构治理为抓手,构建能够赋能业务的数字化企业架构。


在今年 5 月 12-14 日举办的 QCon 全球软件开发大会(北京站)中,Phodal 和黄雨青老师将带来题为《组织级架构治理的正确落地方式》的精彩分享,他们会现场分析对 ArchGuard 的思考和长远规划,对架构治理感兴趣的你一定不要错过。该议题所在的「云原生微服务架构新趋势」专题,还有来自字节跳动和腾讯的老师,将分别就《微服务从 PaaS 到 Serverless 的演进》和《面向异构技术栈和基础设施的服务治理标准化》进行分享。此外,基础设施运维、大规模集群调度、云原生架构变革、面向资效平衡的架构设计、业务架构等多个热门专题讲师即将集结完毕,点击此处立刻查看详细内容。

2022-04-02 16:546425

评论

发布
暂无评论
发现更多内容

有为而治:平衡吞噬世界的系统之熵

IT民工大叔

莱卡、宾利都在用,英特尔oneAPI渲染工具带来高质量视觉体验

E科讯

GitMaster 更新v1.9.0,支持Gitea,Gist拥抱黑暗模式

neo

gitlab tree gitee GitHub、

从6大应用场景,看边缘计算落地生根

BoCloud博云

容器 边缘计算 PaaS 云平台 博云

华为云会议的前世今生

华为云开发者联盟

直播 云服务 华为云 视频编码 视频会议

微服务架构下,DLI的部署和运维有何奥秘?

华为云开发者联盟

Docker 大数据 Serverless 数据湖 DLI

屏幕共享接入指南

anyRTC开发者

WebRTC 在线教育 直播 RTC

币期权DAPP 8月28日全球同步耀世上线,掀起币圈追捧热潮

InfoQ_967a83c6d0d7

硬核科技:莱克立式吸尘器,引领家居清洁“新态度”

InfoQ_967a83c6d0d7

oeasy教您玩转linux010106这儿都有啥 ls

o

数据挖掘学习指南(转载)

Jackchang234987

数据挖掘 产品经理

柔性电子拥有改变地球的能力吗?

脑极体

LeetCode题解:155.最小栈,使用两个栈,详细注释

Lee Chen

大前端 LeetCode

ShardingSphere简介+实战

云淡风轻

ShardingJDBC

学习Python真的能找到工作吗?

代码制造者

Python 程序员 编程语言 低代码 零代码

mPaaS 客户端证书错误避坑指南

阿里云金融线TAM SRE专家服务团队

开发者的福音,LR.NET模块化代码生成器

Philips

敏捷开发 快速开发 模块化流程 代码质量 .net core

涵盖多场景区块链与政务结合 应用前景广阔

CECBC

区块链 互联网 数字政务

软件开发丨关于软件重构的灵魂四问

华为云开发者联盟

软件 开发者 软件开发 代码 软件重构

温故知新——Spring AOP(二)

牛初九

spring aop ioc

“全球+”浪潮下,企业出海选择合适的“技术船舶”成关键

华为云开发者联盟

网络 华为云 企业出海 网络加速 宽带

MySQL redo与undo日志解析

Simon

MySQL Redo MySQL日志

我也没想到 Springboot + Flowable 开发工作流会这么简单

程序员小富

java 14

新金融分布式架构之SOFAStack解决方案

阿里云金融线TAM SRE专家服务团队

GrowingIO AWS 成本优化之路

GrowingIO技术专栏

AWS 成本优化

不得不了解系列之限流

梦朝思夕

限流

云原生技术采用增加,全球60%后端开发人员都在使用容器 | 趋势分享

BoCloud博云

云计算 容器 云原生 PaaS 博云

全民加速节:动态加速在在线教育应用上的最佳实践

阿里云Edge Plus

在线教育 CDN

CRM企业到底该不该做PaaS?

ToB行业头条

PaaS SaaS CRM

分享一个阿里云轻量级开源前端图编排,流程图js组件——butterfly-dag

InfoQ_39ba186c207f

Java 流程图 flow canvas html/css

【写作群星榜】8.15~8.28 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

国内首个开源架构治理平台 ArchGuard,专治分布式场景下各种不服_架构_Phodal_InfoQ精选文章