2026-01-12
场景与实战
0

目录

从 0-1 搭建系统架构
项目辅助工具的选型
软件开发管理
团队协作文档
代码版本托管
服务模式与基础设施的搭建
微服务框架体系
选择合适的 JDK 版本
选择合适的RPC框架
构建基础设施
服务的划分与模块分层设计
高可用的中间件部署
标准流程规范的制定
AI 辅助开发提上日程
CI/CD 持续集成与部署的抉择
流水线工具
容器化与编排
自动化测试平台
360°全方位监控运维架构
生产环境高并发高吞吐负载均衡的环境部署
支撑高并发高吞吐下的全链路压测
负载均衡策略
CDN的选型和使用设计

你有没有思考过这样一个问题:项目中的架构现在已经成了高楼大厦,那当初底层的地基是如何搭建起来的呢?如果现在你是一个团队的技术负责人,正面临着公司基础架构的搭建,那你是如何从 0-1 的去完成工作呢?接下来我将结合自己形成的方法论来进行讲解。

  • 项目辅助工具的选型
  • 服务模式与基础设施的搭建
  • 服务的划分与模块分层设计
  • 高可用的中间件部署
  • 标准流程规范的制定
  • AI 辅助开发提上日程
  • CI/CD 持续集成与部署的抉择
  • 360°全方位监控运维架构
  • 生产环境高并发高吞吐负载均衡的环境部署

从 0-1 搭建系统架构

如果让我从零开始搭建公司的后端技术栈,我会按照以下维度进行思考

项目辅助工具的选型

在真正的开始搭建以前,做为负责人,需要结合实际的公司发展模式,与业务发展的方向进行选择,公司当前是否是业务的快速增长期,如何做到快速交付,这就需要用到一些项目辅助的工具,进行 项目管理、任务管理、问题管理等。

软件开发管理

项目管理软件是整个业务的需求、问题、流程等等的集中地,大家的跨部门沟通协同大多依赖于项目管理工具。有一些 SaaS 的项目管理服务可以使用,但是很多时间不满足需求,此时我们可以选择一些开源的项目,这些项目本身有一定的定制能力,有丰富的插件可以使用,一般的创业公司需求基本上都能得到满足。

例如选择 Jira(官网信息):用 Java 开发的,有用户故事,task 拆分,燃尽图等等,可以做项目管理,也可以应用于跨部门沟通场景,功能比较丰富,特别适合敏捷开发的团队(需要加班的团队)

在我的实际工作应用中,使用 Jira 进行项目管理,同时结合自建的需求平台,在需求状态流转到开发中,会自动创建到小组下的冲刺,最终冲刺完成后会进行工时统计。

image.png

团队协作文档

如果说项目管理是人体组成的骨架,那么团队的文档则是人体的灵魂。Wiki 的生命力在于“集体智慧”,需要鼓励成员在完成任务后,顺手更新相关文档,无论是架构的设计思路、需求的流程梳理、接口的文档信息,又或者是周报、会议纪要、复盘记录等,保持 Wiki 的“新鲜度”和准确性至关重要,项目越往后越会觉得这是一个非常明智的选择。

可以选择 Confluence(官网信息),是 Jira 的“亲兄弟”,与 Jira 集成度极高,是技术团队的标配,多人协作机制和丰富的文本格式、流程图功能都十分好用。

image.png

如果没有进行项目管理的工具,那文档可以直接选择 Notion( notion.so ),其特点是颜值高、灵活性极强,既是 Wiki 也是数据库,操作体验非常流畅。非常适合互联网初创公司、产品团队或个人知识管理。

image.png

代码版本托管

在准备阶段时,我们还要选择项目代码的版本管理,现在市面上主流的是 GitLab + Git 进行企业的私有化部署。如果是小团队,不需要一些特别的高级项目管理功能,可以选择轻量级、低成本和自主可控的 Gitea

image.png image.png

服务模式与基础设施的搭建

