互联网架构演进精读:从单机到云原生

本文基于经典互联网架构演进故事,详细拆解了技术架构从单机应用逐步发展为云原生体系的完整过程。每个阶段的变化都由业务需求推动,解决了特定的性能、可用性或维护性问题。
参考视频:【互联网架构就这?1个故事讲清楚】 https://www.bilibili.com/video/BV1M15Q6eEhL/?share_source=copy_web\&vd_source=ac463602dd8d0886e2a38fe9ce293aea

一、 架构演进全景速览

演进阶段 核心目标 / 解决的问题 引入的关键技术/组件 技术栈选型举例
1. 单机架构 快速搭建应用,验证商业模式 LAMP 技术栈 Linux + Apache + MySQL + PHP
2. 应用与数据分离 解决资源争抢,提升基础性能与可用性 应用服务器 + 数据库服务器 Tomcat + 独立 MySQL
3. 应用服务器集群 应对高并发,实现水平扩展和高可用 负载均衡、集群 Nginx + Tomcat 集群
4. 数据库读写分离 解决读写阻塞,提升数据库并发能力 主从复制、读写分离中间件 MySQL 主从 + ShardingSphere
5. 引入多级缓存 将查询从毫秒级优化到微秒级,降低数据库压力 浏览器缓存、本地缓存、分布式缓存 Caffeine + Redis + CDN
6. 分库分表 突破单库单表容量瓶颈,实现海量存储 垂直分库、水平分表、数据库中间件 ShardingSphere + MySQL
7. 引入CDN和反向代理 加速跨地域访问,增强系统安全性 CDN、反向代理 阿里云CDN + Nginx
8. 引入搜索引擎和NoSQL 实现复杂查询,应对多样化数据结构 搜索引擎、NoSQL 数据库 Elasticsearch + MongoDB
9. 分布式服务架构 解决单体应用维护难题,实现模块独立部署 RPC、注册中心、消息队列 Dubbo + Zookeeper + RocketMQ
10. 微服务架构 细粒度拆分,支持独立交付和极致弹性 API 网关、全链路追踪、熔断器 Spring Cloud + Sentinel
11. 容器化与云原生 解决微服务运维复杂性,实现自动化弹性 容器、容器编排、云平台 Docker + Kubernetes

二、 演进路线图

#mermaid-svg-KPv8A5gbeqwCm2by{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-KPv8A5gbeqwCm2by .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-KPv8A5gbeqwCm2by .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-KPv8A5gbeqwCm2by .error-icon{fill:#552222;}#mermaid-svg-KPv8A5gbeqwCm2by .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-KPv8A5gbeqwCm2by .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-KPv8A5gbeqwCm2by .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-KPv8A5gbeqwCm2by .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-KPv8A5gbeqwCm2by .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-KPv8A5gbeqwCm2by .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-KPv8A5gbeqwCm2by .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-KPv8A5gbeqwCm2by .marker{fill:#333333;stroke:#333333;}#mermaid-svg-KPv8A5gbeqwCm2by .marker.cross{stroke:#333333;}#mermaid-svg-KPv8A5gbeqwCm2by svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-KPv8A5gbeqwCm2by p{margin:0;}#mermaid-svg-KPv8A5gbeqwCm2by .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-KPv8A5gbeqwCm2by .cluster-label text{fill:#333;}#mermaid-svg-KPv8A5gbeqwCm2by .cluster-label span{color:#333;}#mermaid-svg-KPv8A5gbeqwCm2by .cluster-label span p{background-color:transparent;}#mermaid-svg-KPv8A5gbeqwCm2by .label text,#mermaid-svg-KPv8A5gbeqwCm2by span{fill:#333;color:#333;}#mermaid-svg-KPv8A5gbeqwCm2by .node rect,#mermaid-svg-KPv8A5gbeqwCm2by .node circle,#mermaid-svg-KPv8A5gbeqwCm2by .node ellipse,#mermaid-svg-KPv8A5gbeqwCm2by .node polygon,#mermaid-svg-KPv8A5gbeqwCm2by .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-KPv8A5gbeqwCm2by .rough-node .label text,#mermaid-svg-KPv8A5gbeqwCm2by .node .label text,#mermaid-svg-KPv8A5gbeqwCm2by .image-shape .label,#mermaid-svg-KPv8A5gbeqwCm2by .icon-shape .label{text-anchor:middle;}#mermaid-svg-KPv8A5gbeqwCm2by .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-KPv8A5gbeqwCm2by .rough-node .label,#mermaid-svg-KPv8A5gbeqwCm2by .node .label,#mermaid-svg-KPv8A5gbeqwCm2by .image-shape .label,#mermaid-svg-KPv8A5gbeqwCm2by .icon-shape .label{text-align:center;}#mermaid-svg-KPv8A5gbeqwCm2by .node.clickable{cursor:pointer;}#mermaid-svg-KPv8A5gbeqwCm2by .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-KPv8A5gbeqwCm2by .arrowheadPath{fill:#333333;}#mermaid-svg-KPv8A5gbeqwCm2by .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-KPv8A5gbeqwCm2by .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-KPv8A5gbeqwCm2by .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KPv8A5gbeqwCm2by .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-KPv8A5gbeqwCm2by .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KPv8A5gbeqwCm2by .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-KPv8A5gbeqwCm2by .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-KPv8A5gbeqwCm2by .cluster text{fill:#333;}#mermaid-svg-KPv8A5gbeqwCm2by .cluster span{color:#333;}#mermaid-svg-KPv8A5gbeqwCm2by div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-KPv8A5gbeqwCm2by .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-KPv8A5gbeqwCm2by rect.text{fill:none;stroke-width:0;}#mermaid-svg-KPv8A5gbeqwCm2by .icon-shape,#mermaid-svg-KPv8A5gbeqwCm2by .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KPv8A5gbeqwCm2by .icon-shape p,#mermaid-svg-KPv8A5gbeqwCm2by .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-KPv8A5gbeqwCm2by .icon-shape .label rect,#mermaid-svg-KPv8A5gbeqwCm2by .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KPv8A5gbeqwCm2by .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-KPv8A5gbeqwCm2by .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-KPv8A5gbeqwCm2by :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 单机架构

