学习笔记123

企业主流架构 + 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