架构演进之路:从单机到分布式
想象这样一个场景:电商系统初期运行平稳,但随着用户量突破两千万,日活激增,系统开始频频告警。数据库 CPU 持续飙红,查询响应时间从几十毫秒飙升到数秒,页面加载缓慢,用户抱怨不断。这就是单机架构的'天花板'。
要突破这个瓶颈,必须拥抱分布式架构。但分布式并非银弹,它是一个循序渐进、充满挑战的演进过程。作为 Redis 系列的首篇,本文将聚焦于回答一个根本问题:我们的架构为什么会走到需要 Redis 这一步?让我们从最初的起点开始。
单机架构的局限
核心定义与应用场景
单机架构(Monolithic Architecture),顾名思义,是指一个完整的应用系统以及支撑其运行所必需的所有基础设施组件,都被部署在单一的一台物理服务器或虚拟机实例上。
典型组件通常部署在同一台机器:
- Web 服务器: 如 Nginx, Apache Tomcat,负责处理 HTTP(S) 请求。
- 应用服务器/业务逻辑: 如 Spring Boot 应用,承载核心业务处理逻辑。
- 数据库: 如 MySQL, PostgreSQL,负责数据的持久化存储与访问。
- 文件存储: 可能直接使用服务器本地磁盘。
- 缓存: 如本地的 Ehcache,或小型的 Redis 实例。
这种架构适合早期创业公司、原型验证阶段或小范围使用的内部系统。所有代码通常打包在一个大的可部署单元中,部署时整体复制到服务器运行。
优势与缺点
单机架构的吸引力在于其极致的简单性,特别适合项目初期和资源有限的情况:
- 开发简单: 模块间通过本地方法调用通信,调试直观。
- 部署运维简单: 一键部署,环境单一,监控直接。
- 测试相对简单: 端到端测试可以在单一环境中完成。
- 初始成本低: 硬件和运维人力成本最低。
然而,当业务增长时,这些优点会迅速转化为制约发展的枷锁:性能瓶颈、可用性低、存储容量受限、扩展性差、技术选型僵化以及持续交付困难。
为了解决单机架构的核心痛点,我们自然地需要将系统拆解,将不同的组件部署到多台独立的、通过网络连接的机器上协同工作,这就是分布式架构的起点。
何为分布式
分布式系统是由一组通过网络互联的独立计算机协同工作,对终端用户呈现为单一、连贯系统的计算模型。其核心目标包括:
| 目标 | 内涵解析 | 典型场景 |
|---|---|---|
| 高并发 | 利用多节点并行处理能力,分散用户请求负载 | 电商秒杀、春运抢票 |
| 高可用 | 通过冗余设计消除单点故障 | 支付系统、在线医疗平台 |
| 可扩展 | 支持水平扩展,通过增加节点线性提升系统容量 | 社交平台用户量激增 |
| 高性能 | 将计算/存储任务分散到多节点执行 | 大数据实时分析 |
| 大数据存储 | 突破单机存储极限,实现 PB/EB 级数据的安全存储 | 物联网日志、用户行为数据仓库 |
架构演进步骤
1. 数据库分离
在典型的单机部署架构中,应用服务器与数据库服务同处一物理机。这种架构存在致命缺陷:资源争抢严重(CPU/内存冲突、I/O 瓶颈),互相影响导致稳定性差,且优化与扩展困难。
解决方案: 将数据库服务从应用服务器所在的物理环境剥离,部署到专用的、性能更优的独立服务器上。


