Docker:服务架构讲解
2026/7/26 7:36:43 网站建设 项目流程

在学习Docker之前,我们需要先学习服务器架构

目录

单机服务架构

特点

优缺点

适用场景

应用数据分离架构

特点

优缺点

适用场景

应用服务集群架构

特点

优缺点

适用场景

读写分离架构

特点

优缺点

适用场景

冷热分离架构

特点

优缺点

适用场景

垂直分库架构

特点

优缺点

适用场景

微服务架构

必备基础设施

优缺点

服务间通信模式

适用场景

容器编排架构

特点

核心组件

优缺点

适用场景

横向对比总结

架构演进路线

架构选型决策矩阵

各架构核心数据对比

架构演进阶段建议


单机服务架构

特点

维度说明
部署应用、数据库、文件存储全部打包在同一台服务器上运行
通信进程内函数调用或本地 Socket,无网络开销
数据单一数据库实例,应用直连本地数据库
团队极简运维,单人即可管理全部
技术栈LAMP (Linux + Apache + MySQL + PHP) 或 Tomcat + MySQL + Nginx

优缺点

优点缺点
开发简单,IDE 友好,调试方便单点故障:服务器宕机则整个系统不可用
部署极简,一个包或一条命令搞定不可水平扩展,只能靠升级硬件(垂直扩展)
性能高,进程内调用无网络延迟资源争抢:应用和数据库共享 CPU/内存/磁盘
事务管理简单(本地事务)安全风险:攻击者攻破应用即拿到数据库
初期开发效率极高,适合快速验证随着规模增长,代码耦合度急剧上升

适用场景

  • 初创项目 MVP 快速验证
  • 业务逻辑简单的内部管理系统
  • 团队规模 1~5 人的小型项目
  • 无需高可用高并发的工具类应用

应用数据分离架构

特点

维度说明
部署应用服务器和数据库服务器分机部署,各自独立运行
通信应用与数据库通过 TCP 网络通信
数据数据库独立于应用服务器,可单独配置和优化
硬件应用服务器侧重 CPU,数据库服务器侧重内存和磁盘 I/O
技术栈应用服务器(Tomcat/Node.js)+ 独立数据库服务器(MySQL/PostgreSQL)

优缺点

优点缺点
应用和数据库可按需独立配置和升级硬件应用服务器和数据库各仍为单点,任一宕机服务不可用
数据库不暴露在公网,安全性提升引入网络延迟,每次数据库交互需经网络传输
部署结构清晰,为后续架构演进打下基础水平扩展能力仍未解决
应用和数据库资源不再互相争抢运维成本略增,需管理多台服务器

适用场景

  • 业务量增长,单机资源出现瓶颈
  • 需要将数据库隔离到更安全的内网环境
  • 团队规模 5~10 人,开始有专职 DBA 或运维

应用服务集群架构

特点

维度说明
部署同一应用部署在多台服务器上,由负载均衡器统一分发请求
通信客户端先到 LB,LB 按策略(轮询/最少连接/IP Hash)分发到后端节点
高可用单台应用节点宕机,流量自动切到健康节点,用户无感知
Session多节点带来状态共享问题,需引入 Redis 集中 Session 或 JWT 无状态方案
技术栈Nginx/HAProxy + 多台应用服务器 + 单台数据库服务器

优缺点

优点缺点
应用层高可用,单节点故障不影响整体服务数据库仍是单点,成为系统的瓶颈和故障源
水平扩展:流量增加时加机器即可Session 共享需额外引入 Redis 或改造成无状态
支持灰度发布和滚动更新,不影响在线服务负载均衡器本身需考虑高可用(如 Keepalived 双机热备)
解耦应用层,团队可按节点分工运维引入分布式后调试排错复杂度上升

适用场景

  • 用户量增长,应用服务器 CPU 或内存成为瓶颈
  • 需要保证应用层高可用,容忍短暂停机不可接受
  • 日均 PV 达到百万级以上

读写分离架构

特点

维度说明
数据架构一主多从:一个主库负责写入,多个从库负责读取
同步机制主库通过 binlog 将变更异步复制到所有从库
读扩展从库可线性扩展,读流量按比例分摊到各从库
路由策略需中间件或代码层实现读写分离路由(ShardingSphere / MyCat)
延迟控制主从之间存在同步延迟,对实时性要求极高的场景需强制读主库

优缺点

优点缺点
读性能线性扩展,增加从库即可分摊读压力主从延迟:刚写入后立刻读可能拿到旧数据
天然适合读多写少的互联网场景(资讯、电商浏览)写瓶颈未解决:主库仍是单点写入,写入压力大时无计可施
从库可承担报表、数据分析等离线查询,不影响线上业务需引入中间件或在代码层手动切数据源,增加开发复杂度
主库故障时可快速将从库提升为主库,实现故障转移主从切换需额外机制保障,可能出现数据不一致