应用 + 数据库
应用与数据分离
引入缓存
应用服务器集群
数据库读写分离
CDN与反向代理
分库分表
分布式服务架构
微服务架构
容器化与云原生

三、 各阶段深度解析

1. 单机架构

互联网产品"从0到1"阶段的必然选择。所有应用、数据库、文件存储都部署在同一台服务器上。

  • 核心目标:快速上线,验证商业想法。
  • 经典技术 :一套 LAMP 环境即可完成搭建。
  • 原则:单机够用就好,拒绝过度设计。

2. 应用与数据分离

流量稍有增长,应用和数据库争抢 CPU、内存、磁盘 I/O,导致整体性能急剧下降。

  • 做法:将应用服务器和数据库服务器物理分离。
  • 收益:两者各司其职,释放资源,同时服务可用性得到提升。

3. 应用服务器集群

单台应用服务器处理能力到达极限,无法通过垂直升级无限提升。

  • 做法 :通过增加服务器实现水平扩展
    • 负载均衡:Nginx / HAProxy 将请求均匀分发到集群所有节点。
    • 高可用:单节点故障时自动摘除,流量切换至健康节点。
  • 核心问题:如何解决 session 共享(通常引入分布式 session 方案)。

4. 数据库读写分离

集群化后,大量读请求直接将数据库压力拉满。绝大多数互联网场景都是"读多写少"。

  • 做法:部署主库(负责写)与从库(负责读),通过主从复制保持数据同步。
  • 好处:写入不受读请求影响,读取可横向扩展从库数量。
  • 挑战:主从延迟带来的短暂不一致,需要在业务上做一定妥协。

5. 多级缓存

大量重复的读请求仍然会穿透到数据库,而内存读取速度远快于磁盘。

  • 做法 :在数据库前构建多层缓存体系。
    • 浏览器缓存:缓存静态资源。
    • 应用本地缓存(如 Caffeine):减少进程外调用。
    • 分布式缓存(如 Redis):集群共享,应对海量数据。
  • 效果:热点数据读取从毫秒级降至微秒级,数据库压力骤降。

6. 分库分表

系统运行多年后,单库单表数据量过大,即使所有优化都用尽,写入也会成为瓶颈。

  • 垂直分库:按业务将不同表拆分到不同数据库(如用户库、订单库)。
  • 水平分表:将一张大表按一定规则(如哈希取模)拆成多张结构相同的小表,分散存储。
  • 工具:ShardingSphere、MyCat 等中间件屏蔽分片细节。

7. CDN 与反向代理

用户遍布全国,物理距离导致访问延迟;且系统直接暴露公网风险极高。

  • CDN:将静态资源缓存到离用户最近的边缘节点,智能 DNS 返回最近节点 IP。
  • 反向代理:Nginx 等组件作为内网屏障,提供安全防护、流量清洗、SSL 卸载等功能。
  • 收益:加速静态资源加载,隐藏真实后端服务器。

