我们理解一套后台服务架构
理解好这几个维度,就算全链路理解了
1.业务的基本架构是什么
多少台服务器,什么参数,每台上面配置了多少软件
自己如何主导设计这个领域的问题
在nginx配置领域
在数据存储领域的配置之类
在jar包层,如何以业务领域划分+jar包横向拓展
为了保持高可用性,引入k8s
为了监控机器的情况,引入普罗米修斯
2.业务代码架构是什么
代码工程架子,看依赖
工具类
用户权限设置
3.业务是怎么样的,为谁提供什么样的信息服务
用户是谁,有几种
UI界面是怎么样的
数据流转是怎么样的
核心数据库表
缓存的数据结构与内容
4.开发节奏是什么样的
用户故事需求
前后端交互的文档,apifox
代码gitlab的使用
5.运维排错
在jvm层出现问题排错
接口层出现问题排错
1. 业务架构维度(基础设施与高可用)
关键检查点:
-
服务器与资源配置
- 明确节点数量、CPU/内存规格、磁盘类型(SSD/NVMe)及网络带宽
- 区分环境:生产/预发/测试环境配置是否一致
-
软件拓扑
- 每台服务器上运行的组件清单:Nginx、应用容器(JVM进程)、数据库(MySQL/PostgreSQL)、缓存(Redis)、消息队列(Kafka/RocketMQ)、注册中心(Nacos/Eureka)等
- 配置关键:Nginx的upstream策略、限流/熔断配置;数据库的连接池大小、慢查询阈值
-
领域设计主导思路
- Nginx层 :根据业务域拆分路由(如
/api/user/*→ user-service,/api/order/*→ order-service) - 数据存储层:按领域划分数据库实例(订单库、用户库、商品库),必要时分库分表
- Jar包层:按业务领域拆分为独立微服务,每个服务独立部署、独立横向扩展
- Nginx层 :根据业务域拆分路由(如
-
高可用与可观测性
- K8s引入:定义Deployment(副本数≥2)、Service、Ingress、HPA(自动伸缩)、PodDisruptionBudget
- Prometheus监控:采集节点指标(CPU/内存/磁盘)、中间件指标(Redis命中率、MySQL连接数)、业务指标(QPS、错误率、延迟分位数)
💡 建议补充:日志聚合系统(ELK/Loki)和链路追踪(Jaeger/SkyWalking),形成完整的可观测性三支柱(指标、日志、追踪)
2. 业务代码架构维度(工程与权限)
关键检查点:
-
工程架子
- 项目结构:多模块Maven/Gradle工程,模块划分对应业务领域(如
user-biz,order-biz,common) - 依赖管理:梳理关键依赖版本(Spring Boot、MyBatis、Dubbo/gRPC)、排除冲突传递依赖
- 启动配置:环境变量、JVM参数(
-Xms/-Xmx、-XX:+UseG1GC)、配置文件外挂(ConfigMap/ Apollo)
- 项目结构:多模块Maven/Gradle工程,模块划分对应业务领域(如
-
工具类与通用组件
- 检查是否沉淀了常用工具(日期处理、HTTP客户端、分布式锁、幂等组件)
- 是否使用了内部基础库(如公司级的日志埋点、异常处理规范)
-
用户权限设置
- 代码级权限:Git仓库的读写分支权限(保护master/main分支)
- 运行时权限:服务账号(RBAC)、接口鉴权(JWT/OAuth2)、数据权限(SQL行级过滤)
3. 业务逻辑维度(用户与数据)
关键检查点:
-
用户与场景
- 用户画像:C端普通用户 / B端商家 / 后台运营人员
- 核心场景:比如"查询商品详情""下单支付""查看订单状态"
-
UI界面与交互
- 了解前端页面路径与后端API的对应关系(通过Swagger/Apifox导出接口文档)
- 关键交互流程:比如登录→商品浏览→加购物车→下单→支付→回调
-
数据流转
- 核心数据库表:至少理解订单表、用户表、商品表、库存表的主键、索引、状态字段
- 缓存数据结构:Redis中如何存储(商品详情Hash、用户会话String、库存计数器String)、过期策略、缓存更新模式(Cache-Aside / Write-Through)
- 消息队列:哪些操作异步化(下单后发MQ扣减库存、发送短信)、topic划分
💡 画一张简单的数据流图:前端 → Nginx → 网关 → 服务A → 缓存/DB → 消息队列 → 服务B
4. 开发节奏维度(流程与协作)
关键检查点:
-
用户故事与需求管理
- 需求来源(产品需求池/线上反馈/运营活动)
- 迭代周期(一周/两周)、需求评审→技术方案→开发→测试→上线流程
-
前后端交互文档
- Apifox/Postman/YApi:接口定义(路径、方法、请求参数、响应结构、Mock示例)
- 文档更新机制:代码变更时是否同步更新文档(推荐用注解自动生成OpenAPI)
-
代码版本控制
- GitLab工作流:issue → feature分支 → MR/PR → Code Review → 自动化测试 → 合并主干 → 标签发布
- 分支规范:master(生产) / release(预发) / develop(集成) / feature/*
💡 补充两个重要环节:自动化测试(单元测试、集成测试覆盖率要求)和部署流水线(Jenkins/GitLab CI)
5. 运维排错维度(故障定位)
JVM层排错:
- 现象:GC频繁、内存泄漏、线程死锁、CPU飙升
- 工具链 :
jstat查看GC情况jmap导出堆内存快照(.hprof)jstack查看线程栈(定位死锁、长时间阻塞)- MAT / VisualVM / Arthas 分析堆内对象或动态诊断
- 常见对策:调整堆大小、优化代码中大对象分配、减少Full GC频率、使用合适的GC回收器(G1GC / ZGC)
接口层排错:
- 现象:超时、4xx/5xx错误、响应慢、数据不一致
- 定位步骤 :
- 确认请求链路:从Nginx access log → 网关日志 → 业务服务日志 → 数据库慢查询日志
- 检查上游依赖:Redis是否变慢、MySQL锁等待、下游服务超时
- 常见工具:
curl复现、Postman测试、tcpdump抓包、SkyWalking 查看调用链
- 典型问题与对策 :
- 慢接口 → 加索引 / 缓存 / 异步处理 / 降级方案
- 请求堆积 → 扩容 / 限流 / 调整线程池参数
- 数据不一致 → 检查事务传播行为、重试机制、最终一致性方案(本地消息表/事务消息)
总结:全链路理解的思维模型
text
[用户故事] → [UI/API] → [Nginx/网关] → [业务代码(JVM)] → [缓存/DB/MQ]
↑ ↓
[Apifox文档] [K8s + Prometheus]
↑ ↓
[GitLab协作] ← [运维排错] ← [日志/追踪/指标]