Encore Flow 架构图:基于 Encore 自动生成实时微服务架构可视化

Encore Flow 架构图:基于 Encore 自动生成实时微服务架构可视化 Encore Flow 架构图基于 Encore 自动生成实时微服务架构可视化【免费下载链接】encoreThe infrastructure platform for the intelligence era项目地址: https://gitcode.com/GitHub_Trending/encor/encoreEncore Flow 是 Encore 内置的可视化工具能够基于应用元数据自动生成整个系统鸟瞰图让开发者随时掌握微服务之间的依赖关系与协作方式。无论是本地开发还是云端环境Flow 都会随着代码变更与部署实时刷新帮助你定位瓶颈、加速新人上手、发现热路径。读完本文你将掌握 Flow 的图表语义服务框、依赖箭头、Pub/Sub 虚线、依赖高亮交互以及它与源码级元数据meta.proto之间的对应关系。什么是 Encore FlowFlow 是一个可视化工具为你提供始终保持最新的整个系统视图帮助你思考微服务架构、识别哪些服务互相依赖以及它们如何协同工作。它不是一个静态的架构图生成器而是随代码演进、随部署刷新的活架构图。Flow 解决的核心痛点是架构图一旦由人工维护就必然滞后于代码。Encore 的编译器在解析应用时会把服务、API、数据库、Pub/Sub 主题等声明收集成一份结构化元数据即meta.DataFlow 直接从这份元数据渲染图形因此图上展示的内容与真实代码始终一致。从当前仓库的 meta.proto 可以看到Encore 为每个应用版本生成的元数据Data包含svcsService—— 所有服务及其 RPC、数据库、对象存储用量pubsub_topicsPubSubTopic—— 应用声明的所有 Pub/Sub 主题含发布者Publisher与订阅者Subscription信息sql_databasesSQLDatabase—— 服务连接的数据库auth_handler、cron_jobs、middleware、cache_clusters、metrics、buckets等。Flow 渲染图就是这份元数据的图形化表达每个服务是一个框每个 Pub/Sub 主题也是一个框箭头表示依赖。在下面的示例中login服务依赖user和authentication两个服务Encore Flow 架构总览login 依赖 user 与 authenticationpayment 发布 payment-madeemail 订阅该主题鸟瞰视角Birds-eye view能够对系统进行缩放后退式的全景观察在整个开发周期的几乎所有环节都极具价值。Flow 可以帮助你在瓶颈发展成大问题之前定位它们。依赖集中在某一个服务上、某个服务被大量调用等模式在鸟瞰图中一目了然让新团队成员更快上手。一张准确、实时的架构图比阅读上百个文件更直观地传达这个系统长什么样定位系统中的热路径hot paths。流量密集、可能更需要额外关注的服务会从图中浮现出来。服务和 Pub/Sub 主题用方框表示箭头表示依赖关系。在上面的示例中login服务对user和authentication服务存在依赖虚线箭头表示对某个主题的发布publication或订阅subscription。这里payment服务向payment-made主题发布消息email服务订阅了该主题。图表语义与元数据的对应Flow 中的每一类图形元素都能在当前仓库的元数据定义中找到对应结构图中元素含义元数据来源实线方框服务ServiceData.svcs见 meta.proto实线箭头服务间 RPC 调用依赖Package.rpc_calls服务包内调用的 RPC 列表见 meta.proto黑色方框Pub/Sub 主题TopicData.pubsub_topics见 meta.proto虚线箭头对主题的发布/订阅PubSubTopic.publishers/PubSubTopic.subscriptions见 meta.proto数据库连接服务对数据库的查询Service.databases与Service.migrations见 meta.proto从源码结构看Encore 的解析器会为每个Package记录其调用的全部 RPCrpc_calls这是 Flow 绘制服务间依赖箭头的关键数据只要代码中出现跨服务的apiCall解析器就会记录这次调用Flow 随即在图中画出对应箭头。类似地PubSubTopic中的Publisher发布者所在服务和Subscription订阅者所在服务直接决定了哪些服务与主题之间应该绘制虚线箭头。正因如此Flow 图中的依赖关系不是由人工维护的而是源码中真实调用关系的投影。高亮依赖关系将鼠标悬停在某个服务或 Pub/Sub 主题上即可瞬间揭示其依赖的性质与规模。这在分析某个服务到底依赖了什么时非常高效Encore Flow 依赖高亮login 查询数据库、调用 user 的两个端点与 authentication 的一个端点在上面的示例中login服务及其依赖被高亮显示。我们可以看出login对数据库发起查询调用user服务的两个端点发起两个请求调用authentication服务的一个端点。悬停交互把鸟瞰图从整体结构图升级为依赖分析器——你不需要逐个翻阅代码就能快速回答这个服务会影响到谁、又受谁影响这样的问题。依赖高亮的源码依据这种粒度的高亮信息来自元数据对 RPC 的完整刻画。在 meta.proto 中每个RPC都携带了service_name—— 该端点所属的服务name—— 端点名称access_typePRIVATE / PUBLIC / AUTH—— 端点的访问方式path与http_methods—— 端点的路由与 HTTP 方法request_schema/response_schema—— 请求与响应的类型结构。结合Package.rpc_calls某个包调用了哪些 RPCFlow 就能把login 调用了 user 的哪个端点这类关系精确还原到图上并在悬停时展示出来。此外pubsub.md 中定义的new Topic声明会被解析进PubSubTopic结构其Subscription记录了订阅所在的服务因此悬停一个主题时Flow 同样能展示完整的发布者/订阅者清单。实时更新Flow 可以在两个位置访问本地开发在 本地开发仪表盘Local Development Dashboard 中访问云端环境在 Encore Cloud 仪表盘中访问针对部署到云端的应用。本地开发随代码变更实时刷新本地开发时Flow 会在你修改代码的同时自动实时更新以反映最新的架构。这让你时刻留意重要的依赖关系并且在引入新依赖时立刻感知到——新增一个apiCall、新增一个 Pub/Sub 订阅图表都会立即变化。下面视频演示了在user服务中先引入、再移除payment-made主题上一个新订阅时Flow 图表的自动更新过程视频资源位于仓库 docs 资产目录assets/docs/flow-auto-update.mp4。本地 Flow 的实时性根植于 Encore 本地运行机制的实时重载能力。在 cli/daemon/dash/dash.go 中可以看到Dashboard 服务器实现了run.EventListener接口当本地进程发生编译、重载、停止等事件时会通过process/reload、process/compile-start、process/stop等 JSON-RPC 通知推送最新状态给前端而应用元数据meta.Data由 resolveAppMeta 优先从正在运行的实例获取、否则回退到最近一次缓存的解析结果。换言之每次代码变更触发重新解析后新的元数据就绪Flow 便能基于它重绘整个架构图。启动本地开发环境并打开仪表盘的方式如下来自 dev-dash.md$ encore run API Base URL: http://localhost:4000 Dev Dashboard URL: http://localhost:9400/hello-world-cgu2运行encore run后仪表盘通常会自动在浏览器中打开也可以跟随终端输出的 Dev Dashboard URL 手动访问。仪表盘中的 Service Catalog、分布式追踪 等特性与 Flow 一样都会随代码变更实时更新。云端环境每次部署自动刷新对于云端环境Flow 会在每次部署后自动更新。由于 Encore Cloud 会在部署时重新生成并保存应用元数据Flow 图中的服务、端点、Pub/Sub 拓扑会与最新部署的版本保持一致无需任何手工同步操作。一个可复现的示例事件驱动架构在 Flow 中的呈现为了直观理解 Flow 的图表语义可以参照仓库自带的 TypeScript 示例应用e2e-tests/testdata/tsapp。该应用包含service1与service2两个服务每个服务目录下都有encore.service.ts—— 通过new Service(...)声明服务api.ts—— 定义该服务的 API 端点api.test.ts—— 端点测试。运行encore run后Flow 会把这两个服务渲染为两个方框只要service1的代码中调用了service2的端点图中就会出现一条从service1指向service2的实线箭头。如果再声明一个new Topic并让某服务发布、另一服务订阅参考 pubsub.md 的signups.publish与订阅示例主题就会以独立方框出现在图中并以虚线连接发布者与订阅者。这正对应 meta.proto 中Package.rpc_calls与 meta.proto 中PubSubTopic.publishers/subscriptions的语义图上画什么取决于代码里声明与调用了什么。最佳实践与注意事项把 Flow 当作日常开发工具而非事后归档本地开发时实时留意 Flow 图新增依赖、引入新的主题订阅时确认它们符合你的架构预期在团队 onboarding 中直接使用 Flow用鸟瞰图替代冗长的架构文档宣讲配合悬停高亮讲解依赖关系能让新人更快建立系统心智模型关注热路径与瓶颈高亮某个服务时留意其依赖数量与规模集中承载大量依赖的服务往往是性能优化或拆分可参考 break-up-monolith.md 中的思路的首选对象理解图上内容元数据这一事实Flow 只呈现 Encore 解析器从源码中收集到的信息因此正确的文档注释与清晰的命名会让 Flow 图对团队更有价值云端 Flow 以部署为单位更新需要查看最新架构时请确保已触发一次新的部署而非依赖本地未提交的代码。小结Encore Flow 用一张实时、交互的架构图把系统长什么样、谁依赖谁这一贯穿整个开发生命周期的问题变得一目了然。它以 Encore 编译器生成的元数据meta.proto为唯一事实来源因此永远不会与代码脱节本地开发时随每一次代码变更即时重绘云端部署时随每一次部署自动刷新。结合悬停高亮的依赖分析Flow 在瓶颈定位、新人上手、热路径识别等场景中都能发挥直接价值是 Encore 可观测性体系中不可缺失的一环。如需进一步了解 Flow 所处的完整可观测性生态可以继续阅读 dev-dash.md本地开发仪表盘、tracing.md分布式追踪与 service-catalog.md服务目录与自动 API 文档。【免费下载链接】encoreThe infrastructure platform for the intelligence era项目地址: https://gitcode.com/GitHub_Trending/encor/encore创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考