No description
AI Reading Assistant
Whole-book reading guide from stratified index samples; jump to passages in the text
Tags
AI categories
Shown after the reading guide is generated (max 3)
Text Preview (First 20 pages)
Registered users can read the full content for free
Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.
Page
1
(This page has no text content)
Page
2
版权信息 .................................................................................................................................................................................................................... 5 作者简介 .................................................................................................................................................................................................................... 6 译者介绍 .................................................................................................................................................................................................................... 7 内容简介 .................................................................................................................................................................................................................... 8 译者序 ......................................................................................................................................................................................................................... 9 前言 ........................................................................................................................................................................................................................... 10 1 从0到100万用户的扩展 ......................................................................................................................................................................... 11 1.1 单服务器配置 ............................................................................................................................................................................ 12 1.2 数据库 .......................................................................................................................................................................................... 15 1.2.1 使用何种数据库 .............................................................................................................................................................. 15 1.3 纵向扩展vs.横向扩展 .............................................................................................................................................................. 16 1.4 负载均衡器 ................................................................................................................................................................................. 17 1.5 数据库复制 ................................................................................................................................................................................. 18 1.6 缓存 ............................................................................................................................................................................................... 21 1.6.1 缓存层 ................................................................................................................................................................................. 21 1.6.2 使用缓存时的注意事项 ............................................................................................................................................... 21 1.7 内容分发网络 ............................................................................................................................................................................ 23 1.7.1 使用CDN时的注意事项 ............................................................................................................................................... 23 1.8 无状态网络层 ............................................................................................................................................................................ 25 1.8.1 有状态架构........................................................................................................................................................................ 25 1.8.2 无状态架构........................................................................................................................................................................ 25 1.9 数据中心 ...................................................................................................................................................................................... 26 1.10 消息队列 ...................................................................................................................................................................................... 28 1.11 记录日志、收集指标与自动化 .......................................................................................................................................... 29 1.11.1 添加消息队列和各种工具 ........................................................................................................................................... 29 1.12 数据库扩展 ................................................................................................................................................................................. 30 1.12.1 纵向扩展 ............................................................................................................................................................................ 30 1.12.2 横向扩展 ............................................................................................................................................................................ 30 1.13 用户量达到甚至超过了100万 ........................................................................................................................................... 32 2 封底估算 ........................................................................................................................................................................................................ 33 2.1 2的幂 ............................................................................................................................................................................................. 34 2.2 每个程序员都应该知道的操作耗时 ................................................................................................................................. 35 2.3 可用性相关的数字 .................................................................................................................................................................. 37 2.4 案例:估算推特的QPS和存储需求 .................................................................................................................................. 38 2.5 小技巧 .......................................................................................................................................................................................... 39 3 系统设计面试的框架 ................................................................................................................................................................................ 40 3.1 有效的系统设计面试的四个步骤 ..................................................................................................................................... 41 3.1.1 第一步:理解问题并确定设计的边界 .................................................................................................................. 41 3.1.2 第二步:提议高层级的设计并获得认同 .............................................................................................................. 42 3.1.3 第三步:设计继续深入 ............................................................................................................................................... 47 3.1.4 第四步:总结 ................................................................................................................................................................... 48 3.2 面试中每一步的时间分配 .................................................................................................................................................... 50 4 设计限流器 ................................................................................................................................................................................................... 51 4.1 第一步:理解问题并确定设计的边界 ............................................................................................................................ 52 4.2 第二步:提议高层级的设计并获得认同 ....................................................................................................................... 53 4.2.1 在哪里实现限流器 ......................................................................................................................................................... 53 4.2.2 流量限制算法 ................................................................................................................................................................... 53 4.2.3 高层级架构........................................................................................................................................................................ 58 4.3 第三步:设计继续深入 ......................................................................................................................................................... 60 4.3.1 流量限制规则 ................................................................................................................................................................... 60 4.3.2 超过流量的限制 .............................................................................................................................................................. 60 4.3.3 详细设计 ............................................................................................................................................................................ 60 4.3.4 分布式系统中的限流器 ............................................................................................................................................... 61 4.3.5 性能优化 ............................................................................................................................................................................ 62 4.3.6 监控 ...................................................................................................................................................................................... 62
Page
3
4.4 第四步:总结 ............................................................................................................................................................................ 63 5 设计一致性哈希系统 ................................................................................................................................................................................ 64 5.1 重新哈希的问题 ....................................................................................................................................................................... 65 5.2 一致性哈希 ................................................................................................................................................................................. 67 5.2.1 哈希空间和哈希环 ......................................................................................................................................................... 67 5.2.2 哈希服务器........................................................................................................................................................................ 67 5.2.3 哈希键 ................................................................................................................................................................................. 67 5.2.4 查找服务器........................................................................................................................................................................ 67 5.2.5 添加服务器........................................................................................................................................................................ 67 5.2.6 移除服务器........................................................................................................................................................................ 68 5.2.7 两个问题 ............................................................................................................................................................................ 68 5.2.8 虚拟节点 ............................................................................................................................................................................ 69 5.2.9 找到受影响的键 .............................................................................................................................................................. 70 5.3 总结 ............................................................................................................................................................................................... 71 6 设计键值存储系统 ..................................................................................................................................................................................... 72 6.1 理解问题并确定设计的边界 ............................................................................................................................................... 73 6.2 单服务器的键值存储 .............................................................................................................................................................. 74 6.3 分布式键值存储 ....................................................................................................................................................................... 75 6.3.1 CAP理论 .............................................................................................................................................................................. 75 6.3.2 系统组件 ............................................................................................................................................................................ 76 6.3.3 数据分区 ............................................................................................................................................................................ 76 6.3.4 数据复制 ............................................................................................................................................................................ 77 6.3.5 一致性 ................................................................................................................................................................................. 77 6.3.6 不一致性的解决方案:版本控制 ............................................................................................................................ 78 6.3.7 处理故障 ............................................................................................................................................................................ 80 6.3.8 系统架构图........................................................................................................................................................................ 82 6.3.9 写路径 ................................................................................................................................................................................. 82 6.3.10 读路径 ................................................................................................................................................................................. 83 6.4 总结 ............................................................................................................................................................................................... 85 7 设计分布式系统中的唯一ID生成器 .................................................................................................................................................... 86 7.1 第一步 理解问题并确定设计的边界 ............................................................................................................................... 87 7.2 第二步 提议高层级的设计并获得认同 .......................................................................................................................... 88 7.2.1 多主复制 ............................................................................................................................................................................ 88 7.2.2 UUID ................................................................................................................................................................................... 88 7.2.3 工单服务器........................................................................................................................................................................ 89 7.2.4 推特的雪花系统 .............................................................................................................................................................. 89 7.3 第三步 设计继续深入 ............................................................................................................................................................ 91 7.4 第四步 总结 ............................................................................................................................................................................... 93 8 设计URL缩短器 ............................................................................................................................................................................................ 94 8.1 第一步 理解问题并确定设计的边界 ............................................................................................................................... 95 8.1.1 封底估算 ............................................................................................................................................................................ 95 8.2 第二步 提出高层级的设计并获得认同 .......................................................................................................................... 96 8.2.1 API端点 ............................................................................................................................................................................... 96 8.2.2 URL重定向 ......................................................................................................................................................................... 96 8.2.3 缩短URL ........................................................................................................................................................................... 98 8.3 第三步 设计继续深入 ............................................................................................................................................................ 99 8.3.1 数据模型 ............................................................................................................................................................................ 99 8.3.2 哈希函数 ............................................................................................................................................................................ 99 8.3.3 深入探讨URL缩短流程 ............................................................................................................................................. 101 8.3.4 深入探讨URL重定向流程 ........................................................................................................................................ 101 8.4 第四步 总结 ........................................................................................................................................................................... 103 9 设计网络爬虫 .......................................................................................................................................................................................... 104 9.1 第一步 理解问题并确定设计的边界 ........................................................................................................................... 106 9.2 第二步 提议高层级的设计并获得认同 ...................................................................................................................... 109 9.3 第三步 设计继续深入 ........................................................................................................................................................ 113
Page
4
9.3.1 DFS vs.BFS .................................................................................................................................................................. 113 9.3.2 URL前线 .......................................................................................................................................................................... 113 9.3.3 HTML下载器 ................................................................................................................................................................. 118 9.3.4 健壮性 ............................................................................................................................................................................. 119 9.3.5 可扩展性 ........................................................................................................................................................................ 119 9.3.6 检测和避免有问题的内容 ....................................................................................................................................... 120 9.4 第四步 总结 ........................................................................................................................................................................... 121 10 设计通知系统 ................................................................................................................................................................................. 122 10.1 第一步 理解问题并确定设计的边界 ........................................................................................................................... 123 10.2 第二步 提议高层级的设计并获得认同 ...................................................................................................................... 124 10.2.1 不同类型的通知 .......................................................................................................................................................... 124 10.2.2 联系信息的收集流程 ................................................................................................................................................ 125 10.2.3 通知的发送与接收流程 ........................................................................................................................................... 126 10.3 第三步 设计继续深入 ........................................................................................................................................................ 130 10.3.1 可靠性 ............................................................................................................................................................................. 130 10.3.2 其他组件和要考虑的因素 ....................................................................................................................................... 130 10.3.3 更新后的设计 ............................................................................................................................................................... 132 10.4 第四步 总结 ........................................................................................................................................................................... 133 11 设计news feed系统 ...................................................................................................................................................................... 134 11.1 第一步 理解问题并确定设计的边界 ........................................................................................................................... 135 11.2 第二步 提议高层级的设计并获得认同 ...................................................................................................................... 136 11.2.1 news feed API .............................................................................................................................................................. 136 11.2.2 feed的发布 ...................................................................................................................................................................... 136 11.2.3 news feed的构建 ......................................................................................................................................................... 137 11.3 第三步 设计继续深入 ........................................................................................................................................................ 138 11.3.1 深入探讨feed的发布流程 ........................................................................................................................................ 138 11.3.2 深入探讨news feed的获取流程 ........................................................................................................................... 141 11.3.3 缓存架构 ........................................................................................................................................................................ 142 11.4 第四步 总结 ........................................................................................................................................................................... 144 12 设计聊天系统 ................................................................................................................................................................................. 145 12.1 第一步 理解问题并确定设计的边界 ........................................................................................................................... 146 12.2 第二步 提议高层级的设计并获得认同 ...................................................................................................................... 149 12.2.1 轮询 .................................................................................................................................................................................. 149 12.2.2 长轮询 ............................................................................................................................................................................. 150 12.2.3 WebSocket .................................................................................................................................................................. 151 12.2.4 高层级设计.................................................................................................................................................................... 152 12.2.5 数据模型 ........................................................................................................................................................................ 155 12.3 第三步 设计继续深入 ........................................................................................................................................................ 158 12.3.1 服务发现 ........................................................................................................................................................................ 158 12.3.2 消息流 ............................................................................................................................................................................. 159 12.3.3 显示在线状态 ............................................................................................................................................................... 163 12.4 第四步 总结 ........................................................................................................................................................................... 167 13 设计搜索自动补全系统 .............................................................................................................................................................. 168 13.1 第一步 理解问题并确定设计的边界 ........................................................................................................................... 169 13.1.1 封底估算 ........................................................................................................................................................................ 169 13.2 第二步 提议高层级的设计并获得认同 ...................................................................................................................... 172 13.2.1 数据收集服务 ............................................................................................................................................................... 172 13.2.2 查询服务 ........................................................................................................................................................................ 172 13.3 第三步 设计继续深入 ........................................................................................................................................................ 175 13.3.1 字典树数据结构 .......................................................................................................................................................... 175 13.3.2 数据收集服务 ............................................................................................................................................................... 179 13.3.3 查询服务 ........................................................................................................................................................................ 182 13.3.4 字典树操作.................................................................................................................................................................... 184 13.3.5 扩展存储 ........................................................................................................................................................................ 185 13.4 第四步 总结 ........................................................................................................................................................................... 187
Page
5
14 设计视频分享系统 ........................................................................................................................................................................ 188 14.1 第一步 理解问题并确定设计的边界 ........................................................................................................................... 189 14.1.1 封底估算 ........................................................................................................................................................................ 191 14.2 第二步 提议高层级的设计并获得认同 ...................................................................................................................... 192 14.2.1 视频上传流程 ............................................................................................................................................................... 193 14.2.2 视频流式传输流程 ..................................................................................................................................................... 198 14.3 第三步 设计继续深入 ........................................................................................................................................................ 200 14.3.1 视频转码 ........................................................................................................................................................................ 200 14.3.2 有向无环图模型 .......................................................................................................................................................... 200 14.3.3 视频转码架构 ............................................................................................................................................................... 201 14.3.4 系统优化 ........................................................................................................................................................................ 207 14.3.5 错误处理 ........................................................................................................................................................................ 211 14.4 第四步 总结 ........................................................................................................................................................................... 213 15 设计云盘 ........................................................................................................................................................................................... 214 15.1 第一步 理解问题并确定设计的边界 ........................................................................................................................... 217 15.1.1 封底估算 ........................................................................................................................................................................ 218 15.2 第二步 提议高层级的设计并获得认同 ...................................................................................................................... 219 15.2.1 API .................................................................................................................................................................................... 219 15.2.2 跳出单服务器设计 ..................................................................................................................................................... 220 15.2.3 同步冲突 ........................................................................................................................................................................ 223 15.2.4 高层级设计.................................................................................................................................................................... 224 15.3 第三步 设计继续深入 ........................................................................................................................................................ 226 15.3.1 块服务器 ........................................................................................................................................................................ 226 15.3.2 高一致性需求 ............................................................................................................................................................... 227 15.3.3 元数据数据库 ............................................................................................................................................................... 228 15.3.4 上传流程 ........................................................................................................................................................................ 228 15.3.5 下载流程 ........................................................................................................................................................................ 229 15.3.6 通知服务 ........................................................................................................................................................................ 230 15.3.7 节约存储空间 ............................................................................................................................................................... 231 15.3.8 故障处理 ........................................................................................................................................................................ 231 15.4 第四步 总结 ........................................................................................................................................................................... 233 16 设计支付系统 ................................................................................................................................................................................. 234 16.1 第一步 理解问题并确定设计的边界 ........................................................................................................................... 235 16.2 第二步 提议高层级的设计并获得认同 ...................................................................................................................... 238 16.2.1 收款流程 ........................................................................................................................................................................ 238 16.2.2 复式记账系统(Double-Entry System) ............................................................................................................. 240 16.2.3 托管支付页面 ............................................................................................................................................................... 240 16.2.4 付款流程 ........................................................................................................................................................................ 246 16.2.5 实时卖家仪表板 .......................................................................................................................................................... 246 16.3 第三步 设计继续深入 ........................................................................................................................................................ 250 16.3.1 重试和幂等.................................................................................................................................................................... 250 16.3.2 同步支付vs.异步支付 ................................................................................................................................................ 254 16.3.3 一致性 ............................................................................................................................................................................. 258 16.3.4 处理支付失败 ............................................................................................................................................................... 263 16.3.5 支付安全 ........................................................................................................................................................................ 264 16.4 第四步 总结 ........................................................................................................................................................................... 266 17 设计指标监控和告警系统 ......................................................................................................................................................... 267 17.1 第一步 理解问题并确定设计的边界 ........................................................................................................................... 268 17.1.1 高层级需求.................................................................................................................................................................... 268 17.2 第二步 提议高层级的设计并获得认同 ...................................................................................................................... 270 17.2.1 基本原理 ........................................................................................................................................................................ 270 17.2.2 数据模型 ........................................................................................................................................................................ 270 17.2.3 高层级设计.................................................................................................................................................................... 273 17.3 第三步 设计继续深入 ........................................................................................................................................................ 274 17.3.1 指标数据的收集 .......................................................................................................................................................... 274
Page
6
17.3.2 扩展系统 ........................................................................................................................................................................ 279 17.3.3 查询服务 ........................................................................................................................................................................ 281 17.3.4 存储层 ............................................................................................................................................................................. 283 17.3.5 告警系统 ........................................................................................................................................................................ 286 17.3.6 可视化系统.................................................................................................................................................................... 287 17.4 第四步 总结 ........................................................................................................................................................................... 289 18 继续学习 ........................................................................................................................................................................................... 290 后记 ....................................................................................................................................................................................................................... 292 原著短评 ............................................................................................................................................................................................................. 293 版权信息 书名:搞定系统设计:面试敲开大厂的门 作者:Alex Xu 译者:徐江 出版社:电子工业出版社 出版时间:2023-11- 01 ISBN : 9787121465499 品牌方:电子工业出版社有限公司 本书由电子工业出版社有限公司授权微信读书进行上架 版权所有·侵权必究
Page
7
作者简介 Alex Xu 卡耐基梅隆大学硕士,他是一位经验丰富的软件工程师,也是一个创业者。 他曾在Twitter(现 已更名为“X”)、苹果和Zynga等公司工作。他热衷于设计和实现复杂的系统。
Page
8
译者介绍 徐江 毕业于瑞典皇家理工学院的系统生物学专业,曾就职于Thoughtworks软件技术有限公司, 现在在宝洁公司担任IT Service Manager,负责Consumer Relations。
Page
9
内容简介 系统设计面试被认为是所有技术面试中难度最大的面试,因为面试题的范围都非常广且模糊, 其答案也是开放的,不存在标准答案或正确答案。本书是专门为准备系统设计面试的读者而撰写 的,重点讨论了分布式系统中的常用组件和大型Web应用的系统架构,涵盖了几类常见的典型 应用,包括聊天系统、视频流系统、文件存储系统(云盘)、支付系统等,旨在帮助读者掌握构建 一个可扩展的系统所需的基础知识,为面试做好充分准备。 作为过来人,作者提出了应对面试题的“四步法”,即确定问题范围→总体设计→ 细节设计→总结,书中的案例基本上都是按照这个步骤进行解析的。这种独特的呈现方式,直接 针对面试者在面试过程中可能遇到的问题,帮助他们厘清思路,有条不紊地作答。 通过本书,读者可以了解不同Web应用的系统设计方案的要点及采用的技术,据此查漏补缺, 补齐自己知识体系中的短板,为面试成功增添更多的可能。而对于已经是架构师的读者而言,书中 的案例将为他们提供新的思路和灵感,有助于他们在面试中更加从容地展现自己的设计思路和实践 经验。
Page
10
译者序 本书的翻译始于2021年,在此期间我经历了两次新冠病毒感染、第二个孩子的出生等或大或 小的人生时刻。感谢家人的支持与陪伴,尤其感谢妻子对家庭的全心照料,让我可以抽身完成此 译作。 每次为了校对译稿而重读原著时,我都能获得新的知识。感谢编辑的细心和专业,同时我也感 慨于原著者知识之广博——他可以把如此大的话题细化到这么多特定的场景里逐一剖析。值得一提 的是,他的书是self-pulished的(自出版,国外的一种出版模式),在没有出版社营销和推广的 情况下,取得了不错的销售业绩,在Amazon上的评分也很亮眼(评分为4.5,有2400多人打 分)。这也折射出现在无论是国内还是国外,IT行业都在不停地“卷”,找工作时面试的压力也 越来越大。 随着AI大模型时代的到来,以后系统设计会走向何方,我们暂时不得而知。但我相信人类对专 业领域的知识灵活应用的能力,在一段时间内肯定还是强于机器的,所以阅读并掌握本书内容对系 统设计师还是有必要的。至少,掌握了书中的这些知识,你才可以写出更好的提示词(Prompt)。
Page
11
前言 很高兴你阅读本书,和我一起来学习系统设计面试技巧。关于系统设计的面试是所有技术面试 中最难的。面试者会被要求设计一个软件系统,比如news feed、谷歌搜索、聊天系统等。这些 问题令人望而生畏,没有特定的解题模式,通常范围都非常广且模糊,其答案也是开放的,也可以 说不存在标准答案或正确答案。 很多公司都设有系统设计面试,因为这种面试能考验软件工程师日常工作所需的沟通能力和解 决问题的能力。面试官会考查候选人如何分析一个模糊的问题并一步步解决这个问题;同时,他们 还会考查候选人阐述自己想法的能力、与其他人讨论的能力、评估及优化系统的能力。 系统设计的问题是开放式的。在现实世界中,不同的系统之间存在许多差别,而系统自身还要 应对各种变化。面试官期望得到的答案是一个能满足系统设计目标的架构。在面试过程中,对问题 的讨论可能会因面试官的个人风格不同而走向不同的方向。有些面试官喜欢询问高层架构设计方面 的问题,以全面地考查面试者的知识面,也有些面试官会选择一个或者几个领域来深入地考查知识 点。一般来说,应该搞清楚系统的需求、限制和瓶颈,以便面试双方可以有效地进行沟通。 本书的目标是提供一个可靠的策略,帮助面试者回答系统设计问题。采取正确的策略且具备必 要的知识,对面试的成功至关重要。 本书讲述了构建一个可扩展系统所需的基础知识。 你从本书中获得的知识越多,在解决系统 设计问题时就越从容。 本书还提供了一个逐步解决系统设计问题的框架,用了很多实例来阐释这种系统性的解决方法 且附有详细步骤,你可以照着操作。只要勤加练习,在回答系统设计面试问题时,你就会胸有成 竹。
Page
12
1 从0到100万用户的扩展 设计一个拥有上百万用户的系统是很有挑战性的,这将是一个不断优化、持续改进的过程。在 本章中,我们先创建一个单用户的系统,然后逐渐将其扩展成可以服务上百万用户的系统。读完本 章,你将掌握几个能帮助你破解系统设计面试难题的技巧。
Page
13
1.1 单服务器配置 万里征途总是从第一步开始的,构建一个复杂系统也是如此。我们从简单的部分着手,先让所 有的功能都在一个服务器上运行。图1-1展示了如何配置单台服务器,让一切都在其上运行,包 括 Web应用、数据库、缓存等。 研究请求流和流量源头有助于我们理解这个配置。我们先来看请求流(如图1-2所示)。 图1-1
Page
14
图1-2 1. 用户通过输入域名(例如api.mysite.com)来访问网站。通常,域名系统(DNS)是由 第三方提供的付费服务,它并不是由我们的服务器来托管的。 2. IP 地址被返回给网页浏览器或者移动应用。在图1-2 所示的例子中, 被返回的IP 地址是 15.125.23.214。 3. 一旦获知IP地址,HTTP请求 就被直接发送给Web服务器。 4. Web服务器返回HTML页面或者JSON响应来渲染页面。 接下来,我们研究一下流量源头。Web服务器的流量有两个源头:Web应用和移动应用。 •Web应用:它运用服务器端语言(Java、Python等)来处理业务逻辑、数据存储等;它 还使用客户端语言(HTML和JavaScript)来展示内容。 • 移 动 应 用 : HTTP 是 移 动 应 用 与 Web 服 务 器 之 间 的 通 信 协 议 。 而 JSON(JavaScript Object Notation)因其十分简单而被广泛用作数据传输时的API响应格式。 以下是一个JSON格式的API响应例子。
Page
15
(This page has no text content)
Page
16
1.2 数据库 随着用户基数的增长,一台服务器已经无法满足需求,我们需要多台服务器:一台用于处理 Web应用/移动应用的流量,另一台用作数据库(如图1-3所示)。把处理Web应用/移动应用流量 (网络层)的服务器与数据库(数据层)服务器分开,我们就可以对它们分别进行扩展。 1.2.1 使用何种数据库 图1-3 你可以选择传统的关系型数据库,也可以选择非关系型数据库。我们来看看它们的区别。 关系型数据库通常也叫作关系型数据库管理系统(RDBMS)或者SQL数据库,其中最流行的 有 MySQL、Oracle、PostgreSQL等。关系型数据库通过表和行来表示和存储数据。你可以使用 SQL对不同的数据库表执行连接(join)操作。 非 关 系 型 数 据 库 又 叫 作 NoSQL 数 据库。 流 行 的 非 关 系 型 数 据库有 CouchDB 、 Neo4j 、 Cassandra、HBase、Amazon DynamoDB等 。它们可以分为四类:键值存储、 图存储、列存储和文档存储。非关系型数据库一般不支持连接操作。 对于大多数开发者而言,关系型数据库是最好的选择,因为它们已经有40多年的历史,而且 一直表现不错。但如果它们无法满足你的特殊使用场景要求,你就需要考虑关系型数据库之外的 选项。当需要满足如下条件时,非关系型数据库可能是一个正确的选择: •你的应用只能接受非常低的延时。 •应用中的数据是非结构化的,或者根本没有任何关系型数据。 •只需要序列化(JSON、XML、YAML等格式)和反序列化数据。 •需要存储海量数据。
Page
17
1.3 纵向扩展vs.横向扩展 纵向扩展也叫作向上扩展,指的是提升服务器的能力(CPU、RAM等)。横向扩展也叫作向外 扩展,指的是为你的资源池添加更多服务器。 当流量小的时候,纵向扩展是一个很好的选择,其主要优势是简单。不过,它有一些重大局 限。 •纵向扩展是有硬性限制的,你不可能给一台服务器无限添加CPU和内存。 •纵向扩展没有故障转移和冗余。一旦一台服务器宕机,网站/应用也会随着一起完全不可用。 由于纵向扩展存在这些限制,因此对于大型应用来说,采用横向扩展更合适一些。 在我们前面的设计中,用户是直接连接到Web服务器的。一旦服务器离线,用户就无法访问网 站了。还有一种场景是,非常多的用户同时访问Web服务器,达到了其负载上限,这时用户就会 普遍感受到网站响应慢或者无法连上服务器。解决这些问题的最佳方法是使用负载均衡器。
Page
18
1.4 负载均衡器 负载均衡器会把输入流量均匀分配到负载均衡集里的各个Web服务器上。图1-4展示了负载均衡 器是怎么工作的。 如图1-4所示,用户可以直接连接该负载均衡器的公共IP地址。这样设置后,Web服务器就再 也不能被任何客户端直接访问了。为了提高安全性,服务器之间的通信使用私有IP地址。私有IP地址 只可以被同一个网络中的服务器访问,在公网中是无法访问的。负载均衡器和Web服务器之间使 用私有IP地址来通信。 增加了负载均衡器和一台Web服务器后,我们成功解决了网络层的故障转移问题,提升了网络 层的可用性。具体细节如下: • 如果服务器1离线,所有的流量都会被路由到服务器2,从而避免整个网站宕机。我们可 以之后再将一台新的“健康的”Web服务器添加到服务器池中,以平衡负载。 • 如果网站流量增长非常快,两台服务器不足以处理这些流量,那么负载均衡器可以轻松 地解决这个问题。只需要在服务器池中添加更多服务器,负载均衡器就会自动将请求发给新加入 的服务器。 图1-4 现在网络层看来已经不错了,那么数据层呢?目前的设计方案中只有一个数据库,所以无法支 持数据库的故障转移和冗余。数据库复制是解决这些问题的常用技巧。
Page
19
1.5 数据库复制 根据维基百科上的定义,“在很多数据库管理系统中,通常都可以利用原始数据库 (Master,主库)和拷贝数据库(Slave,从库)之间的主从关系进行数据库复制。” 。 主库通常只支持写操作,从库保存主库的数据副本且仅支持读操作。所有修改数据的指令,如 插入、删除或更新等,都必须发送给主库来执行。在大部分应用中,对数据库的读操作远多于写操 作,因此系统中从库的数量通常多于主库的数量。图1-5展示了一个主库搭配多个从库的例子。 数据库复制有如下优点: 图1-5 • 性能更好。在主从模式下,所有的写操作和更新操作都发生在主节点(主库)上,而读 操作被分配到各个从节点(从库),因此系统能并行处理更多的查询,性能得到提升。 • 可靠性高。如果有一台数据库服务器因自然灾害而损毁,比如遭遇台风或者地震,数据 依然被完好保存,你不需要担心数据会丢失,因为这些数据已经被复制到处于不同地理位置的其他 数据库服务器中。 • 可用性高。由于不同物理位置的从库都复制了数据,因此即使一台数据库服务器宕机, 你的网站依然可以运行,因为另一台数据库服务器里存储了数据。 前面讨论了负载均衡器是如何帮助提升系统可用性的,这里我们问一个同样的问题:如果有数 据库服务器宕机了怎么办?图1-5所示的架构可以应对这种情况。 • 如果只有一个从库,而它宕机了,则系统暂时会将读操作路由至主库。一旦发现有从库 宕机,就会有一个新的从库来替代它。要是有多个从库可用,读操作会被重定向到其他正常工作 的从库上;同样,也会有一个新的数据库服务器来替代宕机的那个。 • 如果主库宕机,会有一个从库被推选为新的主库。所有的数据库操作会暂时在新的主 库上执行。另一个从库会替代原来的从库并立即开始复制数据。在生产环境中,因为从库的数据不 一定是最新的,所以推选一个新的主库会更麻烦。缺失的数据需要通过运行数据恢复脚本来补全。 尽管还有别的数据复制方式可以解决数据缺失问题,比如多主复制或者循环复制,但是它们的设置 更加复杂,本书不对这些内容进行讨论。感兴趣的读者可以进一步阅读相关参考资料 。 图1-6展示了添加了负载均衡器和数据库复制之后的系统设计方案。
Page
20
图1-6 我们再来看一下现在的设计: •用户从DNS获取负载均衡器的IP地址。 •用户通过这个IP地址连接负载均衡器。 •HTTP请求被转发到服务器1或者服务器2上。 •Web服务器在从库中读取用户数据。 •Web服务器把所有修改数据的操作请求都转发到主库上,包括写、更新和删除操作。
Loading comments...
Reply to Comment
Edit Comment