深入高可用系统原理与设计 收藏

  • 书籍语言:简体中文
  • 下载次数:8469
  • 书籍类型:Epub+Txt+pdf+mobi
  • 创建日期:2025-09-18 11:10:03
  • 发布日期:2025-09-21
  • 连载状态:全集
  • 书籍作者:王伟峰
  • 运行环境:pc/安卓/iPhone/iPad/Kindle/平板

内容简介

本书围绕“构建高可用系统”(更可靠、更敏捷、更低成本)的主题,系统阐述近年来的技术演进路径与底层原理。第1章为概论,从业务需求出发,回顾近年技术架构演进趋势,帮读者快速建立全局认知。第2~4章讲网络,以网络请求链路为线索,深入操作系统内核、负载均衡原理,讲解“快”背后的系统设计。第5、6章讲分布式系统,聚焦一致性与容错,拆解CAP定理、分布式事务与共识算法等核心机制。第7、8章解析Kubernetes架构与服务网格技术,理解云原生基础设施的设计逻辑。第9章讲系统观测,构建统一观测体系,掌握指标、日志、链路追踪的集成与分析方法。第10章为软件交付,剖析声明式管理理念,讲解Kustomize、Helm、Operator、OAM等主流交付模型。本书融合技术理论与一线实践,适合后端工程师、系统架构师、技术团队负责人及关注底层原理的高级开发者阅读。

作者简介

王伟峰爱奇艺架构师,有17年软件研发经验。擅长云计算、大规模分布式系统的架构设计与工程实现,对人工智能领域已有涉猎。开源图书《创造智慧》作者。

编辑推荐

适读人群 :大众

系统呈现现代软件架构全景图谱,让读者在复杂技术版图中拥有清晰方向;洞悉分布式系统设计背后的逻辑,从整体上把握系统的运作规律;汇集一线研发经验+前沿成果;以实际业务需求为出发点,聚焦架构权衡。

下载地址

序言

推荐语
伟峰是一位兼具前后端能力的全栈技术人,在过去 15 年实战中积累了深厚的技术。在本书中,他从云计算应用工程师的角度,解读在大型互联网公司中,应如何构建以超高可用性为核心的技术体系。此外,全书吸收了与国际社区技术专家互动中的诸多真知灼见,进一步提升了前瞻性和准确度。
陈绪博士 阿里云基础设施资深总监

在过去几年服务大大小小客户的过程中,我切身感受到云原生应用及架构和基于传统服务器集群的 Web 应用之间的不同——并非将裸金属或 VM 换成容器,将服务拆成众多的微服务,然后再使用一些通用的中间件就能称之为云原生应用了。其本质是对应用迭代的敏捷性、对资源使用的高弹性、对高可用架构设计支持的必备性,以及对用户行为的可观测性等要求的全方面提升和重构。而要真正掌握这些本质,需要对底层各分支的技术原理有充分的了解。伟峰的作品正是这样一本专业参考书,其流畅的文笔将众多技术原理深入浅出地呈现在读者面前,是一本既能提供愉悦阅读体验又能提供严谨专业信息的作品。
俞圆圆 腾讯云网络公网产品负责人

这本书非常适合技术架构师、软件工程师和运维工程师阅读。伟峰在书中系统地介绍了如何设计和搭建一套高性能的后台服务,并保持其高可用性与可维护性。为此,我们需要掌握广泛的软件与网络技术。虽然这些技术跨度大、内容复杂,但后台相关工作本就是高度关联的体系,IT 专业的价值也正体现在它的深度与挑战性中。得益于伟峰在本书中的见解,读者能够厘清复杂系统的技术脉络,领会系统设计背后的核心思想。
曹亚孟 EdgeNext 首席架构师,《云计算行业进阶指南》作者
很高兴看到王伟峰老师从全局介绍了高可用系统的原理和设计,覆盖了云原生、网络、内核、容器以及分布式系统等技术。随着云原生时代的到来,软件架构一直随之演进,基础设施通过分层的方式简化软件的开发和部署,也带来了更多的“认知负荷”。我自己也是从《Google SRE 运维解密》一书了解到了整个生态的变化,所以很开心看到更多结合开源生态的系统设计的内容,希望它能帮助更多国内架构师和工程师的成长。
毛剑 Bilibili 技术委员会主席