当基础的项目辅助工具选择完成,接下来我们需要结合结合实际的业务场景,进行服务架构的选型,根据项目体量,是考虑单体 还是 SOA 又或是微服务架构,如果选择微服务架构,那主流的微服务框架如何进行选择,从微服务的稳定性和性能做出选择,同时对人员的学习成本,开发成本,以及后期业务的高并发的考量,在此处以微服务模式为例。

微服务框架体系

搭建微服务开发基础设施需要考虑多个方面,首先我们需要选择合适的微服务体系和技术栈,当下最主流的是 Spring Cloud Alibaba 微服务体系

image.png

对于 Spring Boot 版本,如果需要结合 AI 应用的开发,那直接是 3.0 版本起步,在微服务体系中,最高版本应用的也是 3.2 系列,不过其官方上来说,3.2 已不再支持,3.5 才是一个长期版本。

image.png

选择合适的 JDK 版本

微服务体系的版本确认后,基于 SpringBoot 的版本和业务体量去选择合适的 JDK 版本,目前长期支持的版本有4个,JDK 11、17、21、25 可以查看 Java 进化论:解码 JDK 11、17、21 与 25 的核心变革

提示

对于一些应用新特性与高并发大流量的项目,JDK21 是首选,虚拟线程 更是在 Java8 以后 LTS 版本中最大的变革,也是并发编程的革命。

选择合适的RPC框架

在微服务架构中,选择 OpenFeign 还是 RPC(如 Dubbo、gRPC),本质上是在选择 “基于 HTTP 的 REST 调用” 与 “基于二进制协议的远程调用”,这取决于你的业务场景、性能要求和技术栈,主要从以下几个维度做出思考:

  • 性能与通信协议:RPC 通常基于 TCP 或 HTTP/2(gRPC),使用二进制序列化(如 Protobuf、Hessian),数据体积小。长连接,避免了频繁的 TCP 三次握手。其吞吐量高、延迟低,适合高并发、低延迟的核心业务(如交易、支付)。
  • 开发体验与学习成本:OpenFeign 使用声明式 REST 客户端,只需要定义一个接口,并配上 Spring MVC 的注解(如 @GetMapping)即可,服务之间调用整体为低耦合,是最常用的手段,开发与学习成本较低。
  • 与微服务体系生态兼容性:OpenFeign 为 Spring Cloud 体系下的框架,天然的生态兼容,同时 HTTP 是通用标准,只要对外提供 REST API,Feign 就能调用。

总体来说,选择适合自己团队技术栈的框架非常重要。如果是新项目,且对性能没有变态的要求,建议首选 OpenFeign,因为它的开发体验最好;如果你是高并发核心系统(如电商、金融),建议在内部服务间使用 DubbogRPC,而在最外层网关使用 HTTP 对外暴露。即:对外 HTTP,对内 RPC。

构建基础设施

当微服务体系确认以后,需要搭建高可用的注册中心、配置中心,同时 API 网关与负载均衡都是要处理的,同时结合业务场景,确认是否搭建统一认证中心。

当微服务体系确认以后,需要搭建 “微服务的基石” ———— 注册中心与配置中心,同时解决流量入口与安全问题。

注册中心与配置中心的选型

Spring Cloud Alibaba 体系下,肯定首选 Nacos,它集成了服务发现(注册中心)和配置管理(配置中心)两大核心功能,且支持 AP/CP 切换,满足金融级一致性要求。同时为了保障高可用,必须采用 集群模式 部署,并挂载独立的 MySQL 数据库以保证配置数据的持久化。

API 网关与统一认证

肯定选择 Spring Cloud Gateway,它是基于 Netty 的非阻塞网关,由 Spring Cloud 提供的官方网关,性能远超 Zuul。负责路由转发、限流、熔断以及跨域处理。

实现统一认证中心,可以结合 OAuth2.1 与 JWT,推荐使用 Sa-Token 搭建授权中心,在 Gateway 网关层进行Token 的解析与验签,实现无状态的认证授权,避免下游服务重复校验。

客户端负载均衡

在网关层进行客户端负载均衡,需要集成 Spring Cloud LoadBalancer(Ribbon 的替代者),配合 Nacos 的权重配置,实现灰度流量的初步控制。

服务的划分与模块分层设计

