游乐游手机版
首页/AI教程/文章详情

大型网站系统与Java中间件读书笔记上篇总结

时间:2026-08-15 18:23
从单机架构演进至分布式系统,核心原因包括模块独立扩展、高吞吐量、高可用性。演进过程涉及应用与数据库分离、集群加负载均衡、Session存Redis、读写分离与主从架构、引入缓存搜索引擎、分库分表垂直水平拆分、应用拆分及远程服务调用,避免单点故障。

前言

这本书买了一段时间,之前在杭州没带过去。最近读完了第三章,整理一下笔记。

豆瓣评分

前三章主要科普和回顾中间件/分布式的基础,讲得非常通俗易懂。这里把核心内容梳理出来,算是给自己的沉淀。

一、为什么分布式?

为什么要分布式?可以从几个角度来理解:

  • 模块之间独立,各做各的事,便于扩展,复用性高。
  • 高吞吐量:一台机器跑10小时的任务,用10台机器拆分成小任务,可能2小时就跑完了。
  • 从单机升级角度看,升级单机处理能力的性价比越来越低,而且单机存在瓶颈。
  • 分布式系统更稳定、更可用——单机挂了就全挂了,分布式挂了还有备用,不至于整个链路瘫痪。

1.1 大型网站架构演进过程

在没接触过分布式之前,常看到一些看起来很牛的词:“读写分离”“分库分表”“主从架构”“负载均衡”“单点故障”……下面顺着“大型网站架构演进过程”来拆解这些概念。

最初接触Ja va项目时,通常是单机架构:数据库和Web服务器都在同一台机器上。

数据库、Web服务器都是同一台机器

网站对外开放后,访问量增大,服务器压力随之提高。最简单的做法是把数据库和应用分开,缓解系统压力。

数据库服务器和应用服务器分开

应用服务器压力继续增大,可以把应用服务器做成集群——说白了就是加了一台机器。

给应用服务器加了一台

加了台应用服务器后,新问题出现了:用户请求该走哪台服务器?Session依赖单台服务器,Session怎么处理?

两个直面而来的问题

解决用户请求的分配问题,需要在请求到达应用服务器之前加一个“负载均衡器”。负载均衡器里写的是用户请求分发到哪台服务器的逻辑——比如轮询,一个请求去服务器A,下一个去服务器B,平摊请求。策略很多,就看怎么实现,代码都放在负载均衡器上。

Session的问题,之前讲单点登录时已经讨论过:通常的做法是把Session保存在Redis上。

解决请求指派和Session的问题

随着业务发展,数据量和访问量都在增长,很多业务是读多写少的,这种压力直接反应到数据库上。

于是可以增加一个读库:写入操作走服务器C的MySQL,读取操作走服务器D的MySQL,实现读写分离。

读写分离

通常写库也叫主库,读库也叫从库,互联网架构中叫主从架构,常见的有“一主多从”。

主从架构

针对读多写少的业务,还有更多优化策略:引入搜索引擎和缓存。搜索引擎相当于一个读库,利用倒排表大幅提升检索速度;缓存则将热数据放入内存,命中则直接返回。

增加缓存和搜索引擎

需要说明的是,这里的搜索引擎和缓存未必特指ES和Redis,缓存也可以用本地缓存。这里用Redis和ES只是画图方便。

继读写分离之后,数据库仍然可能遇到瓶颈,此时可以采用分库分表策略:

  • 垂直拆分——不同业务数据分到不同数据库。
  • 水平拆分——同一张表的数据拆分到不同数据库(因为这张表数据量或更新量太大)。

垂直拆分示例图

根据《阿里巴巴 Ja va 开发手册》,单表行数超过500万行或单表容量超过2GB才推荐分库分表——如果预计三年都达不到这个量,不要在建表时就分库分表。

数据存储方面,除了关系型数据库,还可能引入分布式存储系统,比如分布式文件系统、分布式 Key-Value 系统、分布式数据库。

数据库问题解决之后,应用也面临挑战:功能越做越多,应用越来越大。为了避免应用持续膨胀,需要把应用拆开,从一个变成两个或多个。

应用拆分

不同功能/模块之间的调用不再单纯通过本机调用,引入了远程服务调用。

某个应用只在一台机器上运行,如果这台机器出现问题导致应用无法运行,这就是单点故障。

最后

《大型网站系统与Ja va中间件》的前三章主要铺垫:什么是中间件、什么是分布式(从单机演进到分布式的过程),以及网站的架构演进过程。剩下的章节回顾了一些基础,比如BIO/NIO/AIO、HTTP/Session、JVM、Ja va多线程及并发基础、JUC包下的常见类。

总的来说,读得很过瘾。后面读完下面的章节,会继续分享。

来源:https://developer.aliyun.com/article/704949
上一篇Claude Code时区显示中国人身份的原因说明 下一篇信息化数字化智能化数智化有必要分这么多阶段吗
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CAD零基础入门教程:坐标输入、图层管理与基础绘图命令
AI教程 · 2026-09-01

CAD零基础入门教程:坐标输入、图层管理与基础绘图命令

本文面向CAD零基础学习者,系统讲解坐标输入、图层管理与基础绘图命令的核心用法。通过分步实操与常见问题排查,帮助新手建立精确绘图习惯,掌握规范出图的基础能力。

CAD从入门到项目交付:绘图、标注、图块与实战工作流
AI教程 · 2026-09-01

CAD从入门到项目交付:绘图、标注、图块与实战工作流

掌握CAD的核心在于建立“画得准、标得清、复用快、交付稳”的工作流。本文提供从环境设置、高频命令组合、标注规范、图块标准化到项目分阶段交付的完整路径,帮助初学者避免常见返工陷阱,独立完成可检查、可复用、可打印的工程图纸。

Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤
AI教程 · 2026-09-01

Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤

本文详细解析 Claude Code 登录前的账号类型区分方法,涵盖个人订阅、Teams 席位与企业 Enterprise 席位的授权路径差异。提供终端登录命令、环境变量排查及常见异常处理步骤,帮助用户快速完成正确授权并避免登录路径混淆。

Claude Code 文件修改前的权限模式配置与命令审批指南
AI教程 · 2026-09-01

Claude Code 文件修改前的权限模式配置与命令审批指南

本文详细介绍Claude Code在修改文件前的权限模式配置方法,包括defaultMode可选值、permissions allow与deny规则设置、多层级配置文件管理以及 status验证技巧,帮助开发者安全高效地使用AI编程助手。

Claude Code接入VS Code后先测扩展和终端命令
AI教程 · 2026-09-01

Claude Code接入VS Code后先测扩展和终端命令

在VS Code中接入Claude Code后,建议优先验证扩展面板与集成终端两条入口。本文提供标准检查顺序、关键命令与常见故障排查路径,帮助你快速确认环境就绪,避免后续开发受阻。