王老师通过多年的积累,终于推出了这本高质量的作品——《深入高可用系统原理与设计》。本书是针对软件工程师、架构师和技术负责人的权威指南,帮助读者在系统架构中做出明智的决策,并加深对各种技术优缺点的理解。无论是了解基础软件构建还是设计高可用系统,本书都是不可或缺的参考。
谢孟军 积梦智能 CEO,《Go Web 编注》作者

推荐序
我与伟峰共事十余年,他始终对技术充满热情,精通多种前后端语言,在网络技术、云原生、架构设计等领域有着深厚的积累与敏锐的洞察。正因其广博的知识视野与扎实的技术功底,伟峰在多个项目中都能提出独到见解,推动创新实践,并高效地实现技术与业务的深度融合。在爱奇艺国际站建站初期,他主导了核心技术架构与业务体系的设计与落地,构建了智能化、模块化的高可用服务框架,为海外业务的快速迭代与持续发展奠定了坚实基础。
更难能可贵的是,伟峰将多年来的认知积累与实践经验系统化整理成书,惠及广大技术工作者。这本书系统梳理了从传统软件开发到云计算、微服务、容器技术、服务网格等现代架构理念的演进脉络。书中不仅详尽呈现关键技术的实现方式,更深入探讨其背后的原理与设计哲学。理解问题的本质,权衡解决方案的取舍,正是架构师应具备的核心能力。
书中比较了主流架构方案,并对核心原理进行深入解析,使读者不仅能够理解不同设计选择的优劣,还能在实际工作中做出更理性、更具前瞻性的技术决策。全书语言通俗、结构清晰,既适合基础薄弱的读者逐步入门,也为经验丰富的专业人士提供了新的视角与深度思考的素材。
陆华梅
爱奇艺海外事业部高级总监

前言
如果你是一位互联网从业者,我猜这几年你大概率会被这些层出不穷的概念包围:云计算、边缘计算、PaaS、FaaS、CaaS、ServiceMesh、Serverless,以及各种 Ops,如 DevOps、GitOps、MLOps、FinOps 等。
近几年,软件开发技术经历了翻天覆地的变革,对构建业务应用的方式产生了重大影响。在讨论如何为业务赋能之前,我们不妨先思考一下,推动这一波技术浪潮的核心驱动力是什么。
软件在吞噬世界
互联网投资人 Mark Andreessen 曾在文章 Why Software Is Eating the World 中探讨了软件如何改变各个行业。以下是文章中的部分内容:
我们处于戏剧性和广泛的技术和经济转变的中间,软件公司准备接管大量的经济。
……
十年前,当我在创办 Netscape 公司时,大概只有 500 万人使用宽带互联网,而现在有超过 20 亿人
使用宽带互联网……
文章发表于 2011 年,现在再来回顾互联网的冲击,感触更加深刻:部分软件变成像水、电、煤一样的基础设施。
在展望互联网规模时,作者曾预测“在未来 10 年,全球至少有 50 亿人将拥有智能手机,每个人都可以随时随地利用互联网”。如今,我们可以确认,Mark Andreessen 的预测很准确:移动互联网时代的用户规模已经接近全球人口基数,亿级 DAU 规模的移动应用不断涌现。软件对各行各业的渗透和对世界的改变,以及在移动互联网时代巨大的用户基数下快速
变更和不断创新的需求,对软件开发方式带来巨大的推动力,我们清晰地看到如此波澜壮阔的技术浪潮:
??软件正在改变世界。
??移动互联网让这个变革影响每个人。
??传统软件开发方式受到巨大的挑战。
??因为云计算及相关技术的普及,软件上云成为趋势。
??云计算的形态,以及与之对应的软件技术在持续演进。
近年来,软件的规模和质量要求不断提升,云基础设施和平台日益强大,软件技术逐渐发展成为它本来该有的模样,形成了与云环境匹配的架构,并催生了相应的开发流程和方法论。
大时代下的个体
视角转回到个体,不管你是否接受,软件行业解决问题的技术一直在变化。
这种变化并非简单的升级,而是剧烈的革新替代,例如,容器替代虚拟机、服务网格替代Spring Cloud、观测替代监控、Network Policy 替代 iptables,等等。这种替代打破了软件开发中许多固有的假设。在如此剧烈的变革中,如果只关注眼前的工作,不抬头“看天”,当大革命来临时,曾经关注的细节可能再也没有意义。
所以,本书很少描述某个软件如何安装、如何使用,而是聚焦问题本质,剖析不同方案的核心原理,并探索技术发展的规律。例如,网络优化受限于物理世界的约束,分布式系统的演进则是对 CAP 定理的权衡,受时间和空间法则的制约。近几年流行的容器、服务网格也不是什么黑科技,只是把计算机的基本原理、方法重新组合,换种形式解决业务变化带来的新问题。读完本书,相信读者将对系统的整体运作有全新的理解,能够从容选择方案,轻松应对各种复杂问题。
本书适合哪些读者
本书主要面向软件工程师、架构师和技术负责人,特别适合那些需要在系统架构中做出权衡的技术决策者。即便读者不直接参与这些决策,本书也能帮助读者深入理解各种技术的优缺点。
阅读本书时,最好了解一些请求 / 响应型(Web)系统原理,熟悉一些常见的网络协议(如 TCP、HTTP 等)。如果有一些后端开发经验,将有助于加深对本书内容的理解,至于熟悉何种编程语言倒没有太大关系。
总体上讲,若以下条件适用于你,你将从本书获取收益:
??想了解行业技术发展趋势和动态。
??需要在系统架构中做出权衡,避免常见设计陷阱。
??需要构建可靠、敏捷、低成本的系统。
??对互联网系统的整体运作有着天然的兴趣,并乐于探索其中的奥秘。

