电商ERP架构实践

Tip

除心跳接口使用GET外,业务接口统一使用POST方式调用(兼容系统使用者的各种骚操作,如:查询参数一大堆)

项目名 业务域 备注
analysis 大数据计算 默认只有这个项目可以使用连表操作,其他项目make生成Repository单表操作代码
BI 商务智能(Business Intelligence) 采购分析、运营策略
common 基础配置 系统控制,基础数据,规则
downloads 下载中心 C
A B C
A B C
  • financial 财务系统
  • goods 商品系统
  • instant-kill 秒杀/闪购 系统
  • listing 刊登系统(商品展示)
  • monitor 监控系统
  • notice 通知系统
  • oms 订单系统(order)
  • pms 采购系统(purchase)
  • Promotion 促销系统
  • report-form 报表系统
  • uc 用户中心
  • wms 仓库系统(warehourse)

分层

  • 网关层
  • 路由-权限中间件
  • 控制器(区分web、api、auth、inner目录)
  • 控制器调度(Request参数校验、Service处理业务、统一的返回格式、异常处理)

    Request参数校验 只校验数据格式

    默认参数填充

    Response 返回统一的(code、data、msg; 集中定义错误码)

  • Service 层调用 Repository 读取数据、更新数据 分离

    事务处理

    日志记录

  • Repository 层调用 Model 操作数据库

    定义通用方法,提升复用性

  • Model 层只做数据映射和字段定义

前端入口

网关校验

  • 签名算法

子系统

  • 前后端严格分离,解耦
  • 上传由前段把文件转为base64编码,加签传递给后端
  • 后端处理完上传,返回文件url给前段
  • 后端异步处理文件导入,在打入结果页展示结果和失败原因
  • 下载由后端处理数据生成下载文件,发送文件url给前端

系统间调用

  • 外部(前端)调用 子系统 验签
  • 子系统之间调用 使用网关验证 或 (token + IP)验证

  • 外部调用接口,在接口内部指定查询字段
  • 内部调用接口,可在参数中指定查询字段

  • 外部调用,通过登录中间件,统一设置 loginUser 数据
  • 内部调用显式传递 loginUser 数据

技术方案

数据报表

Tip

报表系统设计:

同一套业务数据不同维度的报表,只设计一套定时脚本

按最多维度(最细粒度)分析,入库到 analysis_base_业务名 表中

不同维度的聚合数据,用不同页面展示;通过 基础分析表 清洗出聚合数据,存到对应表中(支持分页,排序)

  • 本库数据统计报表,非工作时间直接计算即可
  • 跨库数据统计报表(非实时),可同步到汇总计算专用的库里指定时间计算
  • 跨库实时时数据查询使用ES实时统计热数据

自动配置

Tip

开关控制:启用、停用

处理脚本:判定开关,定时执行,避免锁表、争用s自动处理数据:区分不同条件对应的策略,事务提价

日志:记录明细过程、数据

缓存

  • 优先读redis,其次读数据库
  • 如果redis没有数据,数据库有,则更新数据到redis
  • 如果数据库数据变更,则更新数据到redis (权衡时效性 与 缓存穿透)