前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ArchGuard 架构分析器发布:多语言、跨项目架构数据生成,助力 AI 时代知识挖掘

ArchGuard 架构分析器发布:多语言、跨项目架构数据生成,助力 AI 时代知识挖掘

作者头像
Phodal
发布于 2024-11-22 11:00:59
发布于 2024-11-22 11:00:59
21801
代码可运行
举报
文章被收录于专栏:phodalphodal
运行总次数:1
代码可运行

TL;DR:https://github.com/archguard/archguard

过去的几个月里,我们一直在探索用 AI 辅助跨项目、跨大量微服务的系统的开发。其中一个重要的话题就是,从现有的软件架构去生成知识,文档是落后、多版本的, 只有代码才保留着真相。

ArchGuard 是一个由 Thoughtworks 发起的面向微服务(分布式场景)下的开源架构治理平台。它可以在设计、开发过程中,帮助架构师、 开发人员分析系统间的远程服务依赖情况、数据库依赖、API 依赖等。并根据一些架构治理模型,对现有系统提出改进建议。

在经历了大量的分析与实践之后,我们从 ArchGuard 提取了新的 analyser:Architecture Analyser。与现有的代码、Git、OpenAI、Estimate 等 analyser 相比, Architecture Analyser 是一个集大成者,它集成了其它 analyser 的功能,同时还提供了更多的功能。

生成式 AI 时代的知识汲取

与其说是,AI 时代的架构知识,不如说是 AI 时代的架构知识生成。过去,我们通过分析 API 调用链等,并不能很好的得到业务、架构等信息。而,当我们提供了 相对充裕的信息,如:API 调用链、数据库依赖、消息队列依赖等,就能让 AI 生成出对应的信息资产。

场景 1:领域模型中的领域知识

对于后端代码而言,知识的核心在于其 “领域知识”,即在富血模型、领域驱动设计等一系列技术实践方式中,我们通过领域模型来表达业务逻辑。在不同的语言、 工具和平台中,它们有着各种不同的实现,如:

  • 在胖服务层的 MVC 架构中,我们可以结合数据库表来获取关键的领域知识;
  • 在 DDD 四层架构下,我们可以通过领域模型来获取领域知识;
  • 在采用 Protobuf 的微服务架构中,我们可以通过解析 IDL 文件来获取领域知识。
  • ……

这样一来,我们就可以让结合类名、方法名、字段名等信息,来生成出对应的领域知识。如下结合是 ArchGuard 分析器的输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
上报播放数据,包括应用、客户端、版本、渠道、位置、查询ID、设备ID、会话ID、总时长、播放时长、数据类型、页面和模块。

在下一步中,就可以结合用户的问题来找到对应的匹配代码。

场景 2:从调用链中汲取业务知识

过去,在 ArchGuard 中,我们运行通常 feat-datamap 模块来生成数据库地图。它只能帮我们做一些可视化,由人来判断,潜在的、可能的业务逻辑。而当我们由 ArchGuard 分析完后,就可以让 AI 生成出对应的业务逻辑。

如下是 ArchGuard 分析器的输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
packageName: go-common/app/interface/openplatform/monitor-end/dao
methods: Dao.Groups
sqls: `SELECT id, name, receivers, `interval`, ctime, mtime FROM `alert_group` WHERE id in (0) AND is_deleted = 0`

就可以生成如下的信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
查询未删除的告警组详情,涉及字段包括:ID、名称、接收者、告警间隔、创建时间及更新时间。

在结合由 AI 生成领域词典之后,我们可以得到更准确的描述。但是我的场景之下,只需要这样一个简单的描述,具体可以根据实际情况来调整 prompt。

ArchGuard 架构分析器如何助力分析领域知识?

ArchGuard 架构分析器的本质是对原有的知识进行再提炼,以将专家经验转换为分析工具和数据。再结合 AI 的生成能力,替换传统的人力分析方式,以解决 知识的提取问题。

ArchGuard 的架构模型

既然讨论到架构分析,那肯定就涉及到 ArchGuard 的架构模型。由于当前阶段的 ArchGuard 更多的是开发态的数据分析,所以早期我们采用的是《实用体系软件结构》 中的四层架构:

  • 概念架构。领域特定组件
  • 模块架构。系统、子系统、模块、层
  • 执行架构。进程、任务、线程、客户端、服务器、缓冲区、消息队列
  • 物理架构。文件、目录、链接器库、包、程序库

详细见,我们在 GitHub 的文档:https://archguard.org/concepts 。如下是 IDEA 可视化出来的架构模型:

当然,这个模型还有待进一步优化,比如我们添加的 outboundServicearchitectureStyle,在当前尚还属于一个不太适合的位置。

场景示例:支持策略化的 Code Review

