惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
月光博客
月光博客
AI
AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
CXSECURITY Database RSS Feed - CXSecurity.com
WordPress大学
WordPress大学
GbyAI
GbyAI
L
Lohrmann on Cybersecurity
O
OpenAI News
Schneier on Security
Schneier on Security
P
Palo Alto Networks Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Troy Hunt's Blog
V2EX - 技术
V2EX - 技术
W
WeLiveSecurity
L
LINUX DO - 最新话题
人人都是产品经理
人人都是产品经理
S
Security Affairs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
Arctic Wolf
Recorded Future
Recorded Future
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
G
GRAHAM CLULEY
N
Netflix TechBlog - Medium
TaoSecurity Blog
TaoSecurity Blog
C
Check Point Blog
Scott Helme
Scott Helme
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Apple Machine Learning Research
Apple Machine Learning Research
PCI Perspectives
PCI Perspectives
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Vercel News
Vercel News
The Hacker News
The Hacker News
Y
Y Combinator Blog
Latest news
Latest news
SecWiki News
SecWiki News
Hugging Face - Blog
Hugging Face - Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
Webroot Blog
Webroot Blog
Google DeepMind News
Google DeepMind News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
Cisco Blogs
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
宝玉的分享
宝玉的分享
L
LINUX DO - 热门话题

明明如月成长笔记