如何阅读本书
本书将围绕“构建高可用系统”展开。互联网技术在中国发展了几十年,如果“高可用”的目标还仅仅关注不宕机,那么显然要求过低。本书将“高可用”的定义延伸至更可靠、更敏捷、更低成本,本书内容安排如下:
??第 1 章,是全书的概论,将从需求的背景、解决问题的角度讨论这几年技术架构演进的趋向。该部分适合所有读者,尤其是希望了解近期技术发展概况的读者。
??第 2 ~ 4 章,主题是网络。将从一道经典的面试题“浏览器打开 URL 到页面展现,中间发生了什么?”出发,了解贯穿其中的整个网络请求链路,并努力实现“足够快”的目标(第 2 章)。接着,将跟随网络数据包进入内核,学习操作系统的基本规则,了解内核各模块和设备的协作及其对应用层的影响(第 3 章)。最后,将根据网络数据包的转发 / 处理逻辑,讨论四层 / 七层负载均衡的设计原理(第 4 章)。
??第 5、6 章,主题是分布式系统。首先,了解数据一致性的基本概念,接着讨论 CAP 定理及其影响下的各类分布式事务模型(第 5 章)。随后,将探讨分布式副本容错模型,这是实现分布式系统可靠性的关键,重点关注如何在网络不可靠和节点可能宕机的环境中实现共识(第 6 章)。读完本部分内容,相信读者将对分布式系统有全新的理解。
??第 7、8 章,主题是基础设施。首先了解 Google 内部系统的演变,并学习 Kubernetes在计算、网络、存储、容器编排调度的设计原理(第 7 章)。随后,将回顾过去十几年服务通信的发展历程,探讨服务网格技术出现的背景,弄清楚它到底解决了什么问题(第 8 章)。
??第 9 章,主题是确保复杂系统的可靠运行。其中的关键是统一收集、关联和分析系统输出(日志、指标、追踪),从而构建出能推断其内部状态的能力。
??第 10 章将深入探讨 Kubernetes 等基础设施的演进,剖析声明式管理的本质,领会“以应用为中心”的设计理念,探索几种流行的应用层软件交付模型与抽象(如 Kustomize、Helm、Operator 和 OAM),帮助读者更加高效、自信地开发和交付应用。
致谢
首先,我要感谢我的爱人。在我决定开始写作时,她承担起照顾两个孩子的责任,并在两年半的时间里忍耐我将所有空闲时间投入写作中。没有她的支持,我无法完成该作!同时,感谢我就职的单位爱奇艺,公司为我提供了宝贵的工作、学习、实践机会,使我得以总结经验,书中的部分内容也源于此。其次,还要感谢 GitHub 上帮我校验书稿的网友(限于篇幅,无法一一列出),他们指出了大量的笔误、不严谨的内容,提升了书稿的质量。
最后,谨将本书献给我的家人以及热爱技术的朋友们。
与我联系
由于笔者的认知和精力有限,本书难免存在一些错误,如在阅读过程中发现问题,欢迎提出宝贵意见,联系方式请扫描下面二维码查看。
王伟峰
2025 年 6 月

