埋点分析系统 - 后端技术架构

📑 目录
  1. 技术栈
  2. API 模块架构
  3. 请求处理链
  4. 数据库连接
  5. 核心文件
  6. 安全措施

埋点分析系统 - 后端技术架构

代码路径:e:\AI工作台\埋点分析系统\backend\


技术栈

组件技术
框架Flask 3.0
数据库驱动clickhouse-driver 0.2.6
生产服务器Gunicorn 23.0 (4 workers)
认证Token-based(内存存储,12h TTL)
缓存内存缓存,5 分钟 TTL
CORSFlask-CORS

API 模块架构

app.py (Flask 入口)
├── before_request → Token 鉴权 + 环境切换
├── auth_bp      → /api/auth       (登录/登出/信息/修改密码)
├── overview_bp  → /api/overview   (KPI/趋势/事件类型/TOP事件/设备/地域)
├── events_bp    → /api/events     (分布/趋势对比/列表/类型枚举)
├── users_bp     → /api/users      (KPI/趋势/设备/来源/OS/网络/活跃用户)
├── screens_bp   → /api/screens    (流转/列表/入口/出口)
├── flow_bp      → /api/flow       (流量概览/新老访客/搜索词/来源网站)
├── elements_bp  → /api/elements   (KPI/热门内容/类型分布/热力图/趋势)
├── detail_bp    → /api/detail     (明细查询/CSV导出/筛选项)
├── retention_bp → /api/retention  (留存KPI/矩阵/曲线)
├── funnel_bp    → /api/funnel     (漏斗分析)
├── channel_bp   → /api/channel    (渠道分析)
└── sysusers_bp  → /api/sysusers   (系统用户管理,@admin_required)

请求处理链

before_request
  → 从 X-Env Header 获取环境
  → 切换 ClickHouse 连接
  → Token 鉴权(白名单: login/health/info)

@cached(ttl=300) 装饰器
  → 5 分钟内存缓存

get_project_filter_params()
  → 注入 project_name IN (...) 过滤

ClickHouse 参数化查询
  → %(param)s 占位符,防 SQL 注入

数据库连接

配置项
协议TCP (端口 9000)
连接池刷新5 分钟
并发控制threading.Lock()
重试机制2 次(首次失败后重置连接)
生产地址114.80.38.24:9000
测试地址192.168.20.147:9000

核心文件

文件功能
app.pyFlask 应用入口,蓝图注册,全局鉴权
config.py多环境配置(生产/测试),环境变量注入
database.pyClickHouse 连接池 + 线程锁 + 重试机制
utils.py工具函数(日期、项目过滤、响应格式、缓存装饰器)
user_store.pySQLite 用户存储(SHA-256 密码哈希)
gunicorn.conf.pyGunicorn 生产配置

安全措施

  • SQL 参数化查询(防注入)
  • Token 鉴权 + 白名单机制
  • @admin_required 保护系统管理 API
  • CORS 限制为指定来源
  • 密码 SHA-256 哈希存储
  • 不能删除/禁用最后一个管理员