前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何画技术架构图

如何画技术架构图

作者头像
木鸟杂记
发布2022-12-07 08:45:58
1.3K0
发布2022-12-07 08:45:58
举报
文章被收录于专栏:木鸟杂记

知乎上有个问题,如何画架构图?平时做过一些系统设计,也写过一些系统分析文章,从组件、关系、交互等方面提供一些建议,并用我之前写文章画的一些图举些例子。

构成系统的组件

通过形状颜色名称来逼近其概念。

LevelDB 主要构件

如上面 LevelDB 的架构图,包含的主要组件有:

  1. memtable:红色,内存可变数据,较热
  2. immutable memtable:绿色,不可变数据,相对较冷
  3. sstable:深蓝,外存数据,最冷
  4. WAL log

Master-Workers 架构

上图是分布式系统中一种常见的架构模式:Master-Workers 架构[1]。主要组件有:

  1. Master:红色,表示相对较重要
  2. Worker:绿色,都是绿色,表示地位等同
  3. Client:

Zookeeper 论文中架构图

上图是 Zookeeper 论文解析[2]中架构图:

  1. 预处理模块和原子广播模块用圆角矩形
  2. 持久化的多副本状态机模块用圆柱体:存储、数据库等持久化组件的多用柱形。

组件间的关系

通过分割线分割框来表达是否在同一层级、是否有包含关系。

如前面 LevelDB 的图,是分了内存和外存(文件系统)两个层次,因此中间用虚线隔开。

如前面 Master-Workers 架构图,是分了系统内和系统外,用方框隔开。

LevelDB 源码解析之 LRUCache

上图来自LevelDB 源码解析之 LRUCache[3], 在 LRU 算法中,需要用以两种形式组织数据条目,以达到缓存达到阈值时驱逐最老的数据:

  1. 以字典维护键值映射:图中 list_,本质上是一个 HashTable。
  2. 以链表维护访问顺序:图中 lru_ (LRU 算法只作用于驱逐表上,即 refs=1)和 in_use_(还在使用的数据 refs > 1)。

因此任意一个数据条目 LRUHandle 都同时归属于字典和链表,但字典的表头和链表的表头是各自独立的。另外使用不同颜色的框表达了如下的嵌套结构:

代码语言:javascript
复制
class HandleTable {
  LRUHandle** list_;
};

class LRUCache {
  LRUHandle lru_ GUARDED_BY(mutex_);
  LRUHandle in_use_ GUARDED_BY(mutex_);

  HandleTable table_ GUARDED_BY(mutex_);
}

组件间的交互

通过线条来表达组件的数据流向、依赖关系。

golang 中树形组织的 context

上图来自 Golang Context 源码剖析[4],图中通过:

  1. 虚线表达由嵌入(embedded)而构成的回溯链。
  2. 实线表达由 cancelCtx children 数组而保存的父子关系。

最后,想必你也感受到了,一个好的架构图离不开一个好的配色。上述架构图都是用 drawio[5] 画的,配色模板在这里[6],阅读原文即可直达。

我是青藤木鸟,一个喜欢摄影的分布式系统程序员,欢迎关注我的公众号:“木鸟杂记”。等之后我会在博客中加一个页面:按图索文,想想也挺有趣。

参考资料

[1]

Master-Workers 架构: https://www.qtmuniao.com/2021/07/03/distributed-system-1-master-workers/

[2]

Zookeeper 论文解析: https://www.qtmuniao.com/2021/05/31/zookeeper/

[3]

LevelDB 源码解析之 LRUCache: https://www.qtmuniao.com/2021/05/09/levedb-data-structures-lru-cache/

[4]

Golang Context 源码剖析: https://www.qtmuniao.com/2020/07/12/go-context/

[5]

drawio: https://app.diagrams.net/

[6]

配色模板: https://mianbaoduo.com/o/bread/mbd-ZpyamZc=

看到这里,如果你感觉还不错,就点个在看捧个场吧,感谢。

题图故事

北京某立交桥的黄昏

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

本文分享自 木鸟杂记 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 构成系统的组件
  • 组件间的关系
  • 组件间的交互
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档