个人数据的开源备份:从明清档案之殇想到的 简体字的双重优势:打字效率与扫盲成效全解析 四小时深圳书城奇遇:那些藏在书架间的偶然与必然 正式把我的笔记系统迁移到 Obsidian,为了和 AI 配合 Gemini CLI 登录踩坑记录:GOOGLE_CLOUD_PROJECT_ID 的坑与解法 在 MacOS 上,成功恢复存储卡上被误删的照片 AI CLI 工具:Claude Code, Codex, Gemini CLI, Qwen code, CodeBuddy cli, cursor-agent 我的常用命令 港漂日记62:父亲节独自带娃,室内游戏、香港公园探展、观鸟、品味米其林餐厅 南航随心飞机票爬虫解密 acw_sc__v2 港漂日记61:香港私立诊所首诊:商业医保如何改变我的就医体验? 香港历史博物馆:看秦始皇兵马俑,还能和孔子比身高? 港漂日记59:母亲节礼物!AI 涂色小技巧,让孩子的爱跃然纸上 港漂日记60:西营盘网红旧书店 Book & Go 淘书记 港漂日记58:萌娃中环学体操,课后老师狂点赞 五一游记D4:深圳笔架山儿童乐园,邂逅无人机送外卖 我的400篇博客都写了些什么 珊瑚海兔四岁啦 港漂日记D159:亲子同乐日:一场精彩的幼儿园嘉年华 蛇年春节自驾D10:东莞-深圳-香港 DeepSeek教我如何收拾行李箱 福田取逗留签 回港新方式 蛇年春节自驾D9:江门-顺德-东莞 中国侨都华侨华人博物馆 东莞迎宾馆 蛇年春节自驾D8:茂名-开平-江门 挥春作业 粤西堵车 开平碉楼 迎财神 茂名博物馆参观记 蛇年春节自驾D7:茂名 中国第一摊 茂名博物馆 亚朵酒店 蛇年春节自驾D6:南宁-茂名 发财树 青秀山 路途亲子游戏 蛇年春节自驾D5:南宁过大年 醒狮贺岁 三街两巷 特色美食 骑行穿城 琅西夜市 打铁花 新春好!我用DeepSeek写祝福,顺便送你三款红包封面 蛇年春节自驾D4:钦州-南宁 钦州老街,万丽年夜饭 蛇年春节自驾D3:海陵岛-钦州 绝美悬崖餐厅,海景房租赁行情 明明如月成长笔记2024年公众号创作回顾(含免费红包封面🧧) 蛇年春节自驾D2:深圳-阳江-海陵岛 明明和虹虹2024年公众号创作回顾(含免费红包封面🧧) 蛇年春节自驾D1:深圳亲子游 港漂日记D118:备战HK100,徒步港岛'恐龙径' 港漂日记D115:春节大筹备:AI 助力,书法添彩 港漂日记D114:推荐两款适合新港漂使用的app 2025新年计划之:全面拥抱AI 港漂日记D111:备战HK50 港岛径拉练 港漂日记D110:一个普通的周六见闻,聚餐、借书、儿童乐园,体育选拔机制,公共自习室,挫折教育 我的2024:辗转四城,忙碌充实 港漂日记D104:港大幸福家庭博览会,亲子工坊与未来趋势 港漂日记D101:赤柱圣诞狂欢,古迹海景遛娃 港漂日记D100:港漂百日,圣诞快乐🎄 港漂日记D97:欢乐星期天:港大访古探幽,尖沙咀购物赏景 港漂日记D96:太平山卢吉道:一次穿越山林、俯瞰繁华的震撼之行 皇马巴萨元老赛:传奇重逢,闪耀球场 港漂日记D93:宝宝居港三月余,英语表达大进步 港漂日记D90:绘本阅读,潜水展,华嫂冰室 港漂日记D89:宝妈带娃闯大馆,老友相聚话鸡娃 港漂日记D84:消防队亲子嘉年华:风车 DIY、叠杯子,奖品拿到手软! 港漂日记D83:港澳通行证:深圳换证碰壁,香港解锁秘籍 港漂日记D82:笑不活了!在 “知悭识水”嘉年华,我被自家娃的“鬼画符”征服 别再傻傻手工记账!AI 加持 beancount,效率狂飙 N 倍,真香警告 港漂日记D76:勇闯艺趣嘉年华,数数宝宝戴了几顶帽子 港漂日记D75:抵港首次学校秋游 奔赴元朗开心农场 港漂日记D73:深圳盐田周末放松游 | 高铁'灵活行'思考 | 灯塔图书馆 | 壹海城 | 盐田印象 | 港深对比 港漂日记D72:深度揭秘:我是怎么借助AI创作宝宝校庆视频的 港漂日记D71:盐田中英街漫记:海岸盛景,历史长歌 港漂日记D70:海南巨舰下香港,全民共赴海军约 港漂日记D69:完了!在香港,幼儿园小班作业居然做到晚上九点多。。。 港漂日记D68:亲子共赴嘉年华,反诈工坊入童心 港漂日记D61:哇塞!西九龙超燃嘉年华,亲子嗨玩,禁毒护航! 港漂日记D55:台风过境,顶楼泳池看海景,铜锣湾逛吃不停歇 港漂日记D50:探秘香港看病:为宝宝抢号二十次,诊疗却遭宝妈质疑 “没意义”? 港漂日记D45:复诊体验,天哪!在香港做B超居然排到了2027年。。。 港漂日记D42:香港迪士尼 x 万圣节:游客 Cosplay 百态,共赴奇趣冒险 港漂日记D32:在香港读杂志《明报周刊》《国家地理》 港漂日记D31:在校尿裤子怎么办?爷爷寄来滑板车 爸爸讲英文绘本 港漂日记D30:楼顶滑步车 画画闹情绪 拼多多发掘低价秘诀 港漂日记D29:生活的琐碎与温暖 港漂日记D28:深圳一日游 跨境巴士体验 万象天地 陶陶居 gaga 港漂日记D27:香港公园 读绘本 淘拼集运自提体验pk 睡前故事的四个阶段 港漂日记D26:幼儿园小班竟有五项作业 给工人姐姐一部手机 港漂日记D25:社区托班体验 菜鸟驿站取件 港漂日记D22:社区托班报名 中山纪念公园体育课 乔治五世纪念公园观察 港漂日记D21:东涌东荟城 大屿山双峰越野赛 辅导作业 港漂日记D20:和平号环球游轮分享会 数码港 儿童加油站 港漂日记D15:参观幼儿园,登太平山看夜景,杜莎夫人蜡像馆 港漂日记D14:长洲岛的缤纷一日:奇趣与温情交织 港漂日记D13:香港中央图书馆观察 麦当劳价格 佐治五世纪念公园 社区配套 港漂日记D12: 免费早报 宝宝报课情况 AppleTV 港漂日记D11: 回国代理,智能家居,晨间习惯 港漂日记D10: 折腾智能家具设备,HomeKit,HomeAssistant,AppleTV,米家 港漂日记D8:西区社区中心探访 困难班 辅导班 童军 港漂日记D7:北上消费,中式独居生活vs美式家庭生活,车和家,重典治乱 港漂日记D6:宝宝天星小轮,宝爸研究医保 港漂日记D5:回顾宝宝一周学习表现 港漂日记D4:宝宝生活习惯与社交的思考 港漂日记D3:香港中秋怎么放假,看亚冠,老房子水质问题 港漂日记D2:中秋铜锣湾赏灯,学校手工作品 港漂日记D1:宝宝上学,校车接送,街市买菜,安装马桶,物业规矩,垃圾处理,读报感悟 港漂日记D0:南京飞香港,禄口V7,国泰航空,光大银行送机,上海银行境外接机 在南京六朝博物馆,我看到了195件禁止出国文物中的2件 驾照过期了怎么办?原来还可以在异地轻松补办 镇江博物馆:精美的器物与缺失的展示 镇江一日游:润扬大桥,金山寺,锅盖面,镇江博物馆 扬州一日游:博物馆、历史、恐龙、雕版印刷、富春茶社 子女体育规划指南:揭秘奥运冠军对身体素质的要求 杭州萧山机场 T4 航站楼国际出发 V25 贵宾厅体验 2035年的上海是什么样子?上海城市规划展示馆绝美揭秘! 李笑来又出书了!这次只花了18美金和一天时间!深度拆解他是如何用GPT-4o快速写书的
《系统设计面试》读书笔记(连载中)
lmm333 · 2024-06-30 · via 明明如月成长笔记

