跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言java

架构设计基础:系统架构演进历程(初始阶段至读写分离)

综述由AI生成互联网系统架构从初始阶段的单服务器模式,逐步演进至服务器拆分、引入缓存、构建集群以及实现数据库读写分离的过程。阐述了各阶段面临的瓶颈及对应的解决方案,如通过资源分散缓解性能压力,利用缓存减少数据库负载,使用负载均衡提升并发能力,以及通过主从复制平衡读写请求。旨在帮助读者理解系统规模扩大时的架构演化路径。

CoderByte发布于 2026/3/25更新于 2026/5/3130 浏览
架构设计基础:系统架构演进历程(初始阶段至读写分离)

初级阶段

我们从网站的初始阶段开始说起。大型网站都是从小网站发展起来的。假如我们现在是一个创业公司,做一个项目,设计了一个架构,然后上手开发了一个 Web 程序,只有一台物理机器,把应用程序部署到这台服务器上。

还需要好多的文件,比如用户上传的文件,需要用到一个磁盘目录或者说是一个文件系统,不过都是在这台服务器上。然后应用程序还需要数据库。

单服务器架构模型

这就是我们最开始的一个网站,很简单的一个模型。因为最开始这个项目使用的人特别少,数据量也不是很大,用一台服务器足够了。应用程序、数据库和文件的所有的资源在一台机器上,通常服务器的操作系统用 Linux。

服务器拆分

随着网站业务的进一步发展,一台服务器无法满足需求。越来越多的用户访问了,导致性能越来越差;越来越多的数据,导致磁盘空间越来越不够。

那怎么优化呢?做服务器拆分。目前阶段来说,公司开发项目大部分都是这么做的,把文件拿出去,把数据库拿出去,服务器上面只放着我们的应用程序。文件单独放到一个服务器上,数据库单独放到一个服务器上,分别用三台机器去部署。

三台机器部署模型

原来只有一台机器,现在有三台,就把一台服务器的压力分散到了三台服务器之上。这样的话,系统又能扛一段时间。并且这样做还有一个好处,可以按需分配资源。比如应用服务器需要处理大量的业务逻辑,需要的 CPU 资源比较多,因此可以给它更快更强大的 CPU;数据库服务器需要更快的写入速度和查询速度,可以给它更快的硬盘;还有文件服务器,需要有更快的上传下载的速度以及更大的存储空间,就可以扩大这边的带宽。

缓存

然后再往后走,项目保持这个样子运行一段时间之后,再一次面临挑战。比如数据库压力太大了,数据越来越多,用户请求一个接口的时候响应越来越慢,导致用户的体验受到影响,这个时候该怎么做呢?

可以考虑加缓存。网站访问数据遵循二八定律,也就是说 80% 的业务操作集中在 20% 的数据上。比如在电商系统中,商品的详情页承担了大量的用户请求;淘宝买家浏览的商品集中在少部分交易数比较多、好评比较多的商品;上百度搜索的关键词,也是集中在少部分热门的词汇上。既然是业务集中访问的一小部分数据,那么如果把这一小部分数据直接缓存到内存中,就可以更快的响应用户,也可以减少数据库的压力,提高整个网站的响应速度,改善数据库的写入性能。

缓存架构示意图

加缓存有两种情况,一种是在应用内部加缓存,就是本地缓存,它受到应用服务器内存的限制。还有一种缓存,把它存到分布式缓存服务器上,就是单独的缓存服务器,就可以部署大内存的服务器作为专门的缓存服务器,可以做到在理论上不受内存的限制。使用缓存后,数据库的压力就得到了有效的缓解。

集群

但是现在还有一个问题,就是单一的应用服务器能够处理的请求连接还是有限的,在网站访问的高峰期。应用服务器就成为了整个网站的一个瓶颈。

那么这个时候我们需要怎么去做呢?集群是解决高并发大流量的常用手段,也就是相当于拆分。

