《大型网站技术架构》笔记

其实这是一本2012年的老书,5年的时间对于互联网技术来说,已经可以是另一个纪元了。但是当我重新翻看这本小书的时候,发现作者对概念的梳理,是很有借鉴之处的。去年有一段时间有事没事就会在youtube上看system design的视频,怎么设计short url,怎么设计Twitter,怎么设计Uber。现在重读这本书的时候我翻出那些视频,发现这本5年前的“老”书里,其实就有几乎所有这类问题的答案和思路。考虑到成书需要的时间,也许我可以很有把握的做结论,中国互联网企业的技术应用、解决一线问题的能力,其实是非常优秀的。

在这里把这本书的笔记写一写,与各位同仁共勉。为了理顺逻辑,我调整了一下知识点的顺序。

另:本文中使用的图片均为原书截图,如果你喜欢请购买原版图书支持作者。我买的就是正版!

关于大型网站

大型网站是相当于企业级应用来说的,特点有

  • 高并发,大流量
    • Google每天需要处理35亿条搜索
    • 淘宝双十一第一分钟的独立访问用户就是千万级别
  • 高可用
  • 海量数据
  • 用户分布广泛,网络情况复杂
  • 安全环境恶劣



大型网站追求的性能指标

可用性 availability

在服务器宕机时,服务和应用是否依旧可用。网站使用的商用服务器硬件的设计目标本身并不保证高可用性。必须在系统设计层面予以考虑。

伸缩性 scalability

定义:往集群中加入服务器的手段,缓解并发访问压力的难易程度

负载均衡

  • 技术
    • HTTP重定向负载均衡:需要两次请求才能完成一次访问,性能较差。
    • DNS域名解析负载均衡:DNS缓存不受网站控制,可能会解析到某个已经下线的服务器,导致网站无法访问。一般作为一级负载均衡,就是说解析得到的服务器是提供负载均衡的内部服务器,而不是直接提供服务的应用服务器。
    • 反向代理负载均衡:可能会成为单点瓶颈
    • IP层
    • 数据链路层
  • 算法
    • Round Robin, RR
    • Weighted Round Robin, WRR
    • Random
    • Least Connection
    • Source Hashing

不同的服务器集群的伸缩性

  • 对于无状态的应用服务器集群一般较容易
  • 缓存服务器集群加入新服务器后可能会导致缓存路由失效,导致大部分缓存数据都无法访问
    • 余数Hash算法可能会导致加入新缓存服务器时,有N/(N+1)的缓存无法被再次命中
    • 使用一致性Hash算法
  • 关系型数据库很难做到大规模集群的伸缩性
    • Cobar:将应用层提交的查询分解为多条SQL给不同的数据库服务器执行。最后合并结果。
    • GreenPlum:支持跨服务器的Join操作。但延时比较长。
  • NoSQL数据库一般先天就是为伸缩性设计的

扩展性 extensibility

满足功能需求的难易程度。一般使用事件驱动的架构或分布式服务实现。

安全性 security



大型网站的演化发展历程

任何大型网站都是从小网站进化出来的:

阶段 1

应用程序、文件、数据库都在同一台服务器上


阶段 1

阶段 2

应用和文件、数据分离。使用三台专职服务器:

  • 文件服务器:执行大量业务逻辑,需要CPU优化的硬件
  • 数据库服务器:磁盘读写和缓存读写,需要快速的硬盘和内存
  • 文件服务器:大硬盘


    阶段 2

阶段 3

数据库成为瓶颈。加入对最hot的20%的数据缓存:

  • 应用服务器上的本地缓存(大小受限)
  • 专门的分布式缓存服务器集群上的远程缓存


    阶段 3

阶段 4

应用服务器成为瓶颈。将应用服务器扩展为集群。
此时的问题:

  • Session管理:4种方式
    • 复制:服务器之间同步所有session。资源利用率太低。
    • 绑定:利用load balancer的源地址Hash,确保同一IP的请求被分发到同一服务器。可用性目标很难达到,一旦某台服务器宕机,它维护的所有session就会丢失
    • Cookie记录:不少网站采用。但受限cookie的大小,并且如果用户关闭浏览器的cookie功能,session就将无法工作。
    • 专用session服务器:将应用服务器分为有状态和无状态部分。有状态的部分用专门的session服务器来维护。一般来说redis是一个很好的选择。


      阶段 4

阶段 5

对数据看的写操作和未命中缓存的读操作,在用户达到一定规模后使得数据库再次成为瓶颈。这时启用主从备份功能:

  1. 写数据直接写到主数据库
  2. 主数据库通过主从备份机制把写数据更新到从数据库
  3. 读操作读取从数据库


    阶段 5

阶段 6

随着网站用户群扩散,特定地区的用户访问网站会遇到性能问题。此时开始对前端性能进行优化,启用CDN和反向代理


阶段 6

阶段 7

单机数据库和文件系统不能满足性能和高可用性需求,启用分布式数据库和分布式文件服务器:

  • 分布式存储系统的三类故障:
    • 瞬时鼓掌:网络中断、服务器GC等,可重试后自行恢复
    • 临时故障:交换机宕机、网卡松动、内存损坏、CPU过热等,需要人工干预,持续几十分钟到几个小时
    • 永久故障:硬盘损坏
  • 使用备份和冗余
  • 服务器宕机下的失效转移:确认失效 -> 访问转移 -> 数据恢复
  • CAP原理:可用性、某种程度上的数据一致性、伸缩性之间的权衡
    • 强一致:各个副本数据总是一致的,对更新和读操作的响应也是一致的
    • 用户一致:各个副本的数据可能是不一致的,但是用户一旦访问数据,就会通过纠错和校验机制确保用户得到的数据是一致正确的
    • 最终一致:各个副本的数据可能是不一致的,用户得到的数据也可能是不一致的(同一个用户连续访问,或者多个用户同时访问,结果不同)。但是系统经过一段时间的自我恢复和修正,数据最终达到一致。


      阶段 7

阶段 8

网站业务越来越复杂,对搜索和存储的需求也越来越复杂。此时引入NoSQL和非数据库查询技术,如搜索引擎。


阶段 8

阶段 9

业务场景复杂度与日俱增,此时开始采取分而治之的手段把网站业务拆分成不同的产品线。技术上网站被拆分成多个独立维护的应用。应用之间通过如消息队列等手段通信。


阶段 9

阶段 10

随着业务拆分越来越小,应用系统的整体复杂程度急剧上升,部署和维护越来越困难。此时采取分布式服务架构,把公共的可复用业务提取出来独立部署


阶段 10
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,706评论 4 366
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,002评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,462评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,375评论 0 216
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,763评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,849评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,033评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,768评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,490评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,734评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,204评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,566评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,227评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,137评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,934评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,926评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,774评论 2 274

推荐阅读更多精彩内容