互联网架构完整演进逻辑总结
从单机到云原生,一步步拆解互联网架构迭代全过程
架构演进全景图
%%{init: {'theme': 'dark', 'themeVariables': { 'fontSize': '18px', 'nodeBorder': '#666', 'lineColor': '#888', 'clusterBkg': '#1a1a2e' }}%%
graph TB
subgraph 初期阶段
A["单机架构"]
B["应用与数据库拆分"]
C["应用集群 + 负载均衡"]
end
subgraph 数据库优化阶段
D["多级缓存"]
E["读写分离"]
F["分库分表"]
end
subgraph 安全与检索阶段
G["CDN + 反向代理"]
H["搜索引擎 + 非关系型数据库"]
end
subgraph 微服务阶段
I["分布式架构"]
J["消息队列"]
K["微服务架构"]
end
subgraph 云原生阶段
L["Docker 容器"]
M["K8s 编排"]
N["云原生架构"]
end
A --> B --> C --> D --> E --> F --> G --> H --> I --> J --> K --> L --> M --> N
style A fill:#4CAF50,stroke:#2E7D32,color:#fff,fontWeight:bold
style B fill:#66BB6A,stroke:#388E3C,color:#fff,fontWeight:bold
style C fill:#42A5F5,stroke:#1976D2,color:#fff,fontWeight:bold
style D fill:#26C6DA,stroke:#00838F,color:#fff,fontWeight:bold
style E fill:#78909C,stroke:#455A64,color:#fff,fontWeight:bold
style F fill:#FFA726,stroke:#F57C00,color:#fff,fontWeight:bold
style G fill:#FF7043,stroke:#D84315,color:#fff,fontWeight:bold
style H fill:#AB47BC,stroke:#7B1FA2,color:#fff,fontWeight:bold
style I fill:#7E57C2,stroke:#512DA8,color:#fff,fontWeight:bold
style J fill:#EF5350,stroke:#C62828,color:#fff,fontWeight:bold
style K fill:#EC407A,stroke:#AD1457,color:#fff,fontWeight:bold
style L fill:#5C6BC0,stroke:#303F9F,color:#fff,fontWeight:bold
style M fill:#26A69A,stroke:#00695C,color:#fff,fontWeight:bold
style N fill:#8D6E63,stroke:#4E342E,color:#fff,fontWeight:bold
一、初期基础架构演进
1. 单机架构
网站初期用户少,把应用程序、数据库部署在同一台服务器,搭建简单、成本最低。
graph TB
Client[用户浏览器] --> Server[单台服务器]
subgraph Server
App[应用程序] --- DB[数据库]
App --- FS[文件存储]
end
style Server fill:#E8F5E9,stroke:#4CAF50
style App fill:#66BB6A,color:#fff
style DB fill:#42A5F5,color:#fff
style FS fill:#FFA726,color:#fff
2. 应用与数据库拆分
用户增多后,单机资源争抢严重,拆分独立应用服务器、数据库服务器,各司其职,提升稳定性。
graph TB
Client[用户浏览器] --> AppServer[应用服务器]
AppServer --> DBServer[数据库服务器]
AppServer --> FileServer[文件服务器]
style AppServer fill:#66BB6A,color:#fff
style DBServer fill:#42A5F5,color:#fff
style FileServer fill:#FFA726,color:#fff
3. 应用集群 + 负载均衡
单台应用服务器扛不住高并发,多台服务器组成集群;通过负载均衡分配流量,实现水平扩展、故障自动屏蔽,保障高可用。
graph TB
Client[用户浏览器] --> LB[负载均衡 Nginx]
LB --> App1[应用服务器 1]
LB --> App2[应用服务器 2]
LB --> App3[应用服务器 3]
App1 --> DB[数据库服务器]
App2 --> DB
App3 --> DB
style LB fill:#FF9800,color:#fff
style App1 fill:#66BB6A,color:#fff
style App2 fill:#66BB6A,color:#fff
style App3 fill:#66BB6A,color:#fff
style DB fill:#42A5F5,color:#fff
二、数据库性能优化阶段
1. 多级缓存
利用内存读写远快于磁盘的特点,搭建浏览器、本地、分布式三层缓存,拦截大部分查询请求,大幅降低数据库压力,提升响应速度。
graph LR
Client[用户] --> BC[浏览器缓存]
BC --> LC[本地缓存]
LC --> RC[分布式缓存 Redis]
RC --> DB[数据库]
style BC fill:#E8F5E9,stroke:#4CAF50
style LC fill:#E3F2FD,stroke:#2196F3
style RC fill:#FFF3E0,stroke:#FF9800
style DB fill:#FCE4EC,stroke:#F44336
2. 读写分离
数据库写操作慢且易锁表,拆分主库负责写入、从库负责读取,适配互联网读多写少的特性,规避读写互相阻塞。
graph TB
App[应用服务器] -->|写操作| Master[(主库 Master)]
App -->|读操作| Slave1[(从库 Slave 1)]
App -->|读操作| Slave2[(从库 Slave 2)]
Master -->|数据同步| Slave1
Master -->|数据同步| Slave2
style Master fill:#F44336,color:#fff
style Slave1 fill:#42A5F5,color:#fff
style Slave2 fill:#42A5F5,color:#fff
style App fill:#66BB6A,color:#fff
3. 分库分表
数据量暴增后,通过垂直分库按业务拆分成用户、商品、订单等独立库;通过水平分表把超大表拆分成多张小表,实现海量数据分布式存储。
graph TB
App[应用服务器] --> Router[分库分表中间件]
subgraph 垂直分库
Router --> UserDB[(用户库)]
Router --> ProductDB[(商品库)]
Router --> OrderDB[(订单库)]
end
subgraph 水平分表
OrderDB --> Order01[订单表_01]
OrderDB --> Order02[订单表_02]
OrderDB --> Order03[订单表_03]
end
style Router fill:#FF9800,color:#fff
style UserDB fill:#42A5F5,color:#fff
style ProductDB fill:#42A5F5,color:#fff
style OrderDB fill:#42A5F5,color:#fff
三、网络安全与检索能力升级
1. CDN + 反向代理
CDN 在全国布设节点,就近分发静态资源,提升异地用户访问速度;反向代理隐藏后端真实服务器,防护攻击、做流量与权限校验。
graph TB
Client[用户] --> CDN[CDN 节点就近分发]
Client --> Nginx[反向代理 Nginx]
CDN -->|静态资源| Nginx
Nginx --> App1[应用服务器 1]
Nginx --> App2[应用服务器 2]
Nginx --> App3[应用服务器 3]
style CDN fill:#FF9800,color:#fff
style Nginx fill:#9C27B0,color:#fff
style App1 fill:#66BB6A,color:#fff
style App2 fill:#66BB6A,color:#fff
style App3 fill:#66BB6A,color:#fff
2. 搜索引擎 + 非关系型数据库
解决传统数据库模糊查询、全文检索、多维统计慢的问题,适配电商搜索、热搜等复杂业务场景,支持非结构化数据存储与高并发扩展。
graph LR
App[应用服务器] --> MySQL[(MySQL)]
App --> ES[Elasticsearch 搜索引擎]
App --> MongoDB[(MongoDB)]
App --> Redis[(Redis)]
style MySQL fill:#42A5F5,color:#fff
style ES fill:#FF9800,color:#fff
style MongoDB fill:#4CAF50,color:#fff
style Redis fill:#F44336,color:#fff
四、从单体到微服务架构
1. 分布式架构
把臃肿的单体应用拆分成独立子系统,单独部署扩容;引入 RPC 实现跨服务远程调用,搭配服务注册与发现中心,统一管理服务地址。
graph TB
Gateway[API 网关] --> UserSvc[用户服务]
Gateway --> OrderSvc[订单服务]
Gateway --> ProductSvc[商品服务]
UserSvc -->|RPC| OrderSvc
OrderSvc -->|RPC| ProductSvc
Registry[注册中心] --- UserSvc
Registry --- OrderSvc
Registry --- ProductSvc
style Gateway fill:#9C27B0,color:#fff
style Registry fill:#FF9800,color:#fff
style UserSvc fill:#66BB6A,color:#fff
style OrderSvc fill:#42A5F5,color:#fff
style ProductSvc fill:#F44336,color:#fff
2. 消息队列
实现服务解耦,不用同步等待响应,还能削峰填谷,应对流量突增,服务宕机也不丢失消息。
graph LR
Producer[生产者服务] --> MQ[消息队列 Kafka/RabbitMQ]
MQ --> Consumer1[消费者服务 A]
MQ --> Consumer2[消费者服务 B]
MQ --> Consumer3[消费者服务 C]
style MQ fill:#FF9800,color:#fff
style Producer fill:#66BB6A,color:#fff
style Consumer1 fill:#42A5F5,color:#fff
style Consumer2 fill:#42A5F5,color:#fff
style Consumer3 fill:#42A5F5,color:#fff
3. 微服务架构
进一步细拆功能为独立小服务,单一服务只做一件事,可独立开发、上线、扩容,适配不同技术栈,节省资源、降低故障影响范围;配套全链路追踪、限流熔断降级、服务治理,支撑千万甚至亿级流量。
%%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '14px' }}%%
graph TB
Client[用户] --> Gateway[API 网关]
Gateway --> UserSvc[用户服务]
Gateway --> OrderSvc[订单服务]
Gateway --> ProductSvc[商品服务]
Gateway --> PaySvc[支付服务]
Gateway --> NotifySvc[通知服务]
subgraph 基础设施
Registry[注册中心]
Config[配置中心]
Monitor[链路追踪]
Sentinel[限流熔断]
end
UserSvc --- Registry
OrderSvc --- Registry
ProductSvc --- Registry
PaySvc --- Registry
style Gateway fill:#9C27B0,color:#fff
style UserSvc fill:#66BB6A,color:#fff
style OrderSvc fill:#42A5F5,color:#fff
style ProductSvc fill:#F44336,color:#fff
style PaySvc fill:#FF9800,color:#fff
style NotifySvc fill:#00BCD4,color:#fff
style Registry fill:#795548,color:#fff
style Config fill:#795548,color:#fff
style Monitor fill:#795548,color:#fff
style Sentinel fill:#795548,color:#fff
五、容器化与云原生时代
1. Docker 容器
将代码、依赖、运行环境打包成镜像,一次打包随处运行,解决开发与生产环境不一致的问题。
graph LR
subgraph Docker镜像
Code[代码]
Deps[依赖库]
Runtime[运行环境]
end
Docker镜像 --> Dev[开发环境]
Docker镜像 --> Test[测试环境]
Docker镜像 --> Prod[生产环境]
style Docker镜像 fill:#7986CB,stroke:#303F9F,color:#fff
style Code fill:#90CAF9,stroke:#1976D2,color:#333
style Deps fill:#90CAF9,stroke:#1976D2,color:#333
style Runtime fill:#90CAF9,stroke:#1976D2,color:#333
style Dev fill:#66BB6A,stroke:#388E3C,color:#fff
style Test fill:#FFA726,stroke:#F57C00,color:#fff
style Prod fill:#EF5350,stroke:#C62828,color:#fff
2. K8s 编排
统一管理大批量容器,实现自动扩缩容、故障自愈,降低人工运维成本。
graph TB
K8s[Kubernetes 集群] --> Node1[节点 1]
K8s --> Node2[节点 2]
K8s --> Node3[节点 3]
Node1 --> Pod1[Pod: 用户服务 x3]
Node2 --> Pod2[Pod: 订单服务 x2]
Node3 --> Pod3[Pod: 商品服务 x4]
K8s -->|自动扩缩容| HPA[HPA 水平自动伸缩]
K8s -->|故障自愈| Heal[自动重启/迁移]
style K8s fill:#326CE5,color:#fff
style Node1 fill:#66BB6A,color:#fff
style Node2 fill:#66BB6A,color:#fff
style Node3 fill:#66BB6A,color:#fff
3. 云原生架构
依托云平台按需申领算力、内存、带宽,用完释放,无需自建机房囤服务器,实现资源弹性伸缩、自动化运维。
graph TB
subgraph 云平台
Compute[弹性计算]
Storage[对象存储]
Network[虚拟网络]
DBaaS[数据库即服务]
MQaaS[消息队列即服务]
end
App[微服务应用] --> Compute
App --> Storage
App --> Network
App --> DBaaS
App --> MQaaS
Monitor[云监控] --> Compute
Monitor --> Storage
style 云平台 fill:#E3F2FD,stroke:#2196F3
style Compute fill:#66BB6A,color:#fff
style Storage fill:#42A5F5,color:#fff
style Network fill:#FF9800,color:#fff
style DBaaS fill:#F44336,color:#fff
style MQaaS fill:#9C27B0,color:#fff
style Monitor fill:#795548,color:#fff
核心架构思维
- 没有万能架构,贴合业务阶段才最好,初创无需盲目上微服务;
- 架构演进核心逻辑:用空间换时间、用复杂度换性能;
- 所有架构设计,始终围绕高性能、高可用、可伸缩、可扩展、高安全五大目标。