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

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 分析器的输出:

0d1e70080cdb78718c5672d6f0bb678b.png

上报播放数据,包括应用、客户端、版本、渠道、位置、查询ID、设备ID、会话ID、总时长、播放时长、数据类型、页面和模块。

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

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

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

c46e1e68fd135edbef4ce63d7a0faf2d.png

如下是 ArchGuard 分析器的输出:

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`

就可以生成如下的信息:

查询未删除的告警组详情,涉及字段包括:ID、名称、接收者、告警间隔、创建时间及更新时间。

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

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

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

ArchGuard 的架构模型

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

  • 概念架构。领域特定组件

  • 模块架构。系统、子系统、模块、层

  • 执行架构。进程、任务、线程、客户端、服务器、缓冲区、消息队列

  • 物理架构。文件、目录、链接器库、包、程序库

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

419e59c5e3faf3c166bb2ece947c527c.png

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

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

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

69050f484edcbf3783e6eb7dd1f7c93d.png

  • 基于变更频率与行数,来决定 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 架构分析器:

curl -fsSL archguard.org/install-cli.sh | bash

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

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 分析的架构数据。还可以通过如下命令来上传到远程服务器:

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 来上传数据:

curl -X POST -H "Content-Type: application/json" -d @0_architecture.json http://localhost:3000/api/scanner/1/reporting

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19024.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

NLP论文速读(多伦多大学)|利用人类偏好校准来调整机器翻译的元指标

论文速读|MetaMetrics-MT: Tuning Meta-Metrics for Machine Translation via Human Preference Calibration 论文信息: 简介: 本文的背景是机器翻译(MT)任务的评估。在机器翻译领域,由于不同场景和语言对的需求差异&a…

工程车识别算法平台LiteAIServer算法定制工程车类型检测算法:建筑工地安全管理的得力助手

随着科技的飞速发展,智能化技术正在逐步改变我们的生活方式,特别是在交通管理和安全管理领域。其中,算法定制LiteAIServer工程车类型检测算法以其高效、准确和实时的特性,成为了建筑工地管理、矿山开采以及物流运输等多个领域的重…

机器学习2

三、特征工程 接机器学习1 4、特征降维 4.2、主成分分析PCA 从原始特征空间中找到一个新的坐标系统,使得数据在新坐标轴上的投影能够最大程度地保留数据的方差,同时减少数据的维度。 保留信息/丢失信息信息保留的比例 from sklearn.decomposition imp…

【Linux之权限】提升篇

前言 在前两篇文章里,我们已经学习了Linux中权限的理论、实践和重点,接下来我们将进一步提升对Linux权限的全面认知。虽是拓展,其实还是重点。 本文内容并不多,那我们就开始吧。 目录的权限该如何理解呢? 如果我想进…

亮数据结合AI大模型,实现数据自由

目录 一、获取网络数据的挑战1、反爬虫机制的威胁2、IP封锁与访问频率控制3、数据隐私与法律合规 二、亮数据动态代理:数据采集的最佳拍档1、高质量IP资源2、智能调度与自动切换3、合规与隐私保护4、多场景应用支持 三、使用亮数据代理 IP进行网络数据抓取1、引入 r…

elasticsearch是如何实现master选举的?

大家好,我是锋哥。今天分享关于【elasticsearch是如何实现master选举的?】面试题。希望对大家有帮助; elasticsearch是如何实现master选举的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…

EtherNet/IP转Profinet网关连接发那科机器人配置实例解析

本案例主要展示了如何通过Ethernet/IP转Profinet网关实现西门子1200PLC与发那科搬运机器人的连接。所需的设备有西门子1200PLC、开疆智能Ethernet/IP转Profinet网关以及Fanuc机器人。 具体配置步骤:打开西门子博图配置软件,添加PLC。这是配置的第一步&am…

Uniapp运行环境判断和解决跨端兼容性详解

Uniapp运行环境判断和解决跨端兼容性 开发环境和生产环境 uniapp可通过process.env.NODE_ENV判断当前环境是开发环境还是生产环境,一般用于链接测试服务器或者生产服务器的动态切换。在HX中,点击运行编译出来的代码是开发环境,点击发行编译…

C语言 for 循环:解谜数学,玩转生活!

放在最前面的 🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼 🎉🎉我的C语言初阶合集:C语言初阶合集,希望能…

【专题】2024AIGC创新应用洞察报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38310 在科技日新月异的今天,人工智能领域正以前所未有的速度发展,AIGC(人工智能生成内容)成为其中最耀眼的明珠。从其应用场景的不断拓展,到对各行业的深刻变革&#xff0…

.NET桌面应用架构Demo与实战|WPF+MVVM+EFCore+IOC+DI+Code First+AutoMapper

目录 .NET桌面应用架构Demo与实战|WPFMVVMEFCoreIOCDICode FirstAutoPapper技术栈简述项目地址:功能展示项目结构项目引用1. 新建模型2. Data层,依赖EF Core,实现数据库增删改查3. Bussiness层,实现具体的业务逻辑4. Service层&am…

两种柑橘物种中WRKY转录因子的鉴定和比较-文献精读82

Genome-wide identification and comparative expression profiling of the WRKY transcription factor family in two Citrus species with different Candidatus Liberibacter asiaticus susceptibility 全基因组范围内鉴定和比较两种对柑橘黄龙病菌(Candidatus …

Kafka中ACKS LSO LEO LW HW AR ISR OSR解析

名称解释 ACKS(Acknowledgments)确认、回执 LW(Low watermark)低水位、LSO(Log start offset)起始偏移量 HW(High watermark)高水位 LEO(Log end offset)…

vue实现展示并下载后端返回的图片流

// 点击下载 downLoadCode() {const image new Image();image.setAttribute("crossOrigin", "anonymous");image.onload () > {const canvas document.createElement("canvas");canvas.width image.width;canvas.height image.height;c…

c++:模板

1.泛型编程 在认识模板之前,我们首先要认识泛型编程 泛型编程是一种编程范式,它使得算法和数据结构能够独立于特定数据类型进行设计和实现。通过使用泛型,开发者可以编写一次代码,然后在不同的数据类型上进行重用,从…

Linux下安装配置redis详细教程,并配置哨兵模式,redis配置文件中文详解

redis版本为redis-3.2.12,使用工具将安装包上传到data目录。 redis.jpeg 在data目录下创建文件夹redis,将redis安装在此目录。 第一步:解压。 cd data tar -zxvf redis-3.2.12.tar.gz第二步:安装,PREFIX/data/redis用…

R语言数据分析案例45-全国汽车销售数据分析(可视化与回归分析)

一、研究背景 随着经济的发展和人们生活水平的提高,汽车已经成为人们日常生活中不可或缺的交通工具之一。汽车市场的规模不断扩大,同时竞争也日益激烈。对于汽车制造商和经销商来说,深入了解汽车销售数据背后的规律和影响因素,对…

Java 网络编程:Socket 与网络通信

1 引言 在古代,由于通信不便利,人们利用鸽子的飞行能力和方向辨识能力,驯化鸽子进行消息传递,即所谓的“飞鸽传书”。在现代计算机网络中,套接字(Socket)扮演了类似的角色。套接字是应用程序通…

编程之路,从0开始:结构体详解

目录 前言 正文 1、结构体引入 2、结构体的声明 3、typedef 4、结构体的匿名声明 5、结构的自引用 (1)链表 (2)自引用 6、结构体内存对齐 (1)对齐规则 (2)题目 &#x…

Flink监控checkpoint

Flink的web界面提供了一个选项卡来监控作业的检查点。这些统计信息在任务终止后也可用。有四个选项卡可以显示关于检查点的信息:概述(Overview)、历史(History)、摘要(Summary)和配置(Configuration)。下面依次来看这几个选项。 Overview Tab Overview选项卡列出了以…