8. 搜索引擎与 NoSQL

关系型数据库在模糊查询、全文搜索、海量非结构化数据处理上表现不佳。

  • 搜索引擎(Elasticsearch):基于倒排索引实现近乎实时的全文检索,适合商品搜索、日志分析。
  • NoSQL(MongoDB, HBase):灵活的数据模型,高扩展性,适用于用户行为、社交动态等场景。
  • 思路:让专业的工具做专业的事,不强行用关系型数据库处理所有需求。

9. 分布式服务架构

业务不断膨胀,单体"巨石"应用导致代码冲突、发布耦合、无法按需扩容。

  • 做法:按业务边界将系统拆分为多个独立服务(用户服务、订单服务等)。
  • 核心组件
    • RPC 框架(Dubbo, gRPC):实现高效的远程服务调用。
    • 注册中心(Zookeeper, Nacos):管理服务的动态地址,实现服务发现。
    • 消息队列(RocketMQ, Kafka):异步解耦,削峰填谷,保证最终一致性。
  • 收益:各服务可独立开发、独立部署、独立扩容。

10. 微服务架构

分布式服务运行一段时间后,会发现部分服务内部仍然高度耦合,需要进一步拆分。

  • 做法:遵循"单一职责",拆分至更小粒度,每个服务可以有自己的数据库、技术栈。
  • 治理挑战 :服务数量激增,必须建立健全的治理体系。
    • API 网关:统一入口,处理认证、限流、路由。
    • 全链路追踪(SkyWalking, Jaeger):快速定位慢调用的根因。
    • 熔断降级(Sentinel):防止单点故障引发连锁雪崩。
  • 关键转变:从代码层面的复用转变为服务层面的复用。

11. 容器化与云原生

成百上千个微服务的手动部署、环境不一致、资源利用率低等问题变得难以忍受。

  • 容器化(Docker):将应用及其依赖打包为标准化镜像,实现"一次构建,到处运行"。
  • 容器编排(Kubernetes):自动化调度、扩缩容、自愈,是分布式操作系统的内核。
  • 云平台:利用云的弹性资源,实现按需分配、自动伸缩,将运维工作进一步托管。
  • 最终形态:开发人员只需关注代码,由 CI/CD 流水线和云平台完成交付与运维。

四、 架构演进的核心思维

  1. 没有银弹,只有最合适的架构

    架构演进是被业务逼出来的,初创团队不应盲目追求微服务或云原生。

  2. 本质是"空间换时间,复杂度换性能"

    缓存用空间换时间,服务拆分用复杂度换可扩展性。每一次演进都有代价,需要权衡取舍。

  3. 始终围绕五大目标设计

    • 高性能:缓存、异步、并行处理。
    • 高可用:冗余、故障转移、熔断降级。
    • 可伸缩:水平扩展、分库分表。
    • 可扩展:模块化、服务化,便于新增功能。
    • 安全性:反向代理隔离、网关鉴权、数据加密。

从一台服务器到全球分布的云原生容器集群,这套演进脉络是互联网技术发展的缩影。理解它,就能更好地定位系统现状,预判技术瓶颈,并做出理性的架构决策。

相关推荐
运维老郭2 小时前
【Kubernetes 性能排查】线上服务突然变慢?SRE 的 4 层排查法
运维·云原生·kubernetes
正在走向自律2 小时前
架构进阶:从 Docker 环境变量到 Nacos 统一配置中心实战
docker·容器·架构
2603_954708312 小时前
微电网分布式电源接入技术的相关国家标准有哪些?
人工智能·分布式·物联网·架构·系统架构·能源
绝知此事2 小时前
Redis 从入门到精通:Spring Boot 实战三部曲(二)—— 进阶原理与高可用架构
spring boot·redis·架构
炸炸鱼.10 小时前
Kubernetes高级调度02:Taint/Toleration、Cordon/Drain、亲和性与反亲和性完全指南
云原生·容器·kubernetes
hai31524754310 小时前
RISC-V核E203核前向旁路的架构性顽疾
驱动开发·架构·硬件架构·硬件工程·risc-v
意图共鸣10 小时前
意图共鸣科技《认知智能白皮书》——感知与执行分离:认知架构(CA)如何重塑大模型底层结构
人工智能·架构
王莎莎-MinerU11 小时前
MinerU 深度技术解析:从架构原理到生产部署的全面指南
css·人工智能·自然语言处理·架构·ocr·个人开发
canonical_entropy11 小时前
Harness Engineering 之外:从非线性动力系统控制理解吸引子引导工程
架构·aigc·ai编程