适用场景

  • 读多写少的业务(如内容资讯、商品浏览、社交 feed 流)
  • 数据库读操作成为主要性能瓶颈
  • 读写比在 8:2 或更高

冷热分离架构

特点

维度说明
分层策略按数据访问频率分为热、温、冷三层,每层使用不同成本的存储介质
热数据近期、高频访问的数据,放 Redis/内存级存储,保证亚毫秒级响应
温数据访问频率中等的数据,放 MySQL/SSD 存储,平衡性能和成本
冷数据历史归档、极少访问的数据,放 HDFS/OSS/S3 等廉价存储
生命周期需定义迁移策略:数据按时间或访问频率自动从热层降级到冷层

优缺点

优点缺点
大幅降低存储成本:90% 冷数据用廉价存储,10% 热数据用高性能存储冷热判定逻辑复杂,需定义合理的温度标准和迁移策略
热数据查询速度不受冷数据规模影响,始终保持低延迟跨冷热存储的查询需在应用层或中间件层处理
冷数据归档至对象存储后天然支持异地容灾从冷存储恢复数据延迟高(秒到分钟级),不适合实时场景
Redis + MySQL + HDFS/OSS 组合经过大规模验证,成熟度高数据迁移过程可能影响线上性能,通常需在低峰期执行

适用场景

  • 海量数据存储,如日志系统、电商订单归档、IoT 设备数据
  • 数据有明显的时效性,越旧的数据访问越少
  • 存储成本成为主要矛盾,需要精细化控制

垂直分库架构

特点

维度说明
拆分维度按业务域(用户、商品、订单、库存)将单一数据库拆分为多个独立数据库
数据归属每个业务模块拥有自己专属的数据库,数据模型在该模块内闭环
跨库操作原有单库 SQL JOIN 失效,跨业务数据查询需在应用层分步完成并组装
事务保障跨库操作需引入分布式事务方案(Seata / Saga / TCC / 本地消息表)
独立扩缩各业务库根据自己的访问量和数据量独立扩容或缩容

优缺点

优点缺点
业务维度解耦:各业务模块数据独立,团队可并行开发跨库 Join 失效:无法用一条 SQL 跨业务查询
独立扩缩:订单库压力大不影响用户库,可针对性扩容分布式事务:下单同时扣库存需额外方案保证一致性
故障隔离:商品库宕机不会拖垮用户登录功能数据一致性保障复杂,最终一致性方案增加业务代码量
为微服务拆分打下数据层基础数据库连接池数量激增,应用需管理多个数据源

适用场景

  • 单库表数量和并发量接近上限
  • 业务模块边界清晰,模块间数据耦合度较低
  • 开始按业务域分工的团队(各业务线有独立的开发小组)

微服务架构

┌─────────────────────────────────────────────────────┐ │ 微服务九大核心原则 │ ├─────────────────────────────────────────────────────┤ │ 1. 围绕业务能力组织 │ 6. 独立部署 │ │ 2. 去中心化治理 │ 7. 基础设施自动化 (CI/CD) │ │ 3. 去中心化数据管理 │ 8. 容错设计 (熔断/降级/重试) │ │ 4. 智能端点,哑管道 │ 9. 演进式设计 │ │ 5. 产品化思维 (You build it, you run it) │ └─────────────────────────────────────────────────────┘

必备基础设施

组件常见方案职责
服务注册与发现Consul / Eureka / Nacos / K8s DNS服务实例动态上下线感知
API 网关Kong / Nginx / Spring Cloud Gateway统一入口、路由、认证、限流
配置中心Apollo / Nacos / Consul KV配置集中管理与动态刷新
负载均衡Ribbon / K8s Service / Envoy客户端/服务端负载均衡
熔断降级Hystrix / Sentinel / Resilience4j防止级联故障
链路追踪Jaeger / Zipkin / SkyWalking分布式调用链可视化
日志收集ELK / Loki + Grafana集中式日志,跨服务排查问题
监控告警Prometheus + Grafana指标收集与告警

优缺点

优点缺点
独立部署、独立演进:各服务可独立发版、独立选择技术栈运维复杂度剧增:几十上百个服务,监控排错难度指数级上升
故障隔离:支付服务挂了不影响用户浏览商品分布式固有复杂度:网络延迟、超时重试、数据一致性需全量处理
团队自治:小团队(5~8 人)全权负责自己的服务基础设施依赖重:需注册中心、配置中心、网关等全家桶
弹性伸缩:按服务粒度扩缩,热门服务多副本调试困难:一个请求跨越 5~10 个服务,定位问题需串联多节点日志
技术异构:不同服务可选用 Java/Go/Python/Node.js集成测试环境搭建复杂,数据一致性从本地事务变为分布式事务

服务间通信模式

