写点什么

Spotify 如何可视化系统架构图

  • 2022-08-07
  • 本文字数:1178 字

    阅读完需:约 4 分钟

Spotify如何可视化系统架构图

Spotify 的工程师最近分享了他们在公司内部是如何标准化架构图的。他们定义了一种叫作Spotify软件模型的标准系统模型,并采用C4模型来可视化它。这一组合创造了一种可在整个组织中使用的公共语言,有助于沟通、辅助决策,并为 Spotify 的软件开发提供支持。


Spotify 高级工程师 Renato Kalman 和工程师 Johan Wallin 解释了创建这个框架的动机:


架构图是软件设计的基本要素,也是软件开发中沟通和协作的基本工具。在 Spotify,我们拥有一个非常复杂的应用程序网络,数百个团队开发的数千个相互关联的软件系统组成了这个复杂的网络,所以我们需要一种简单的方法来可视化这些复杂的连接。从技术上说,我们可能可以用一个大型的图表来捕获所有的系统,但它会非常难以理解和查看。为了做出好的设计决策,并以可持续的方式开发我们的软件,我们需要一些可以在不同的抽象级别上观察架构的工具。


Spotify 的工程师将软件组件的元数据保存在一个软件目录中。为了支持标准的架构图,他们创建了 Spotify 系统模型,它包含了一组核心实体和抽象,Spotify 工程师可以使用这些实体和抽象来合成有关软件健康状况、所有权和依赖关系的数据。Kalman 和 Wallin 说:“我们相信,一门有关软件和资源的公共语言有助于促进沟通和协作,这对于我们这种规模的公司取得成功至关重要。”


C4 模型是一种轻量级图形符号技术,用于建模软件系统的架构,由 Simon Brown 创建。它将系统分解为容器和组件。在 Spotify,工程师们采用了 C4 模型符号及其最佳实践。不过,他们用 Spotify 系统模型取代了上下文、容器和组件的抽象层。



C4 模型,来源:https://c4model.com/


Spotify 使用Backstage存储软件目录元数据。Backstage 是一个开源平台,用于构建开发者门户网站。这个项目由 Spotify 推动,是 CNCF 的一个孵化器项目。他们利用 Backstage 的可扩展性创建了一个叫作 Architecture 的插件,这个插件可以根据存储在 Backstage 中的 Spotify 系统模型元数据生成 C4 图表。Kalman 和 Wallin 说:“在 Backstage 中存储系统模型元数据对于组件发现、理解软件组件之间的生命周期、所有权和关系,以及自动生成软件可视化图都非常有帮助。”


Spotify 系统模型由几个核心实体组成,包括表示软件组件之间边界的 API、表示单个软件块的组件,以及运行时操作组件所需的基础设施资源。


核心实体之间的关系,来源:https://engineering.atspotify.com/2022/07/software-visualization-challenge-accepted/


随着目录数量的增长,这些组件变得越来越难以理解、审查和相互关联。因此,他们引入了额外的抽象,有助于理解更广泛的软件生态系统。系统是协作执行某些功能的实体的集合,而领域是与部分业务相关的实体和系统的集合。



领域、系统与核心实体的关系,来源:https://engineering.atspotify.com/2022/07/software-visualization-challenge-accepted


原文链接

The Spotify System Model: Automated Architecture Visualization at Spotify


2022-08-07 08:007361

评论

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

极客大学架构师训练营 听课总结 -- 第一课

John(易筋)

极客时间 架构 极客大学 架构师 极客大学架构师训练营

如果我能找到工作,那么你也行

escray

2020.06.04,我在《架构师训练营》的学习历程:架构方法

程序员二师兄

极客大学架构师训练营

ARTS-week1

书生

不同层次格局的差异

kimmking

重学 Java 设计模式:实战桥接模式(多支付渠道「微信、支付宝」与多支付模式「刷脸、指纹」场景)

小傅哥

设计模式 小傅哥 重构 代码质量 桥接模式

有时候爱也是一种负担

小天同学

日常思考 爱情 个人感悟

分布式事务 - 分布式事务框架Seata

Java收录阁

分布式事务

装饰模式——看JDK和Spring是如何杜绝继承滥用的

大头星

Java spring jdk 面试 设计模式

Vue&SpringBoot前后端项目分离构建

夏悸

Spring Boot Vue 大前端

分布式场景之刚性事务-2PC详解

奈学教育

分布式 2PC

原创 | TDD工具集:JUnit、AssertJ和Mockito (十八)编写测试-测试执行顺序\嵌套的测试

编程道与术

Java 编程 TDD 单元测试 JUnit

白话说流——什么是流,从批认识流(一)

KAMI

大数据 flink 流计算

RUST IN BLOCKCHAIN 五月简报

Aimee 阿敏

rust crypto blockchain

不到100行代码的iOS组件化你怕了么?

Geek_i59t1w

ios 组件化 url scheme scheme

自学技术看这些网站就够了!

我是程序员小贱

学习

架构师训练营-第一节

Geek_af3d01

六处提及区块链!海南自贸港区块链产业应用先行,与“币”划清界限

CECBC

区块链技术 海南方案 严控 产业

使用Nginx防止IP地址被恶意解析

Noneplus

nginx 恶意解析

ChaosBlade:从零开始的混沌工程(一)

郭旭东

云原生 混沌工程

9种 分布式ID生成方案,我替你整理好了

程序员小富

Java MySQL 分布式

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

InfoQ写作社区官方

写作平台 排行榜 热门活动

人人都能看懂的 6 种限流实现方案!(纯干货)

王磊

Java 「Java 25周年」 Java 25 周年

初识软件架构

陈皮

Architecture Architect

地摊经济一千年:从《韩熙载夜宴图》到木屋烧烤“撸串”

punkboy

产品经理 商业 新闻动态 新基建 地摊

别再说你不懂Linux内存管理了,10张图给你安排的明明白白

程序员柠檬

Linux 后台开发

我的编程之路 -7(T型人才)

顿晓

T型人才 编程之路

绝对坦诚:打造团队自我进化能力的最佳姿势

伴鱼技术团队

团队管理 企业文化 团队协作 技术管理 文化

ARTS - Week 2

Khirye

ARTS 打卡计划 arts

观察者模式——窥探JDK和Spring中的设计模式

大头星

spring jdk 面试 设计模式 Java 25 周年

CDN百科第三讲 | 如果用了云服务器,还需要做CDN加速吗?

阿里云Edge Plus

CDN

Spotify如何可视化系统架构图_架构_Eran Stiller_InfoQ精选文章