目录

第1 章 云原生技术概论
1.1 云计算的演进变革
1.1.1 物理机时代
1.1.2 虚拟化技术成熟
1.1.3 云计算技术成熟
1.1.4 容器技术兴起
1.1.5 云计算形态演进总结
1.2 云原生出现的背景
1.2.1 软件正在吞噬世界
1.2.2 移动互联网在加剧变化
1.2.3 云原生的诞生
1.3 云原生的定义
1.3.1 Pivotal 对云原生的定义
1.3.2 CNCF 对云原生的定义
1.3.3 云原生定义之外
1.4 云原生技术的目标
1.5 云原生代表技术
1.5.1 容器技术
1.5.2 微服务
1.5.3 服务网格
1.5.4 可变基础设施与不可变基础设施
1.5.5 声明式设计
1.5.6 DevOps
1.6 云原生架构的演进
1.7 云原生架构技术栈
1.8 小结
第 2 章 构建“足够快”的网络服务
2.1 了解各类延迟指标
2.2 HTTPS 请求优化分析
2.2.1 请求阶段分析
2.2.2 各阶段耗时分析
2.2.3 HTTPS 的优化总结
2.3 域名解析的原理与实践
2.3.1 域名解析的原理
2.3.2 排查域名解析故障
2.3.3 Facebook 故障分析与总结
2.3.4 使用 HTTPDNS 解决“中间商”问题
2.4 使用 Brotli 压缩传输内容
2.5 HTTPS 加密原理及优化实践
2.5.1 HTTPS 加密原理
2.5.2 HTTPS 优化实践
2.6 网络拥塞控制原理与实践
2.6.1 网络拥塞控制原理
2.6.2 早期拥塞控制旨在收敛
2.6.3 现代拥塞控制旨在效能最大化
2.6.4 BBR 的设计原理
2.6.5 BBR 的性能表现
2.7 对请求进行“动态加速”
2.8 QUIC 设计原理与实践
2.8.1 QUIC 出现的背景
2.8.2 QUIC 的特点
2.8.3 QUIC 实践
2.9 小结
第 3 章 深入 Linux 内核网络技术
3.1 OSI 网络分层模型
3.2 Linux 系统收包流程
3.3 Linux 内核网络框架
3.3.1 Netfilter 的 5 个钩子
3.3.2 数据包过滤工具 iptables
3.3.3 连接跟踪模块 conntrack
3.4 内核旁路技术
3.4.1 数据平面开发套件DPDK
3.4.2 eBPF 和快速数据路径XDP
3.4.3 远程直接内存访问RDMA
3.5 Linux 网络虚拟化
3.5.1 网络命名空间
3.5.2 虚拟网络设备 TUN 和TAP
3.5.3 虚拟网卡 Veth
3.5.4 虚拟交换机 Linux Bridge
3.5.5 虚拟网络通信技术
3.6 小结
第 4 章 负载均衡与代理技术
4.1 负载均衡与代理的分类
4.1.1 四层负载均衡
4.1.2 七层负载均衡
4.2 负载均衡器总体功能
4.2.1 服务发现
4.2.2 健康检查
4.2.3 黏性会话
4.2.4 TLS 卸载
4.2.5 安全和 DDoS 防御
4.2.6 观测
4.2.7 负载均衡
4.3 负载均衡部署拓扑
4.3.1 中间代理型
4.3.2 边缘代理型
4.3.3 客户端内嵌型
4.3.4 边车代理型
4.4 四层负载均衡技术
4.4.1 直接路由模式
4.4.2 隧道模式
4.4.3 网络地址转换模式
4.4.4 主备模式
4.4.5 基于集群和一致性哈希的容错和可扩展模式
4.5 从七层负载均衡到网关
4.6 全局负载均衡设计
4.7 小结
第 5 章 数据一致性与分布式事务
5.1 数据一致性
5.2 一致性与可用性的权衡
5.3 分布式事务模型
5.3.1 可靠事件队列
5.3.2 TCC
5.3.3 Saga
5.4 服务幂等性设计
5.4.1 全局唯一 ID 方案
5.4.2 乐观锁方案
5.5 小结
第 6 章 分布式共识及算法
6.1 什么是共识
6.2 日志与复制状态机
6.3 Paxos 算法
6.3.1 Paxos 算法起源
6.3.2 Paxos 算法详述
6.4 Raft 算法
6.4.1 领导者选举
6.4.2 日志复制
6.4.3 成员变更
6.5 小结
第 7 章 容器编排技术
7.1 容器编排系统的演进
7.1.1 Borg 系统
7.1.2 Omega 系统
7.1.3 Kubernetes 系统
7.1.4 以应用为中心的转变
7.2 容器技术的原理与演进
7.2.1 文件系统隔离
7.2.2 资源全方位隔离
7.2.3 资源全方位限制
7.2.4 设计容器协作的方式
7.2.5 超亲密容器组 Pod
7.2.6 Pod 是 Kubernetes 的基本单位
7.2.7 Pod 是调度的原子单元
7.2.8 容器边车模式
7.3 容器镜像的原理与应用
7.3.1 什么是容器镜像
7.3.2 容器镜像分层设计原理
7.3.3 构建足够小的容器镜像
7.3.4 加速容器镜像下载
7.3.5 加速容器镜像启动
7.4 容器运行时与 CRI 接口
7.4.1 Docker 与 Kubernetes
7.4.2 容器运行时接口 CRI
7.4.3 Kubernetes 专用容器运行时
7.4.4 Containerd 与 CRI
7.4.5 安全容器运行时
7.4.6 容器运行时生态
7.5 容器持久化存储设计
7.5.1 Docker 的存储设计
7.5.2 Kubernetes 的存储设计
7.5.3 普通的 Volume
7.5.4 持久化的 Volume
7.5.5 PV 的使用:从手动到自动
7.5.6 Kubernetes 存储系统设计
7.5.7 存储分类:块存储、文件存储和对象存储
7.6 容器间通信的原理
7.6.1 Overlay 覆盖网络模式
7.6.2 三层路由模式
7.6.3 Underlay 底层网络模式
7.6.4 CNI 插件及生态
7.7 资源模型及编排调度
7.7.1 资源模型与资源管理
7.7.2 扩展资源与设备插件
7.7.3 默认调度器及扩展设计
7.8 资源弹性伸缩
7.8.1 Pod 水平自动伸缩
7.8.2 Pod 垂直自动伸缩
7.8.3 基于事件驱动的伸缩
7.8.4 节点自动伸缩
7.9 小结
第 8 章 服务网格技术
8.1 什么是服务网格
8.2 服务间通信的演化
8.2.1 原始的通信时代
8.2.2 第一代微服务
8.2.3 第二代微服务
8.2.4 微服务框架的痛点
8.2.5 思考服务间通信的本质
8.2.6 代理模式的探索
8.2.7 第一代服务网格
8.2.8 第二代服务网格
8.3 数据平面的设计
8.3.1 Sidecar 自动注入
8.3.2 流量透明劫持
8.3.3 实现可靠通信
8.4 控制面的设计
8.5 服务网格的产品与生态
8.5.1 Linkerd2 出击
8.5.2 其他参与者
8.5.3 Istio 与 Linkerd2 性能对比
8.6 服务网格的未来
8.6.1 Proxyless 模式
8.6.2 Sidecarless 模式
8.6.3 Ambient Mesh 模式
8.7 小结
第 9 章 系统可观测性
9.1 什么是可观测性
9.2 可观测性与传统监控的区别
9.3 遥测数据的分类与处理
9.3.1 指标的处理
9.3.2 日志的索引与存储
9.3.3 分布式链路追踪
9.3.4 性能剖析
9.3.5 核心转储
9.4 可观测标准的演进
9.5 小结
第 10 章 应用封装与交付
10.1 “以应用为中心”的设计思想
10.2 声明式管理的本质
10.2.1 控制器模式
10.2.2 基础设施即数据思想
10.3 从“封装配置”到“应用模型”
10.3.1 Kustomize
10.3.2 Helm 与 Chart
10.3.3 Operator
10.3.4 OAM 与 KubeVela
10.4 小结
附录 A 术语缩写与释义

短评