在热门的 Code Review 领域,除了结合 Sonarlint 之外,我们可以基于物理架构来设计多种 review 策略。诸如于:

  • 基于变更频率与行数,来决定 review 的上下文;
  • 基于代码复杂度,来决定 review 的优先级;

不过,考虑到生成式 AI 的局限性,还是有待进一步研究。

ArchGuard 架构分析器的数据来源

ArchGuard 架构分析器的数据来源于我们持续丰富的架构知识库,包括:

  • 在 1.0 版本中,支持的架构度量
  • 在 1.4 版本中,支持了代码中的:代码到数据库调用关系的展示
  • 在 1.6 版本中,支持了对于软件依赖的分析
  • 在 2.0.0 版本中,支持的代码复杂度分析
  • 在 2.0.3 版本中,支持的 OpenAPI 分析
  • 在 2.2.2 版本中,我们提供了对 Protobuf 文件的解析和分析功能,支持自动提取服务、消息、接口等元素,构建服务地图和依赖关系图。
  • ……

随着,越来越多的公司使用 ArchGuard,其数据源也越来越丰富。

如何使用 ArchGuard 架构分析器?

步骤 1:使用 CLI 运行

你可以直接从 GitHub 下载最新的 scanner_cli-2.2.8-all.jar,又或者是通过 shell 来一键安装 ArchGuard 架构分析器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -fsSL archguard.org/install-cli.sh | bash

随后,你可以通过如下命令来运行 ArchGuard 架构分析器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
archguard --language=go --type=architecture --output=json --path=.