在确定了“路”怎么修之后,我们要确定“房子”怎么盖。上面属于 系统架构的设计,接下来我们要确认 业务架构的设计。首先需要对自己的业务场景进行分析和规划,确认服务是如何分层的,是通过网关去中心化的分层,还是设置聚合层有中心化的处理

例如业务架构图: image.png

接下来要对架构模式抉择:MVC vs DDD

传统 MVC 分层:对于初创业务或简单的 CRUD 场景,采用经典的 Controller -> Service -> Repository 分层。优点是上手快,开发效率高。

而 DDD 领域驱动设计:当业务逻辑极其复杂(如电商交易、金融风控)时,引入 DDD 思想,整体划分为 展现层 -> 应用层 -> 领域层 -> 基础设施层

高可用的中间件部署

对于一些中间件不仅要“有”,还要“稳”和“快”,结合业务场景进行选型并部署。

  • 缓存中间件:Redis,生产环境严禁使用单机版。采用 Redis Cluster(集群模式) 或 Redis Sentinel(哨兵模式),确保高可用。可以引入多级缓存(本地 Caffeine + 分布式 Redis)以应对极致的读性能需求。
  • 消息中间件:RocketMQ / Kafka,解耦系统、削峰填谷、异步处理。若强调事务消息和顺序消息(如订单扣减库存),首选 RocketMQ(阿里开源,生态好);若强调海量日志处理和高吞吐,首选 Kafka。
  • 关系型数据库:MySQL 8.0+(InnoDB引擎)采用 MHA(Master High Availability) 或云厂商的高可用架构,实现主从自动切换。初期不建议过度设计,当单表数据量超过 5000 万或容量超过 2GB 时,引入 ShardingSphere 进行水平拆分。
  • 搜索引擎:Elasticsearch,用于日志分析(ELK)和复杂条件的全文检索。部署:至少 3 节点集群,保证数据分片和副本的冗余。

标准流程规范的制定

