架构自治服务:构建数据驱动的架构洞察

Posted Phodal

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构自治服务:构建数据驱动的架构洞察相关的知识,希望对你有一定的参考价值。

架构自治服务是一种面向架构分析领域的数据自助服务。它提供了一种集成一体的数据分析方案,让开发人员、架构师、管理者等可以根据不同任务,自由搭配、组合出适用于自身洞察需求的任务/函数。

最近,刚好看到两本书名非常有意思的书:《持续 API 管理》、《数据自助服务实践指南》,前者书的内容对不起大纲,后者书的标题对不起内容 —— 内容是好内容,但是标题不对。原书的标题是《The Self-Service Data Roadmap》,重点在于介绍各种数据自助服务的模式和路线图。

回到正题上来,这两本书的书名让我开始思考两个问题:1. 如何构建持续的架构治理?2. 如何构建架构的自治服务呢?只有达到自助 + 持续性之后,开发人员才可以实现架构自治。另外一个方面,从数据治理的角度来看,架构治理本身也是数据。而在数据领域,自助服务已经是数据民主化的重要趋势(源自《大数据湖最佳实践》)。这一点可以从流行的 Tableau、Apache Superset 等看到。

为什么我们考虑架构自治服务?

Log4j 的跟踪

我们从 SourceGraph 的 Insight 工具上获得了启发,在这个工具的 Demo 上,它提供了一个 Log4j 版本的趋势跟踪。开发人员可以通过编写表达式,诸如于: >= 1.12.0 的方式来进行数据统计。于是,我们又一次地迎来了 aha 时刻:这不就是在过去的几个月里,诸多 ArchGuard 用户面临的一类痛点吗?对于的 IT 大型组织来说,从治理的层面来说,这种跟踪能提供更高的全局视野。

改变是一种进行时

从一个 “无序” 的状态到一个 “有序” 的时期,都需要一个很长的过程。这种缓慢的过程里,每个人或者组织的应对方式都是不同的,有的是可视化,有的是通过数据。不论采用的是何种方式,它都需要对于进行时的数字化。

最佳实践的局限性

技术专家的日常,总是会向人传播各种 “最佳实践”,那并不是人们所需要的。于多数人而言,他们更想要的是能解决当前的问题,需要的是一种最好的实践。这种实践可能是代码上的实践,分层架构上的实践,边界划分上的实践。除此以外,看上去 “标准化” 的架构度量模型,往往很难以在多数大型组织上适用。

什么是架构自治服务?

启发于《数据自助服务实践指南》,我们便开始探索什么是架构自治服务务。我们称架构治理类型的数据自助服务,称为架构自治服务:

架构自治服务是一种面向架构分析领域的数据自助服务。它提供了一种集成一体的数据分析方案,让开发人员、架构师、管理者等可以根据不同任务,自由搭配、组合出适用于自身洞察需求的任务/函数。

从本质上来说,它是特定领域(即架构)的数据自助服务。作为一个工程师、架构师,我们可以基于我们的领域知识来打造系统。这种领域知识,除了来自于自身的经验,还来自于大量先辈的经验:各种书。

根据这样的思想,我们制定了一个在不同阶段中,ArchGuard 应该处于怎样的状态,即架构自治服务的路线图。

架构自治服务路线图

在架构演进的场景之下,可以以可自定义架构适应度函数作为自动化的目标。按不同的自治服务需求 ,对应有四种对应的模式(由低到高):

  • 探索性数据分析模式。关注理解和总结架构治理所需的数据集,以确定所需的数据整理转换,诸如数据结构、内容、关系是否正确?

  • 领域知识转换模式。将行业内熟知的最佳实践知识,如 SOLID、CUPID 等内化到自助服务中。

  • 分析转换模式。结合架构关注点与可视化分析,通过交互式的方式来整理数据,并转换到流程中,如对于 Log4j 的整改跟踪。

  • 操作洞察模式。从多层指标出发,为数据用户提供一组丰富的可操作集合,它们之间是相互关联的,如架构适度度函数。

从抽象模式上来说,它是结合了领域知识所构建出来的数据自助服务,更多的是集中于数据转换 + 数据搜索的两个核心中。

架构自治服务的示例

还记得开头提到的 SourceGraph 吗,它提供了一种灵活的数据洞见服务。采用如下的方式,就可以跟踪系统的 Log4j 问题:

lang:gradle org\\.apache\\.logging\\.log4j['"] 2\\.(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16)(\\.[0-9]+) patterntype:regexp

由于 SourceGraph 更多的是基于正则分析的,所以需要通过复杂的正则来实现。

在 ArchGuard 是基于 AST + 模型分析的,所以需要基于字段(field)进行过滤:

field:name == /.*log4j/ field:version > 2.17.0

为了提供更好的自助服务,我们需要在平稳灵活性与实用性。在这种情况下,基于正则显然能提供了更强的灵活性。

于是乎,我们便能跟踪起整个组织的 Log4j 的治理情况。

如何实现架构架构自治服务?

从 ArchGuard 的试验,以及我们在数据上的一些经验,实现这样一架构自治服务可以分为四步:

  1. 构建架构治理的数据底座

  2. 抽象数据服务的接口

  3. 揉和 BI 的自助交互分析

  4. 设计指标驱动的架构演进。诸如于设计合理的适应度函数

简单来说,就是数据的自助服务。而对于我们来说,重点便在于如何构建这样的数据底座。

1. 构建架构治理的数据底座

大量的组织内现有的一系列架构(广义上的架构)管理相关的工具:

  • 代码质量控制:SonarQube(部分功能) 、ArchUnit、Jacoco、CheckStyle 等

  • SCA (软件成分分析)分析:JFrog Xray、Black Duck 等

  • 漏洞扫描工具:OpenVAS 等。

  • API 管理:Swagger 等

诸如此类的工具也非常之多,只是呢,很多我也不懂。针对于这一系列的工具,需要进行数据上的打通,以提供一个 “联接共享” 的数据底座。

于是乎,为了达到数据上的自助能力,我们就需要构建数据底座作为基础设施。当然了,在 ArchGuard 里,我们对于这点做得并不好。

2. 抽象数据服务的接口

从定义上来说,对于架构治理,围绕于 ETL + 数据自治服务,我们可以关注于:

  • 数据整理服务。它包含了方方面面的元数据处理,诸如于模型与接入标准化:在 Chapi 底层对于不同语言的数据模型进行抽象,又或者是在 Scanner 底层对于依赖进行抽象。

  • 数据转换服务。让开发人员可以在数据处理的过程中,添加一些特定的业务逻辑。

  • 数据搜索服务。如何简化数据的发现过程,使用关键字、通配符等,并降低处理所需要的耗时。

在整理、转换、搜索三个阶段里,我们都要构建大量的抽象,才能提供数据上的自助服务。在整理上可以模型来抽象,在转换上通过插件化接口来抽象,在搜索上通过 DSL 来进行抽象。

3. 揉和 BI 的自助交互分析

在简单的场景里,我们应该使用现有的 BI (Business Intelligence, 商业智能)工具进行分析。它的前提是,组织内部已经有了成熟的数据体系。如果没有的话,那么我们就要思考着如何达到这样的能力?如何构建这种架构上的数字孪生?

但是,不论如何,构建一个支持自助交互分析的工具也难。

4. 设计指标驱动的架构演进

在《演进式架构》里推荐的适应度函数,依旧是我们推荐的架构治理方式。虽然,书中不会给出明确的定义,但是通过其提供的参考就可以:为每个组织制定适合于自身需求的指标模型。

我们也依旧在思考什么才是合理的模型?怎样才能更好地推进整个组织的架构治理?也欢迎在 https://github.com/archguard/archguard 提出你的想法。

小结

最后,回到 ArchGuard issue(#93 ) 的问题类似:做了这么多,怎么证明能起作用?

也因此,基于这些数据,我们还进行了一些思考,打个比方:基于 AST 与机器学习构建自动升级。当我们有 10 个项目采用了基于 log4j 的内部封装,那么,对于相似的项目是不是直接能以相似的方式进行改进,又或者是生成对应的自动重构 CLI。当我们是一个 1000+ 的团队时,这一类工具带来的收益就会相当的可观。

参考资料:

  • 《大数据湖最佳实践》

  • 《数据自治服务实践指南》

  • 《持续 API 管理》

  • 《演进式架构》

欢迎在后续关注我们在 ArchGuard 实现它(扫码关注):

以上是关于架构自治服务:构建数据驱动的架构洞察的主要内容,如果未能解决你的问题,请参考以下文章

产品架构设计原则

16.凤凰架构:构建可靠的大型分布式系统 --- 向微服务迈进

云数据库架构演进与实践

云数据库架构演进与实践

微服务的数据自治

集成底座与业务系统对接过程梳理