项目背景与目标:企业的经营数据、生产数据分散在多个业务库和数仓里,管理层想看整体情况只能等数据部门每周出一份 PPT,数据滞后、维度固定,开会时临时想换个口径就答不上来。本项目目标是搭建一套可视化分析大屏平台,把多数据源统一接入,让业务方自己拖拽配置就能做出实时刷新的大屏,决策数据从「每周更新」变成「秒级可见」。
核心功能:(1) 多数据源接入,支持 MySQL / PostgreSQL、ClickHouse 数仓、Kafka 实时流、第三方 REST 接口和 Excel 文件导入;(2) 拖拽式大屏编辑器,左侧组件库、中间画布、右侧属性面板,图表组件开箱即用,全屏适配 1920×1080 并自动等比缩放;(3) 实时数据推送,基于 WebSocket 长连接让大屏数据秒级刷新,无需手动刷新页面;(4) 指标与缓存体系,常用维度预聚合、结果进 Redis 缓存,大屏首屏渲染稳定在 1 秒内;(5) 内置经营分析与设备监控等多套大屏模板,覆盖业务与生产两类场景;(6) 数据源权限与访问控制,不同角色只能看到授权范围内的大屏。
业务流程:管理员配置数据源 → 在编辑器中拖拽组件、绑定数据字段、设置刷新方式 → 保存并发布大屏 → 服务端统一查询接口从数仓或缓存取数 → 通过 WebSocket 推送到大屏 → 大屏实时渲染并自适应各种分辨率。
整体架构与设计思路:系统采用五层架构。数据源接入层统一对接业务库、数仓、消息流、第三方接口和文件;数据处理层负责清洗、指标计算、预聚合与缓存,把复杂计算前移,避免大屏查询时做重计算;服务层提供统一查询接口、WebSocket 实时推送、大屏配置存储和权限控制;展示层是大屏渲染引擎、ECharts 组件库、拖拽式编辑器和多屏适配;部署层用 Docker Compose 编排、Nginx 做静态资源与反向代理。核心设计原则是「配置与数据分离」:大屏的布局和组件配置独立存储,所有图表通过统一的数据描述协议向服务端取数,因此新增一种图表只需要实现渲染组件,不需要改动后端。
我个人负责的部分:独立完成整体架构设计、数据服务层与前端大屏引擎的核心开发。具体包括:设计统一查询接口与数据描述协议,让不同数据源的取数方式对前端完全透明;实现预聚合 + Redis 缓存的取数链路,把经营大屏首屏加载从 6.8 秒优化到 0.9 秒;实现 WebSocket 实时推送,支持多客户端订阅同一数据通道,数据变更秒级下发;实现拖拽式编辑器的组件注册机制、画布缩放与布局持久化,新增图表类型只需注册一个组件;实现 1920×1080 基准的大屏等比自适应方案,同一套配置可直接用于大屏、PC 和移动端;落地经营分析与设备监控两套模板;用 Docker Compose 把全部服务做成一条命令部署。
遇到的难点及解决方案:一是大屏首屏加载慢,因为每次刷新都实时聚合上千万行数据,通过按常用维度预聚合 + Redis 结果缓存 + 前端骨架屏解决,首屏从 6.8 秒降到 0.9 秒;二是数据要「实时」但又不能把数据库压垮,通过 Kafka 消费增量更新缓存、大屏只读缓存而非直连库解决,数据库压力明显下降;三是不同分辨率的屏幕展示错位,通过以 1920×1080 为基准的设计稿加 transform 等比缩放方案解决;四是拖拽编辑器的组件扩展成本高,通过统一注册机制与配置化属性面板,把新增图表的开发量压缩到只写渲染逻辑。