企业主流架构 + SpringBoot机制 + 公司自研框架 完整学习笔记
一、互联网/企业通用标准架构(90%公司通用)
前后端分离标准生产架构链路
用户浏览器访问域名 → Nginx
静态资源(页面/图片/js/css)→ Nginx直接返回(性能高、不占Java资源)
/api 业务接口请求 → Nginx反向代理转发至 Spring Boot 后端服务
Spring Boot 内部通过中间件完成整套业务:
-
MySQL:持久化业务数据
-
Redis:缓存、热点数据、临时状态
-
Etcd:配置中心、分布式锁、主备协调
-
Kafka:消息总线、异步解耦、数据流处理
架构分工总结
-
Nginx:只管流量、静态资源、反向代理、负载均衡(不处理业务)
-
Spring Boot:只管业务逻辑、接口、异步任务、定时任务
-
中间件:各司其职,解决存储、锁、消息、配置问题
二、Spring Boot 核心机制------线程池机制
Spring Boot原生自带完整线程池体系,无需手动造轮子,分为三类:
1. Tomcat Web线程池(处理HTTP请求)
所有浏览器/前端发来的接口请求,全部由 Tomcat 内置线程池并发处理。
作用:支撑接口高并发,主线程不阻塞。
2. 业务异步线程池(@Async)
Spring 内置 TaskExecutor,用于:
-
异步处理 Kafka 消息
-
异步操作数据库、Etcd
-
解耦主流程,提升吞吐量
生产环境必须自定义线程池(限制最大线程、队列、拒绝策略),防止OOM。
3. 定时任务线程池(@Scheduled)
处理定时对账、定时拉取行情、定时清理、定时同步配置。
默认单线程,多任务会阻塞,企业环境需配置线程池大小。
三、自研框架架构
公司旧车机框架 不是SpringBoot ,是自研插件式事件循环架构
核心技术栈:自研事件循环框架 + Kafka消息总线 + Etcd主备锁协调
2. 程序启动生命周期(核心主线程模型)
整套框架是 单主线程事件循环模型(和SpringBoot多线程模型完全不同)
main()
│
├─ gfqg_init() // 全局框架初始化 │ 配置加载、日志、Kafka初始化、ETCD锁、定时器初始化
│
├─ gfqg_register_busilogic() // 注册业务插件 │ 如:mock_lm 插件实现 gfbusi 标准接口
│
├─ gfqg_main_loop() // 核心:事件循环死循环 │ 处理订阅Kafka消息、定时器事件、idle空闲轮询
│
└─ gfqg_clean() // 程序退出资源释放
3. 自研框架核心特点(和SpringBoot区别)
-
SpringBoot:多线程模型、Tomcat线程池、接口驱动、自动装配
-
公司自研框架:单主线程事件循环、插件化、消息驱动、主备高可用
4. 核心能力依赖
-
Kafka:全局消息总线,模块之间不直接调用,全部走消息解耦
-
Etcd:分布式锁、主备切换、保证集群只有一台主机干活
-
自研事件循环:统一调度所有定时、消息、插件事件
微服务
| Spring Cloud Java 组件 | C++ 对应解决方案 | 作用 |
|---|---|---|
| Nacos/Etcd 注册配置中心 | nacos-cpp-sdk / etcd-cpp-api | 服务注册发现、统一配置下发 |
| Spring Cloud Gateway | brpc http 服务 /nginx/envoy | API 网关、流量转发、限流 |
| OpenFeign 远程调用 | brpc stub / grpc stub | 跨服务方法调用 |
| Sentinel 熔断降级 | brpc 内置熔断组件 | 服务雪崩保护、超时重试 |
| Spring-Kafka | librdkafka(标准 C++kafka 客户端) | 消息总线、异步解耦 |
| Redis 缓存 | hiredis | 缓存、分布式锁 |
| MySQL | mysql-connector-cpp | 数据库操作 |
- RPC = 同步问答,查数据、实时交互、要返回结果,必用 RPC;
- Kafka = 异步发事件,事后处理、广播、削峰、流水存储,只用 Kafka;