同步模式 异步模式 -------- -------- REST (HTTP/JSON) 消息队列 (RabbitMQ) gRPC (HTTP/2 + Protobuf) 事件流 (Kafka) GraphQL 异步 HTTP (Webhook)

适用场景

  • 团队规模 20+ 人,按业务线分为多个小组
  • 业务模块间耦合度低,各模块有独立的迭代节奏
  • 高并发系统,需要按服务粒度弹性伸缩
  • 需要技术异构:不同模块适合不同的技术栈

容器编排架构

特点

维度说明
容器化每个微服务打包为 Docker 镜像,包含完整运行环境和依赖,保证环境一致性
调度与编排Kubernetes 负责容器调度、自动扩缩、滚动更新、自愈和服务发现
声明式管理通过 YAML 声明期望状态(副本数、资源限制、网络策略),控制器自动调至期望状态
弹性伸缩HPA(水平 Pod 自动扩缩)根据 CPU/内存/自定义指标自动增减 Pod 数量
CI/CD代码提交 -> 构建镜像 -> 推送到镜像仓库 -> K8s 滚动更新,全流程自动化

核心组件

组件所属平面职责
API ServerMaster集群统一入口,所有操作需经过 API Server
etcdMaster分布式 KV 存储,保存集群全部状态
SchedulerMaster负责 Pod 调度,决定 Pod 运行在哪个 Node 上
Controller ManagerMaster运行各种控制器,确保集群实际状态符合期望状态
kubeletWorker节点代理,管理本节点上的 Pod 和容器生命周期
kube-proxyWorker网络代理,维护节点上的网络规则,实现 Service 负载均衡
Container RuntimeWorker容器运行时(containerd / CRI-O),实际运行容器

优缺点

优点缺点
环境一致性:开发、测试、生产使用同一镜像学习曲线陡峭:K8s 概念繁多,团队培训成本高
自动编排与自愈:Pod 挂了自动重启,节点宕机自动迁移资源开销:K8s 集群本身占用可观资源
弹性伸缩:HPA/VPA 按负载自动增减实例排错门槛高:问题可能出现在 Pod、网络策略、存储卷等任意层
声明式 + GitOps:YAML 描述期望状态,Git 即单一事实来源版本升级风险:K8s 版本迭代快,API 弃用可能导致已有配置失效
资源利用率高:容器共享内核,密度远超虚拟机网络和存储模型复杂,需要专门的 CNI 和 CSI 插件

适用场景

  • 微服务数量达到几十上百个,手动运维不可行
  • 需要标准化交付流程,保证多环境一致性
  • 追求极致资源利用率和弹性伸缩能力
  • 团队具备一定的云原生基础设施能力

横向对比总结

架构演进路线

单机 ──> 应用数据分离 ──> 应用集群 ──> 读写分离 ──> 冷热分离 │ ▼ 垂直分库 ──> 微服务 ──> 容器编排

架构选型决策矩阵

简单 <──────────────────────────> 复杂 快速交付 高扩展性 单机架构 ████████░░░░░░░░░░░░░░░░░░░ 初创/MVP/小团队 应用数据分离 ██████████░░░░░░░░░░░░░░░░░░ 单机资源瓶颈 应用集群 ████████████░░░░░░░░░░░░░░░░ 应用层高可用需求 读写分离 ████████████████░░░░░░░░░░░░ 读多写少/DB 读瓶颈 冷热分离 ██████████████████░░░░░░░░░░ 海量数据/存储成本 垂直分库 ████████████████████░░░░░░░░ 业务耦合/单库瓶颈 微服务 ████████████████████████░░░░ 大规模团队/独立迭代 容器编排 ████████████████████████████ 标准化交付/弹性伸缩

各架构核心数据对比

架构耦合度复杂度可扩展性性能运维成本团队规模核心瓶颈
单机最高最低1~5单点故障/资源上限
应用数据分离中高5~10应用和 DB 各为单点
应用集群10~20数据库单点
读写分离中高中高10~30主库写入瓶颈/主从延迟
冷热分离中高中高10~30冷热路由/数据迁移
垂直分库中低中高中高中高中高20~50跨库查询/分布式事务
微服务20+服务治理/运维复杂度
容器编排最高最高最高50+K8s 本身的学习和维护

架构演进阶段建议

阶段一:初创验证 (1~5 人) -> 单机架构 -> 目标:快速验证业务,活下来 阶段二:初步增长 (5~15 人) -> 应用数据分离 + 应用集群 -> 目标:解决单点、保证高可用 阶段三:快速增长 (15~50 人) -> 读写分离 + 冷热分离 + 垂直分库 -> 目标:解决数据库瓶颈、降低存储成本、业务解耦 阶段四:规模化 (50+ 人) -> 微服务 + 容器编排 -> 目标:团队自治、独立交付、弹性伸缩 核心原则:架构演进应由业务量级驱动,而非技术崇拜。 不要为了微服务而微服务,避免过度设计。

封面图自取:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询