当一台服务器的处理能力、存储空间不足时,不要企图去换更大的服务器。一般的单机服务器的配置相对来说还算可以,如果说性能扛不住,不会说再加点 CPU,再加点内存,再加点硬盘,不会这么做。一般是再加一台机器,并且现在加一台机器也不贵。就算退一万步讲,对一个大型网站而言,不管多么强大的服务器都满足不了网站持续增长的业务需求。假设我们就一台服务器,性能足够强大,那么这台服务器在双 11 秒杀的时候能否扛得住全国人民的请求压力呢?答案是扛不住的,因为那个时候网络带宽就限制死了,一个双 11 的请求能把一个中型城市的网络全部击垮。

那么这种情况下,最恰当的方法就是增加一台服务器,分担原有服务器的访问和存储的压力。以此类推,只要能通过增加一台服务器的方式改变负载的压力,就可以同样的方式增加多台服务器不断的优化系统的性能,从而实现系统的可伸缩性,并且在它的前面加上负载均衡。

请求先到负载均衡,再通过负载均衡去分发。通过负载均衡调度器,可将来自用户的访问请求分散到应用服务器集群中的任何一台服务器。如果有更多的用户就在集群中加入更多的应用服务器,减轻单台应用服务器的压力。

负载均衡与集群架构

数据库读写分离

随着时间的积累,用户的数据量越来越多,虽然前面使用了缓存,绝大部分数据读操作都可以不通过数据库就能完成。但是,仍有一部读操作,比如说缓存没有命中。同时,所有的写操作,都需要去写我们的数据库,慢慢的,数据库的负载压力就会过高,成为了网站的瓶颈。数据库就有了读压力,有了写压力。

那么我们怎么去解决这个压力呢?目前我们大部分主流的数据库,都提供主从热备的功能。通过配置两台数据库的主从关系,可以将一台数据库的数据更新同步到另外一台服务器。利用这一功能,我们可以往一个数据库里写,那么这个数据就会同步到另一个从的数据库。读的时候,从那个从库去读就可以了,其实相当于将请求在数据库上又做了一次负载均衡,也就说写只写到主库里,读可以从缓存中读,也可以去从库中去读,这样的话就把数据库的压力又分散了。

我们可以抽象出一个数据访问模块,或者说有一些成熟的框架比如 MyCat、ShardingJDBC。

数据库读写分离架构

目录

  1. 初级阶段
  2. 服务器拆分
  3. 缓存
  4. 集群
  5. 数据库读写分离
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • AI 如何辅助生成机械零件 3D 模型
  • C++ 模板与泛型编程技术详解
  • 进程概念详解:命令行参数、环境变量与地址空间
  • Python os.path 模块核心函数详解:路径处理与文件操作指南
  • OpenClaw「龙虾」从 0 到 1 安装、QQ 机器人接入及运维指南
  • 数据结构基础:串的定义与常见误区
  • Sam Altman:超级人工智能将在几年后诞生
  • AI 驱动接口测试全流程自动化实践
  • GitHub Copilot Pro 学生认证与配置指南
  • 逻辑回归算法详解:原理、代码与可视化
  • 基于大语言模型的本地知识库问答离线部署
  • MySQL 8.4.7 在 Windows 10/11 下的免安装版部署指南
  • Python 核心应用领域与开发环境配置详解
  • 基于机器学习的生态组合塘强化城市污水处理厂脱氮优化
  • Cursor, Kiro 与 Google Antigravity 重新定义编程工具对比
  • PyTorch 2.0 深度学习入门与实战指南
  • ComfyUI Manager 高效管理指南:提升 AI 绘画工作流效率
  • Sora 2 技术解析:AI 视频生成的核心突破与应用场景
  • Java Map 与 Set 数据结构解析
  • 基于 OpenClaw 与飞书构建 7x24 小时服务器运维机器人

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online