为什么在上述流程完成后才开始制定流程规范呢?主要还是具体的场景具体分析,大多数企业在初期其实时比较着急的,当产品梳理完需求以后,其实就可以进入开发阶段了,而我们的一些流程规范,可以慢慢的进行完善,所以优先级并不高。在接下来的过程中,我们需要制定一些 开发流程,项目流程,发布流程,监控告警流程,代码规范等等;

  • 代码规范:统一使用 Alibaba Java Coding Guidelines 插件,配合 Checkstyle/PMD,确保代码风格一致。
  • Git 分支管理:采用 Git Flow 或 GitHub Flow。
    • main/master:生产环境代码。
    • release:预发布分支。
    • develop:日常开发主分支。
    • feature/*:新功能开发。
    • fix/*: 修复分支
  • 发布流程:严格遵循 Code Review -> 自动化测试 -> 预发环境验证 -> 灰度发布 -> 全量上线 的流程。
  • 监控告警:制定告警响应 SLA(如 P0 级故障 15 分钟内响应)。

AI 辅助开发提上日程

工欲善其事,必先利其器。利用 AI 提升人效,是现代架构师必须考虑的降本增效手段。

  • 编码辅助:引入 GitHub Copilot 或 Amazon CodeWhisperer,辅助生成单元测试、DTO 类或重复的模板代码。
  • 代码审查:利用 AI 分析代码异味(Code Smell)和潜在漏洞。
  • 架构设计:在初期利用 AI 快速生成架构图(Mermaid 语法)或技术选型对比分析。

主流AI编程工具对比

对比维度字节跳动 Trae腾讯 CodeBuddy (ima)阿里 Qoder / 通义灵码CursorClaude Code
核心形态AI原生IDE (深度定制VS Code)AI一体化开发工作台 / 知识工作台AI编程平台 (集成于IDE) & 命令行工具以AI为核心的代码编辑器 (基于VS Code)命令行(CLI)智能体
核心模型支持多模型 (国际版: Claude, GPT-4o等;国内版: 豆包、DeepSeek等)整合混元、DeepSeek等模型基于自研 通义灵码 / Qwen3-Coder 模型支持多模型,允许自定义API密钥基于Anthropic Claude 系列模型
独特优势/杀手锏“Builder/Solo模式”:从需求到部署的一站式项目构建;强大的代码补全能力。全流程一体化:强调“对话即编程”,集成产品设计、前后端开发、部署;对微信生态开发支持好。“Quest任务模式”:AI自主拆解并完成复杂开发任务;仓库级理解与重构能力强。行业标杆的交互体验:预测性代码补全、多文件编辑流畅;智能体编码模式高效。顶级的逻辑推理与连贯性:擅长处理超长上下文、跨多文件的复杂重构,自动化程度高。
典型适用场景快速启动新项目、全栈开发、日常编码提效。快速原型验证、全链路开发(尤其小程序)、团队非技术角色参与。大型项目重构、遗留系统现代化、根据模糊需求自动生成完整应用。日常编码辅助、中小规模代码库的理解与修改、追求流畅的AI编程体验。大型代码库的重构、添加跨模块功能、自动生成测试和文档等“脏活累活”。
目标用户从个人开发者到企业团队,追求高集成度和免费使用的用户。独立开发者、产品/设计等非技术角色、微信生态开发者。企业级开发者、面临复杂工程问题和架构任务的团队。广泛的专业开发者,尤其是Cursor交互模式的爱好者。资深开发者、技术负责人,习惯命令行且需要处理复杂工程任务。
价格策略 (参考)目前有免费额度,处于市场拓展期。个人版有免费方案;企业版按需订阅。提供免费额度及API按量计费。免费版有次数限制,专业版订阅制 (约20美元/月)。通常需订阅Claude Pro/Team,或通过API按Token计费。

CI/CD 持续集成与部署的抉择

接下来我们要告别“人肉运维”,实现“一键发布”。

流水线工具

Jenkins:虽然老旧但插件生态极其丰富,适合自定义复杂的构建逻辑。

GitLab CI / GitHub Actions:如果使用 Gitea 或 GitLab,内置的 CI/CD 功能已经足够强大,配置更简单(YAML 驱动)。

容器化与编排

Docker:将应用及其依赖打包成镜像,保证“构建一次,到处运行”。

Kubernetes (K8s):当服务数量超过 20 个时,必须引入 K8s 进行容器编排,管理服务的生命周期、自动扩缩容(HPA)。

自动化测试平台

工具:推荐引入开源的组件 AutoMeter 进行接口自动化和性能测试,项目地址:https://gitee.com/season-fan/autometer-api

流程:在 CI 流程中加入单元测试覆盖率检查(Jacoco),只有覆盖率达标且自动化测试通过,才允许合并到主干。

image.png

360°全方位监控运维架构

当处于开发阶段时,我们接下来就该考虑如何搭建监控系统,结合我们的基础设施与中间件的选型,要做到全方位的监控。没有监控的系统就是“盲人摸象”。

  • 应用性能监控 (APM):使用 SkyWalking 或 Pinpoint。
  • 全链路追踪:通过 TraceId 串联一次请求经过的所有微服务,快速定位性能瓶颈。
  • 日志监控:ELK Stack (Elasticsearch, Logstash, Kibana) 或 EFK。
  • 集中收集日志,支持关键字检索和异常堆栈分析。
  • 系统指标监控:Prometheus + Grafana。
  • 监控 CPU、内存、磁盘、JVM(GC 次数、堆内存使用)等核心指标,设置阈值告警。
  • 各类中间件的池化资源,性能监控。

image.png

生产环境高并发高吞吐负载均衡的环境部署

当测试执行与产品验收完成以后,就需要考虑我们生产环境的准备了,结合业务场景,去分析系统支撑的QPS,如何搭建可以支撑此QPS的生产环境,同时分析系统的瓶颈,以及如何解决瓶颈问题。还有一些就是补偿方案,兜底方案等考虑。

支撑高并发高吞吐下的全链路压测

在上线前首先摸底系统的最大承载能力,进行全链路压测。全链路压测(Full-Link Stress Testing)是保障系统高可用性的关键手段,目前主流的开源全链路压测工具主要分为两类:一类是基于 流量录制与回放(无侵入),另一类是 基于代码/脚本编写(有侵入或半侵入)

Takin(塔金)—— 生产环境全链路压测标杆

这是目前国内非常成熟的一款开源全链路压测平台,特别适合复杂的微服务架构。

核心特点:无代码侵入。它采用 Agent 探针技术,不需要修改业务代码即可接入。

核心能力:

  • 数据隔离:这是它最大的亮点。通过“影子库/影子表”技术,压测数据不会污染生产环境的真实数据(即“生产环境零污染”)。
  • 精准瓶颈定位:能自动构建业务拓扑图,当压测过程中出现性能瓶颈时,可以直接定位到具体的 SQL 或服务节点。
  • 适用场景:非常适合在生产环境直接进行全链路压测,尤其是电商、金融等对数据准确性要求高的行业。

Goreplay(GoReplay)—— 流量复制与重放神器

如果你希望最大程度还原真实用户场景,Goreplay 是一个极佳的选择。

核心特点:无侵入式流量捕获。它工作在网络层面(基于 tcpdump 原理),直接监听服务器网卡流量。

核心能力:

  • 真实流量复刻:它可以将生产环境的真实流量(HTTP/TCP 请求)实时抓取并“原封不动”地回放到测试环境。
  • 轻量级:基于 Go 语言开发,资源占用极低(CPU 占用率通常仅 2%-3%),对生产环境影响微乎其微。
  • 灵活性:支持流量采样、接口过滤(如排除健康检查接口)和速度控制(如 2 倍速回放)。
  • 适用场景:适合验证系统在真实流量下的表现,或者在灰度发布前进行验证。

Apache JMeter —— 传统压测的“瑞士军刀”

虽然它不是专门为“全链路”而生,但它是目前应用最广泛的开源压测工具,通过扩展可以实现全链路压测。

核心特点:纯 Java 开发,插件生态极其丰富。

核心能力:

  • 协议支持广:支持 HTTP、FTP、JDBC、Dubbo 等多种协议,可以通过编写脚本模拟复杂的业务链路。
  • 分布式压测:支持多台机器协同施压,以达到高并发的要求。
  • 可视化报告:提供丰富的聚合报告和图表。
  • 适用场景:适合中小规模的全链路压测,或者在测试环境中通过脚本模拟用户行为。

SkyWalking + Cyborg Flow —— 基于 APM 的压测方案

这是一种结合了监控与压测的开源方案。

核心特点:利用 Apache SkyWalking 的生态,通过插件机制实现压测流量的识别与隔离。

核心能力:

  • 流量标记:通过网关注入特殊 Header,SkyWalking Agent 会透传该标记。
  • 数据库隔离:配合 Database Shadow 中间件,识别压测流量并路由到影子表,防止数据污染。
  • 适用场景:适合已经使用 SkyWalking 作为 APM(应用性能监控)工具的团队,可以低成本集成压测能力。

通过以上工具进行全链路压测,模拟大促流量(如 10 倍日常流量),验证数据库连接池、Redis 连接数、线程池等核心资源是否成为瓶颈。

负载均衡策略

在 IDC 或云上使用 Nginx 或 LVS 作为入口负载均衡器,采用 一致性 Hash 或 加权轮询 策略。

Spring Cloud Gateway 配合 Nacos 实现动态的实例负载。

读写分离,使用 ShardingSphere-Proxy 或中间件实现读写路由。

CDN的选型和使用设计

针对与一些静态资源(图片、CSS、JS、视频),我们做出以下策略:

  • 动静分离:将静态资源剥离出应用服务器,托管至对象存储(OSS/S3),并通过 CDN 加速分发。
  • 选型:根据业务所在区域选择 CDN 厂商(如阿里云 CDN、腾讯云 CDN、Cloudflare)。
  • 缓存策略:设置合理的 TTL(缓存过期时间),利用 CDN 边缘节点缓存,减少回源率,降低源站带宽压力。

通过以上从工具选型到高可用部署的完整闭环,一个具备高并发处理能力、可扩展、易维护的现代化微服务架构地基就打好了。

本文作者:柳始恭

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!