基于 Spring Cloud Alibaba 的分布式企业系统架构实践
在现代化企业管理中,ERP 系统作为支撑财务、人力、供应链的核心,其架构的安全性与性能审计至关重要。本项目(
erp-platform)采用 Java 8 + Spring Cloud Alibaba + Redis + MySQL,构建了一套具备“金融级”防护能力的分布式后台管理体系。
一、 系统架构设计:高内聚与服务自治
系统遵循微服务拆分原则,将复杂的企业业务解耦为独立的服务单元,确保了系统的可扩展性。
模块化分层
**erp-common**:系统底座。统一封装 Redis 操作、JWT 鉴权工具类、全局异常处理及核心配置。**erp-pojo**:全域数据模型。涵盖Staff(员工)、Department(部门)、PurchaseOrder(采购单)等 DTO 与 VO。**erp-gateway**:安全边界。实现统一路由分发与非对称加密令牌校验。
二、 核心技术闭环:身份透传与多级鉴权
ERP 系统对用户信息极度敏感,系统通过 “网关解密 + 拦截器挂载” 实现了高效且安全的用户上下文管理。
无状态认证与数据路由(SecurityFilterJWT)
网关作为唯一入口,对进入系统的流量进行身份判定。
- 多角色路由:通过前缀(Admin/Staff/Supplier)识别不同的用户体系,利用
JWTUtils验证令牌合法性。 - 数据注入:校验通过后,网关通过
mutate()将解密后的员工信息注入 Header,消除下游微服务的重复认证开销。
线程级上下文管理(JWTCurrentUserInterceptor)
在业务微服务内部,利用 ThreadLocal 实现用户信息的零参数传递。
- 自动化装载:拦截器在
preHandle阶段将 Header 里的 JSON 序列化为Users/Admin对象。 - 内存安全:在
afterCompletion阶段强制remove,彻底规避了高并发场景下线程池复用导致的内存泄漏。
三、 生产级防护:分布式限流与防刷
ERP 系统常面临内部接口误用或外部爬虫。系统构建了“网关+业务”双重防御体系:
- 全局访问控制 (IPLimitFilter):基于 Redis 滑动窗口算法。若检测到某一 IP 在 20s 内对财务或人事接口发起高频请求,系统将自动触发熔断,封禁该 IP 访问,有效抵御自动化爬虫。
- 业务敏感操作保护 (SMSInterceptor):针对二次验证码发送、订单审核等高频变动接口,在业务层设置冷却计时器,利用 Redis 原子性操作确保 60s 冷却限制,保障业务逻辑的连贯性。
四、 数字化审计:基于 AOP 的性能监控
ERP 系统的业务链路长(如从采购到入库),为了准确定位响应延迟,系统引入了 ServiceLogAspect。
- 无侵入监控:使用
@Around环绕通知,拦截所有业务逻辑执行路径。 - 耗时分级预警:配合 Spring
StopWatch对每个 Service 方法进行颗粒度计时。- 耗时 > 3s:标记为
Error级别日志。通常意味着复杂的报表查询需要优化索引,或远程 Feign 调用存在网络波动。 - 耗时统计图表:利用
prettyPrint输出分段计时,帮助架构师快速判断是“数据库查询慢”还是“业务计算慢”。
- 耗时 > 3s:标记为
五、 数据持久化与动态治理
- 高效持久化:采用 MyBatis-Plus,结合
AutoFill自动填充审计字段(创建者、修改时间),满足 ERP 系统的合规性审计需求。 - 动态配置中心:所有核心参数(限流阈值、令牌密钥、数据源配置)均托管于 Nacos。支持动态刷新,确保在不重启系统的前提下,实时调整业务规则。
六、 总结:为什么这套架构适合 ERP?
- 高安全性:从 IP 拦截到 JWT 校验,构建了多层安全屏障。
- 低耦合性:业务层只需从
ThreadLocal拿取员工信息,不关心认证细节。 - 可观测性:通过 AOP 审计,让每一个慢方法无所遁形。
结语: 这套架构不仅支撑了 ERP 的基础功能,更为后续引入分布式事务(Seata)和全链路监控(Skywalking)打下了坚实的底座。
- 在 ERP 项目中设计了一套基于网关身份透传的 ThreadLocal 方案。它解决了微服务间用户信息传递的冗余问题,同时结合 Redis 实现分布式限流,保障了敏感接口的安全。此外,我利用 AOP 切面 构建了全自动的性能审计组件,能主动发现并定位系统中的慢方法。