Reality:让你的架构图真正活起来

说句实话,你上一次真正信任自己的架构图,是什么时候?

任何一张图都只在一个瞬间是正确的——就是有人把它画出来的那天。然后生产环境继续往前跑。一个新服务上线了,数据库加了个副本,某人深夜十一点接上了一条新队列。图却纹丝不动。半年之后,它成了一件博物馆藏品:精美、详尽,却悄悄地全错了。

图纸和生产环境之间的这道裂缝,正是故障藏身之处,是新人上手翻车的地方,也是那句"等等,到底是_什么_在连支付数据库?"在最糟糕的时刻被问出口的原因。

今天,我们要把这道裂缝补上。来认识一下 Reality

看见真正在运行的东西

Reality 接入你的在线生产系统,发现那里真正存在的一切——服务、数据库、依赖关系——再把它们和你精心维护的 C4 模型一一对齐。你的架构图不再是一张快照,而是变成一面镜子。

打开 Reality(现实视图)这盏灯,画布就活了过来:那些背后确实有东西在生产环境运行的元素,会亮起一个实时的健康状态圆点。而那些生产环境正在做、你的模型却从来不知道的事情呢?它们也会浮现出来,等着你决定该拿它们怎么办。

用你自己的数据源

你大概率已经在跑 Reality 所读取的那些工具了。不用装新的 Agent,不用接 exporter,也不用往代码里埋点:

  • Kubernetes —— 给一个只读 token,Reality 就会枚举你的工作负载,并直接从集群配置里发现它们之间的连线。
  • Datadog —— 把它指向你的 APM 服务地图,你就拿到了真实的依赖图,连 Datadog 已经替你推断出来的数据库和队列都一并带上。
  • New Relic —— 读取你的 APM 与 OpenTelemetry 服务,以及它们之间的调用关系。

在组织里接一次数据源,所有项目都能用。手里有好几种?三个一起跑。一个都不想用、只想守着模型?没问题——Reality 在你需要它的时候才出现。

先发现,再决定——没有任何事情会在你背后发生

下面这一点才是关键:Reality 绝不碰你的生产系统,也绝不会擅自改动你的架构。

扫描是只读的。它找到的一切都只是一份_提案_。生产环境里跑着一个你架构图上没有的新服务?Reality 会把它呈现出来——你可以选择 promote(提升)把它纳入模型、bind(绑定)把它挂到一个已有元素上,或者 ignore(忽略)它。发现了两个服务之间真实存在的依赖?提升一下,它就会被画成一条关系线。你的模型始终是你的;每一处改动都由你批准,而且一切都可撤销。

这一切被组织成一个简洁的收件箱:

  • Unmodeled(未建模)—— 正在生产环境运行,但还没出现在你的地图上。
  • Drifted(已偏移)—— 在你的地图上,但生产环境已经跟它分道扬镳。
  • In your model(已在模型中)—— 确认匹配的部分。
  • Orphan(孤儿)—— 在你的地图上,但生产环境里哪儿都找不到。

把这份列表逐条处理完,你的架构图就会一步步逼近真相。

为什么这会改变一切

一张你信得过的图,是一件完全不同的工具。新工程师看到的是真实存在的东西,而不是某人_本打算_搭建的东西。评审能抓出那次没人记录在案、对支付数据库的调用。"这个还在用吗?"这个问题终于有了答案。而且因为每条关系都带着它的来源——是从真实遥测数据中_观测_到的,还是从配置里_推导_出来的——你能清楚地知道每条连线该信几分。

这只是活体架构图(living diagram)的开端:架构跟着生产环境一起前进,而不是被它甩在身后。

上手试试

打开任意一个项目,点工具栏里的 Reality,接上一个数据源,然后扫描。几分钟内,你就能看到自己真实的架构与模型对账完成的样子——而且你多半会发现一两个你早忘了还在跑的东西。

完整操作指南见 Production Reality 文档。去看看你的生产环境到底在干些什么吧。