最近在读 Alex Xu 的《System Design Interview》 这本书,系统学习一下系统设计面试的相关问题。读完觉得有必要记录一些笔记,帮助自己”学而时习之”,于是记录在这里,不断更新中~

为了准备英文面试,我读的是英文版,这本书的中文版已经出版,豆瓣 8.3 分,叫做 《搞定系统设计:面试敲开大厂的门》 有兴趣也可以阅读。

第五章:一致性哈希

第六章:KV存储(键值对存储)

  • KV 存储,又叫 KV 数据库
  • Key 各不相同,可以是 字符串,也可以是 哈希值
  • Value 透明的对象
  • 设计:没有完美的设计,需要权衡以下问题
    • 读,写,内存使用
    • 一致性,可用性
  • 需要考虑的功能特性
    • 键值对大小
    • 存储大数据的能力
    • 高可用
    • 高扩展
    • 自动扩展
    • tunable consistency(可调的一致性)
    • 低延时

单机 KV 存储

  • 用 哈希表 实现就行,数据都放内存里
  • 遇到空间问题可以:
    • 数据压缩
    • 内存只存放热数据,其他的存磁盘里
  • 缺点:
    • 即使有了优化,仍然很容易遇到单机的空间上限,数据多了一定要上大数据

分布式 KV 存储

  • distributed key-value store 也叫 distributed hash table (分布式哈希表)
  • CAP 理论:
    • Consistency 一致性:同一时间,所有客户端,都返回同样的数据
    • Availability 可用性:不论连接到哪个节点,都有数据返回
    • Partition Tolerance 分区容忍性:系统在网络分区(即网络中断导致通信失败)的情况下仍然能够继续运行
  • CAP三个里最多同时满足两个,至少要牺牲一个
    • CA:因为网络故障在真实世界里不可避免,所以选 CA 而放弃 P 的情况是不可能存在的
    • CP:选一致性,放弃可用性。比如银行,对账户余额要求高,如果遇到问题,可以直接报错,不能返回脏数据
    • AP:选可用性,放弃一致性。为了保证高可用,遇到网络故障,数据同步中断,可能返回脏节点的脏数据,等网络恢复后会同步成功

系统组件

  • Data Partition 数据分片
    • 设计目标:
      • 数据能分布存储
      • 加减节点的时候,数据移动少
    • 使用 第五章 介绍的 一致性哈希 可以解决这个问题,好处
      • 自动扩容
      • 均匀(容量越大的节点,配置越多的虚拟节点)
  • Data Replication 数据复制
    • 为了高可用,必须吧数据复制到不同的节点
    • 一般是 哈希环 上顺时针往后的 N 个节点,如果有虚拟节点,适当跳过,选择不同的物理节点
    • 一般同一个数据中心的机器会同时发生 电力/网络/自然灾难 等故障,最好放到不同的数据中心,数据中心之间用高速网络连接
  • Consistency 一致性
    • 强弱一致性定长
      • N = 副本总数
      • Q = 写操作至少需要确认的节点个数
      • R = 读操作至少需要确认的节点个数
      • 如果 W + R > N, 就满足强一致性, 一般 N = 3, W = R = 2
      • 如果 R = 1, W = N 就是为快速读取设计的
      • 如果 W = 1, R = N 就是为快速写入设计的
    • 一致性模型
      • 强一致性:任何读写操作,都是最近数据,没有脏数据(不够高可用)
      • 弱一致性:不能保证
      • 最终一致性:给足够的时间同步数据,最终数据都是一致的(高可用的服务,一般用这种,比如 Dynamo Cassandra)
  • Inconsistency resolution 不一致性恢复
  • Handling failures 错误处理
  • System architecture diagram 系统架构图
  • Write path 读路径
  • Read path 写路径

