分布式系统.设计原则
原则 | 说明 |
---|
分层解耦 | 模块化、微服务化,职责清晰 |
横向扩展 | 无状态设计,支持动态扩容 |
冗余容错 | 多实例、多可用区,自动故障转移 |
异步削峰 | 消息队列解耦,提升系统吞吐 |
缓存优化 | 多级缓存减轻数据库负担 |
限流降级 | 保护核心服务,优雅应对过载 |
监控恢复 | 全链路监控,快速定位与恢复 |
安全防护 | 接口安全、数据安全、防攻击 |
单体架构
- 所有功能都在一个项目中开发,并部署在同一台服务器,一个功能的阻塞会导致整个应用阻塞
- 随着业务模块的不断拓展,代码的可读性、维护性越来越差,测试成本也越来越高

单体架构【集群】

- 定义:对外是一个整体,对内由多个单体应用共同对外提供服务
- 优点:
横向扩展(Scale Out):水平增加机器来提升系统处理业务的速度
负载均衡(Load Balancing):将请求均匀地分配到多个节点上,提升系统处理业务的速度
高可用性(High Availability):一台机器宕机了,其它机器还能继续工作
Session共享问题:通过SpringSession + Redis实现分布式Session共享
单体应用内部业务没有做拆分,一个业务模块的阻塞会导致整个单体应用的阻塞
分布式
- 本质是用多个独立节点的协作来解决单节点无法处理的高可用、高并发问题
- 单体架构的集群部署本质上也是分布式的一种
- 优点:
高可用性:单个节点故障不会导致整个系统崩溃(一台机器挂了,其它机器还能继续工作)
可扩展性:当业务增长时,可通过增加节点(而非替换单台服务器)提升系统能力(如电商大促时临时扩容服务器)
地理灵活性:节点分布在不同区域,可降低用户访问延迟(如国内用户访问国内节点,海外用户访问海外节点)
网络不可靠:延迟、丢包、分区(节点间通信中断)可能导致数据不一致
一致性难题:如何保证多个节点的数据同步(例如银行转账时,扣款和收款节点必须同时成功或同时失败,否则会出现 “钱丢了” 的问题)
容错复杂性:需要设计机制检测节点故障、自动切换任务(如 “主从复制”“集群选举”)
性能瓶颈:节点间通信的开销可能抵消分布式带来的优势,需优化网络协议和数据传输效率
- SOA(面向服务的架构)和 微服务(Microservices) 都是用于构建分布式系统的,核心思想都是将一个大型的单体应用拆分为多个服务,但两者在理念、设计粒度、技术实现和适用场景上有显著的区别
SOA
- SOA是一种粗粒度的、以服务为中心的架构模式,它强调将业务功能封装为独立服务并通过企业级通信协议(如SOAP/ WSDL/UDDI)交互,通常运行在企业服务总线(ESB)之上
- 实现企业内不同系统之间的服务共享与集成,解决信息孤岛问题
微服务
- 微服务是一种细粒度的、去中心化的架构风格,将一个应用拆分成一组小而专一、松耦合、独立部署的服务,并通过轻量级通信机制(如HTTP/REST、gRPC)进行交互
- 提升系统的可扩展性、灵活性和敏捷性
分布式系统复杂性:网络延迟、服务发现、容错处理
运维成本高:需配套 DevOps、监控、日志、链路追踪等
数据一致性:跨服务事务管理难度大
团队协作:需要成熟的组织与流程支持