(PS:如果你使用的是 jar 包,请使用 java -jar scanner_cli.jar --language=go --type=architecture --output=json --path=.

其中, --language 用于指定语言, --type 用于指定类型, --output 用于指定输出格式, --path 用于指定扫描路径。随后,会输出 0_architecture.json 便是 ArchGuard 分析的架构数据。还可以通过如下命令来上传到远程服务器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
archguard --language=go --type=architecture --output=http --server-url=http://localhost:3000 --path=. --system-id=1

其中的 --output=http 用于指定输出到远程服务器, --server-url 用于指定远程服务器地址, --system-id 是用于指定后端标识。

步骤 2:实现服务端

默认的,ArchGuard 架构分析器默认的路径是 /api/scanner/1/reporting,如你可以使用 curl 来上传数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -X POST -H "Content-Type: application/json" -d @0_architecture.json http://localhost:3000/api/scanner/1/reporting

对应的,只需要在服务端实现对应的接口即可。

总结

复杂的问题得回归复杂的本源:软件架构。ArchGuard 架构分析器的发布,是我们对于软件架构的一次尝试。我们希望通过 ArchGuard 架构分析器,让 AI 能够更好的理解软件架构,从而更好的生成软件知识。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 phodal 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AutoDev 预上下文引擎:预生成代码语义化信息,构建 AI 编程的知识基座
我们在 AutoDev Workbench 中实现了这一概念的分析端与后端,对应的分析侧即 AutoDev Context Worker。你可以使用这个工具, 对你的代码仓库进行上下文生成:
Phodal
2025/06/08
520
AutoDev 预上下文引擎:预生成代码语义化信息,构建 AI 编程的知识基座
AI 友好架构:AI 编程最佳范式,构建 10x 效率提升的代码库(万字长文)
生成式 AI 在你的代码库上工作不好存在诸多原因,其中一个就是:你的代码库不够 AI 友好。而除了 AI 不友好之外,它存在的另外一个问题就是:对于人类来说也不友好。工作于代码库的团队没有保持一致的规范与最佳实践,导致了代码库的可读性差、可维护性差、可扩展性差等问题。
Phodal
2025/04/30
2080
AI 友好架构:AI 编程最佳范式,构建 10x 效率提升的代码库(万字长文)
架构赋能 AI:知识工程推动下的软件架构数字化
TL;DR:我们试验了将 AI 应用到基于 Protobuf 的微服务架构中,基于 ArchGuard 治理平台、Shire AI 助手、Team AI 三个工具中,构建了一套完整的 AI4SE 原型,在需求、设计、开发、测试和运维等阶段,这里是我们的思考和实践。
Phodal
2024/11/22
2730
架构赋能 AI:知识工程推动下的软件架构数字化
架构即代码:编码下一代企业(应用)架构体系
架构即代码,是一种架构设计和治理的思想,它围绕于架构的一系列模式,将架构元素、特征进行组合与呈现,并将架构决策与设计原则等紧密的与系统相结合。 如我的上一篇文章《为“架构”再建个模:如何用代码描述软件架构?》中所说,要准确描述软件的架构是一件颇具难度的事情。仅就实现的层面来说,也已经很难通过一个标准模型来让所有人达成一致,“哦,这就是架构”。也因此,在无法定义架构的情况下,也很难无法给出一个让所有人信服的架构治理模型。毕竟:模型只有合适的,永远没有对的。 ( 示例代码见:https://github.com
Phodal
2022/05/16
5860
架构即代码:编码下一代企业(应用)架构体系
规范即治理函数:LLM 赋能的软件架构治理与架构设计
在我们设计架构治理平台 ArchGuard 2.0 的架构时,一直在强调的点是:基于规范 + 模式的工具化。简单来说,规范是架构设计的共时,也是架构知识的显性化。所以,在让 AI 设计架构时,规范是我们要考虑的第一要素,第二要素是:基于现有实现地设计。
Phodal
2023/08/11
6091
规范即治理函数:LLM 赋能的软件架构治理与架构设计
如何理解:业务架构、应用架构、数据架构、技术架构与系统和复杂度
👉目录 1 关于系统的理解 2 关于架构的理解 3 关于复杂的理解 4 后记 体系化地看待系统,高维地抽象业务,有效地进行建模,是制约程序员从码农到架构师的能
腾讯云开发者
2024/06/27
4.8K0
如何理解:业务架构、应用架构、数据架构、技术架构与系统和复杂度
为“架构”再建个模:如何用代码描述软件架构?
在架构治理平台 ArchGuard 中,为了实现对架构的治理,我们需要代码 + 模型描述所要处理的内容和数据。所以,在 ArchGuard 中,我们有了代码的模型、依赖的模型、变更的模型等,剩下的两个核心的部分就是架构的模型、架构的治理模型,其它的还有诸如构建的模型等,会在后续的过程中持续引入到系统中。 PS:本文里的架构展开是基于自动化分析需求的,模型也是基于这个动机出发的。 架构是什么?? 对单个语言的代码建模并不难,对于一个语言有特别的概念,如 package、class、field、function
Phodal
2022/05/06
2870
为“架构”再建个模:如何用代码描述软件架构?
参加QCon 2025全球软件开发大会及个人演讲《开放AI时代的企业架构标准及架构思维2.0》内容回顾
InfoQ主办的2025年全球软件开发大会QCon于2025年4月10日至12日在北京成功落下帷幕。本次大会的主题是“大模型正在重新定义软件”,来自于国内外的150多位专家学者们围绕大模型、AI基础设施、AI时代的存储、AI重塑企业搜索、多模态应用、AIOps、大模型安全、AI驱动BI、企业上云、可观测性、云上成本优化、平台工程、前端发展、数据湖、企业架构创新、AI驱动模式创新、AI驱动工程提效、海外AI创新、AI创新和创收、AI驱动组织管理创新和人才、技术出海等专题做了演讲。我也受邀参加了“数字化转型中的企业架构”专题,做了“开放AI时代的企业架构标准及架构思维2.0”的演讲分享,并临时充当了这个专题的出品主持人主持了这个专场的分享活动。
企业架构师思维
2025/05/30
1240
参加QCon 2025全球软件开发大会及个人演讲《开放AI时代的企业架构标准及架构思维2.0》内容回顾
国内首个开源架构治理平台 ArchGuard,专治分布式场景下各种不服
过去的 10 年间,软件的架构发生了巨大的变化,从早先流行的单体 MVC 架构,变成现成 5:5 开的分布式 vs 单体。只是呢,有大量的软件开发人员,并没有从单体的思维转成变化。于是,我们在一个个的组织里,见到了一个又一个的 “分布式单体”。 架构治理变得非常迫切。 Why ArchGuard? 作为一个架构师或者是软件开发人员,在架构治理上,我们面对的诸多挑战有: 设计与实现不匹配。设计的软件架构与真正实施后的架构,存在着巨大的差异。而这个差异,往往需要实施一段时间之后才能发现。 代码量巨大,难以识别。
Phodal
2022/04/02
6760
国内首个开源架构治理平台 ArchGuard,专治分布式场景下各种不服
LLM 与架构新纪元:适应代码生成模式,突破软件开发瓶颈
TL;DR 版本: http://mpvideo.qpic.cn/0bc3luaawaaaxeaf7qnkozsfaxodbnoqacya.f10002.mp4? 今年 2 月,我们在 QCon 上分
Phodal
2023/08/11
6790
LLM 与架构新纪元:适应代码生成模式,突破软件开发瓶颈
架构孪生:架构的数字化形态???
PS:我们本无意于创造一个新的概念,只是在探索如何更好的度量架构的过程中,发现借用于已有的成熟模式,可以让这件事情变得更简单。
Phodal
2023/01/04
2970
架构自治服务:构建数据驱动的架构洞察
架构自治服务是一种面向架构分析领域的数据自助服务。它提供了一种集成一体的数据分析方案,让开发人员、架构师、管理者等可以根据不同任务,自由搭配、组合出适用于自身洞察需求的任务/函数。 最近,刚好看到两本书名非常有意思的书:《持续 API 管理》、《数据自助服务实践指南》,前者书的内容对不起大纲,后者书的标题对不起内容 —— 内容是好内容,但是标题不对。原书的标题是《The Self-Service Data Roadmap》,重点在于介绍各种数据自助服务的模式和路线图。 回到正题上来,这两本书的书名让我开始思
Phodal
2022/06/27
5670
架构自治服务:构建数据驱动的架构洞察
系统架构 | 软件架构的一致性
在Brooks的力作《设计原本(The Design of Design)》一书中,提及“一致性”对软件的重要性。他认为:“一致性应该是所有质量原则的根基。好的架构应该是直接的,人们掌握了部分系统后就可以推测出其他部分”。这种所谓“窥一斑而知全豹”的要求,实则是要求保持风格的一致性。 风格的一致性 许多软件公司都会根据自身情况并结合业界规范制定符合本公司情况的编码规范。例如对命名、格式等诸多风格的要求。这种编码风格的一致性是相对容易实现的。Brooks提到的一致性,更多地是体现架构风格的一致性。那么,什么是
张逸
2018/03/07
2.1K0
系统架构 | 软件架构的一致性
开源 AI 研发提效方案 Unit Mesh 总结
回顾 2023 年,可以明显地看到生成式 AI 带给软件工程带来的新思考,每个组织也在探索结合生成式 AI 的可能性。Unit Mesh (https://github.com/unit-mesh) GitHub 组织正是基于我与我的同事的研究,所构建的一系列围绕于生成式 AI 应用于软件研发的开源项目。
Phodal
2023/12/19
8320
开源 AI 研发提效方案 Unit Mesh 总结
软件开发工业化:架构语言 Fklang 对下一代架构设计的探索
过去的几个月的业余时间里,一直在设计一个名为 Fklang ( https://github.com/feakin/fklang )的架构 DSL,以 DDD(领域驱动设计)为指导思想构建,除了完成 MVP 原型的编译器与代码生成,还可以使用 Jetbrains IDE 开发(搜索 Feakin)。
Phodal
2023/01/04
5500
软件开发工业化:架构语言 Fklang 对下一代架构设计的探索
【愚公系列】软考高级-架构设计师 101-系统架构评估
系统架构评估(System Architecture Evaluation)是一种系统化的方法,用于分析和评估软件系统的架构设计,确保其满足预期的质量属性和需求。
愚公搬代码
2024/08/11
8660
LLM 优先的软件架构:源自 ArchGuard Co-mate 的四个基本设计原则
在优化 ArchGuard 的 AI 辅助架构治理工具 Co-mate 的架构时,发现有一些模式与之前设计 AutoDev、ClickPrompt 等颇为相似。便思考着适合于 ArchGuard Co-mate 的架构设计原则是什么,写下了初步的三条原则。
Phodal
2023/08/11
6700
LLM 优先的软件架构:源自 ArchGuard Co-mate 的四个基本设计原则
DDD领域驱动设计落地实践系列:初识DDD
笔者在经历的很多项目中都使用了DDD领域驱动设计进行架构设计,尤其是在业务梳理、中台规划以及微服务划分等方面,DDD是重要的架构设计方法论,对平时的架构设计有非常好的指导作用。从本文开始笔者将通过一系列的文章阐述自己对于DDD的理解以及如何在项目实战中落地实践DDD。本文作为系列文章的开端,主要和大家聊聊DDD的一些基本概念以及使用背景。
慕枫技术笔记
2023/03/20
6110
DDD领域驱动设计落地实践系列:初识DDD
康威定律:AI 时代的 IT 组织变革
据调查报告(见文末链接),在 GitHub Copilot 发布的头 6 个月,在美国的开发人员有 92%拥抱采用了它或者同类生成式 AI 工具进行编码开发。可见码农天然的人皆有“偷懒”之心 - 如果更快、更高质量的炮制出一些代码,少掉几根头发,有什么不好呢?
海岛船长加西亚
2024/01/10
3000
康威定律:AI 时代的 IT 组织变革
关于架构的认知
很多领域都要求从业人员具备整合能力,程序员也不例外,相信很多猿友们在接收项目或者任务的时候,总会被要求给出一份详细的技术方案或者设计思路,这毫无疑问需要我们输出大量的构思“图纸”,就像建筑行业的设计图纸一样。
lincoln
2022/08/07
3070
关于架构的认知
推荐阅读
相关推荐
AutoDev 预上下文引擎:预生成代码语义化信息,构建 AI 编程的知识基座
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验