词汇表

  • tradeoff 权衡
  • opaque 不透明的
  • sacrificing availability 牺牲可用性
  • unavoidable 不可避免的
  • immutable 不可变的
  • replica 复制
  • high

ChangeLog

  • 24-07-01 新建文档,部分发布:第六章:KV存储

附录,中文版目录(来源于豆瓣页面)

1 从0到100万用户的扩展 1
1.1 单服务器配置 1
1.2 数据库 3
1.2.1 使用何种数据库 4
1.3 纵向扩展 vs. 横向扩展 5
1.4 负载均衡器 5
1.5 数据库复制 7
1.6 缓存 10
1.6.1 缓存层 10
1.6.2 使用缓存时的注意事项 11
1.7 内容分发网络 12
1.7.1 使用CDN时的注意事项 14
1.8 无状态网络层 15
1.8.1 有状态架构 15
1.8.2 无状态架构 16
1.9 数据中心 18
1.10 消息队列 20
1.11 记录日志、收集指标与自动化 21
1.11.1 添加消息队列和各种工具 21
1.12 数据库扩展 23
1.12.1 纵向扩展 23
1.12.2 横向扩展 23
1.13 用户量达到甚至超过了100万 27
2 封底估算 28
2.1 2的幂 28
2.2 每个程序员都应该知道的操作耗时 29
2.3 可用性相关的数字 31
2.4 案例:估算推特的QPS和存储需求 31
2.5 小技巧 32
3 系统设计面试的框架 33
3.1 有效的系统设计面试的四个步骤 34
3.1.1 第一步:理解问题并确定设计的边界 34
3.1.2 第二步:提议高层级的设计并获得认同 36
3.1.3 第三步:设计继续深入 38
3.1.4 第四步:总结 41
3.2 面试中每一步的时间分配 43
4 设计限流器 44
4.1 第一步:理解问题并确定设计的边界 45
4.2 第二步:提议高层级的设计并获得认同 46
4.2.1 在哪里实现限流器 46
4.2.2 流量限制算法 48
4.2.3 高层级架构 56
4.3 第三步:设计继续深入 57
4.3.1 流量限制规则 57
4.3.2 超过流量的限制 58
4.3.3 详细设计 58
4.3.4 分布式系统中的限流器 59
4.3.5 性能优化 61
4.3.6 监控 62
4.4 第四步:总结 63
5 设计一致性哈希系统 64
5.1 重新哈希的问题 64
5.2 一致性哈希 66
5.2.1 哈希空间和哈希环 66
5.2.2 哈希服务器 67
5.2.3 哈希键 68
5.2.4 查找服务器 68
5.2.5 添加服务器 69
5.2.6 移除服务器 70
5.2.7 两个问题 71
5.2.8 虚拟节点 73
5.2.9 找到受影响的键 74
5.3 总结 76
6 设计键值存储系统 77
6.1 理解问题并确定设计的边界 78
6.2 单服务器的键值存储 78
6.3 分布式键值存储 79
6.3.1 CAP理论 79
6.3.2 系统组件 81
6.3.3 数据分区 82
6.3.4 数据复制 83
6.3.5 一致性 84
6.3.6 不一致性的解决方案:版本控制 86
6.3.7 处理故障 89
6.3.8 系统架构图 94
6.3.9 写路径 96
6.3.10 读路径 97
6.4 总结 98
7 设计分布式系统中的唯一ID生成器 100
7.1 第一步:理解问题并确定设计的边界 101
7.2 第二步:提议高层级的设计并获得认同 101
7.2.1 多主复制 102
7.2.2 UUID 102
7.2.3 工单服务器 103
7.2.4 推特的雪花系统 104
7.3 第三步:设计继续深入 105
7.4 第四步:总结 106
8 设计URL缩短器 108
8.1 第一步:理解问题并确定设计的边界 108
8.1.1 封底估算 109
8.2 第二步:提出高层级的设计并获得认同 109
8.2.1 API端点 109
8.2.2 URL重定向 110
8.2.3 缩短URL 112
8.3 第三步:设计继续深入 112
8.3.1 数据模型 112
8.3.2 哈希函数 113
8.3.3 深入探讨URL缩短流程 116
8.3.4 深入探讨URL重定向流程 117
8.4 第四步:总结 118
9 设计网络爬虫 119
9.1 第一步:理解问题并确定设计的边界 121
9.2 第二步:提议高层级的设计并获得认同 122
9.3 第三步:设计继续深入 127
9.3.1 DFS vs. BFS 128
9.3.2 URL前线 129
9.3.3 HTML下载器 134
9.3.4 健壮性 135
9.3.5 可扩展性 136
9.3.6 检测和避免有问题的内容 137
9.4 第四步:总结 137
10 设计通知系统 139
10.1 第一步:理解问题并确定设计的边界 140
10.2 第二步:提议高层级的设计并获得认同 140
10.2.1 不同类型的通知 141
10.2.2 联系信息的收集流程 143
10.2.3 通知的发送与接收流程 144
10.3 第三步:设计继续深入 148
10.3.1 可靠性 148
10.3.2 其他组件和要考虑的因素 149
10.3.3 更新后的设计 151
10.4 第四步:总结 152
11 设计news feed系统 153
11.1 第一步:理解问题并确定设计的边界 154
11.2 第二步:提议高层级的设计并获得认同 154
11.2.1 news feed API 155
11.2.2 feed的发布 155
11.2.3 news feed的构建 156
11.3 第三步:设计继续深入 157
11.3.1 深入探讨feed的发布流程 158
11.3.2 深入探讨news feed的获取流程 161
11.3.3 缓存架构 162
11.4 第四步:总结 163
12 设计聊天系统 165
12.1 第一步:理解问题并确定设计的边界 165
12.2 第二步:提议高层级的设计并获得认同 167
12.2.1 轮询 168
12.2.2 长轮询 169
12.2.3 WebSocket 170
12.2.4 高层级设计 171
12.2.5 数据模型 175
12.3 第三步:设计继续深入 177
12.3.1 服务发现 177
12.3.2 消息流 178
12.3.3 显示在线状态 182
12.4 第四步:总结 185
13 设计搜索自动补全系统 187
13.1 第一步:理解问题并确定设计的边界 188
13.1.1 封底估算 189
13.2 第二步:提议高层级的设计并获得认同 189
13.2.1 数据收集服务 190
13.2.2 查询服务 190
13.3 第三步:设计继续深入 191
13.3.1 字典树数据结构 192
13.3.2 数据收集服务 197
13.3.3 查询服务 200
13.3.4 字典树操作 202
13.3.5 扩展存储 204
13.4 第四步:总结 205
14 设计视频分享系统 207
14.1 第一步:理解问题并确定设计的边界 208
14.1.1 封底估算 209
14.2 第二步:提议高层级的设计并获得认同 210
14.2.1 视频上传流程 211
14.2.2 视频流式传输流程 216
14.3 第三步:设计继续深入 217
14.3.1 视频转码 217
14.3.2 有向无环图模型 217
14.3.3 视频转码架构 219
14.3.4 系统优化 225
14.3.5 错误处理 230
14.4 第四步:总结 231
15 设计云盘 232
15.1 第一步:理解问题并确定设计的边界 233
15.1.1 封底估算 235
15.2 第二步:提议高层级的设计并获得认同 235
15.2.1 API 236
15.2.2 跳出单服务器设计 237
15.2.3 同步冲突 240
15.2.4 高层级设计 241
15.3 第三步:设计继续深入 243
15.3.1 块服务器 243
15.3.2 高一致性需求 245
15.3.3 元数据数据库 245
15.3.4 上传流程 246
15.3.5 下载流程 247
15.3.6 通知服务 249
15.3.7 节约存储空间 249
15.3.8 故障处理 250
15.4 第四步:总结 251
16 设计支付系统 253
16.1 第一步:理解问题并确定设计的边界 254
16.2 第二步:提议高层级的设计并获得认同 256
16.2.1 收款流程 256
16.2.2 复式记账系统(Double-Entry System) 258
16.2.3 托管支付页面 259
16.2.4 付款流程 265
16.2.5 实时卖家仪表板 265
16.3 第三步:设计继续深入 266
16.3.1 重试和幂等 267
16.3.2 同步支付 vs. 异步支付 271
16.3.3 一致性 276
16.3.4 处理支付失败 282
16.3.5 支付安全 284
16.4 第四步:总结 285
17 设计指标监控和告警系统 287
17.1 第一步:理解问题并确定设计的边界 287
17.1.1 高层级需求 288
17.2 第二步:提议高层级的设计并获得认同 289
17.2.1 基本原理 290
17.2.2 数据模型 290
17.2.3 高层级设计 293
17.3 第三步:设计继续深入 294
17.3.1 指标数据的收集 295
17.3.2 扩展系统 300
17.3.3 查询服务 303
17.3.4 存储层 304
17.3.5 告警系统 307
17.3.6 可视化系统 309
17.4 第四步:总结 310
18 继续学习 311
后记 313