1. 项目背景与核心价值
这个架构底座项目最初源于我在2014年(甲午马年)参与的一个企业级系统重构需求。当时遇到的核心痛点在于:每次新业务系统上线都需要重复搭建基础框架,不仅浪费开发资源,更导致技术栈不统一带来的维护成本激增。经过三个月的方案设计和验证,我们最终沉淀出这套被团队戏称为"马年架构"的通用解决方案。
它的核心价值在于:
- 提供标准化技术选型(SpringBoot+MyBatis+Dubbo)
- 内置企业级功能模块(权限/日志/监控)
- 约定优于配置的开发规范
- 可插拔的组件化设计
经过8年迭代,该架构已支撑超过30个业务系统稳定运行,日均处理请求量峰值达2.3亿次。最近在梳理技术资产时,我决定将这套经过实战检验的方案整理成文档,以下是核心设计要点。
2. 架构分层设计解析
2.1 基础运行层
采用Docker+K8s作为底层运行时环境,重点解决环境一致性问题。我们在基础镜像中预置了:
- JDK(OpenJDK11 with Shenandoah GC)
- 性能监控组件(Arthas+Prometheus exporter)
- 日志收集代理(Filebeat 7.x)
关键配置技巧:通过JVM参数-XX:ActiveProcessorCount显式指定CPU核数,避免容器环境CPU配额误判
2.2 核心框架层
组合Spring生态的核心组件形成技术矩阵:
- Spring Boot 2.6.x(Web+Actuator)
- Spring Cloud Alibaba 2021.x(Nacos+Sentinel)
- MyBatis-Plus 3.5.x(含动态数据源支持)
- Redisson 3.17.x(分布式锁+缓存)
典型问题:MyBatis二级缓存与分布式环境冲突 解决方案:采用Redisson实现的RedisCache替代默认实现
2.3 通用能力层
将企业级通用功能抽象为独立模块:
- 认证授权模块(JWT+RBAC)
- 操作日志模块(AOP+MQ异步存储)
- 分布式事务模块(Seata模式)
- 消息推送模块(WebSocket+短信/邮件网关)
3. 关键技术实现细节
3.1 配置中心集成方案
采用Nacos作为配置中心时,我们总结出以下最佳实践:
- 按环境划分命名空间(dev/test/prod)
- 使用共享配置(shared-config)管理通用参数
- 敏感配置采用加密存储(Jasypt AES加密)
配置加载优先级(从高到低):
环境变量 > Nacos配置 > 本地配置文件 > 默认值3.2 数据库分库分表策略
基于ShardingSphere 5.x实现水平分片,关键配置示例:
spring: shardingsphere: datasource: names: ds0,ds1 rules: sharding: tables: t_order: actual-data-nodes: ds$->{0..1}.t_order_$->{0..15} database-strategy: standard: sharding-column: user_id precise-algorithm-class-name: com.xxx.ModuloDatabaseShardingAlgorithm table-strategy: standard: sharding-column: order_id precise-algorithm-class-name: com.xxx.ModuloTableShardingAlgorithm3.3 分布式锁实现方案
对比多种方案后选择Redisson的MultiLock实现:
// 获取多个资源的联锁 RLock lock1 = redisson.getLock("lock1"); RLock lock2 = redisson.getLock("lock2"); RLock multiLock = redisson.getMultiLock(lock1, lock2); try { multiLock.lock(); // 业务处理 } finally { multiLock.unlock(); }性能优化点:
- 设置合理的锁超时时间(建议业务平均耗时的3倍)
- 使用tryLock()替代阻塞式lock()
- 避免锁粒度过细(合并关联资源锁)
4. 部署架构与性能调优
4.1 生产环境部署拓扑
(说明:此处应为实际架构图,展示接入层->应用层->数据层的组件分布)
关键设计原则:
- 接入层:Nginx+Keepalived双活
- 应用层:K8s集群+Pod反亲和性部署
- 数据层:MySQL主从+Redis Cluster
4.2 JVM调优参数模板
针对8C16G容器环境的推荐配置:
-XX:+UseShenandoahGC -XX:MaxRAMPercentage=70 -XX:ActiveProcessorCount=8 -XX:NativeMemoryTracking=summary -XX:+HeapDumpOnOutOfMemoryError监控指标阈值建议:
- GC停顿时间:<200ms/次
- 堆内存使用率:<70%
- 线程池队列积压:<50%
5. 典型问题排查实录
5.1 分布式事务超时问题
现象:Seata全局事务频繁回滚 排查过程:
- 检查TC服务端日志发现SessionTimeout
- 追踪RM执行SQL发现网络延迟波动
- 最终定位到跨机房调用超时
解决方案:
- 调整seata.tx-service-group配置匹配实际分组
- 增加seata.client.tm.degrade-check-period参数
- 优化机房专线网络质量
5.2 缓存雪崩场景应对
防御方案组合:
- 热点数据永不过期+后台刷新
- 二级缓存(Caffeine+Redis)
- 请求合并(HystrixCollapser)
- 熔断降级(Sentinel规则)
验证方法:
// 使用JMeter模拟并发请求 @SpringBootTest public class CachePressureTest { @Test void testCacheBreakdown() { // 模拟缓存失效场景 } }6. 架构演进方向
当前正在验证的改进方向:
- 服务网格化(Istio替换部分Spring Cloud组件)
- 云原生构建包(Paketo Buildpacks)
- 多运行时架构(Dapr集成)
- 混沌工程防护(ChaosBlade注入)
在最近一次压力测试中,新架构版本相比原版表现出:
- 启动时间缩短42%(从15s→8.7s)
- 内存占用降低31%(从2.1G→1.45G)
- 吞吐量提升27%(QPS 18500→23500)