读书程序员

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

2017-12-17  本文已影响122人  hy9be

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

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

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

关于大型网站

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


大型网站追求的性能指标

可用性 availability

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

伸缩性 scalability

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

负载均衡

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

扩展性 extensibility

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

安全性 security


大型网站的演化发展历程

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

阶段 1

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


阶段 1

阶段 2

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

阶段 3

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

阶段 4

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

阶段 5

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

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


    阶段 5

阶段 6

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


阶段 6

阶段 7

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

阶段 8

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


阶段 8

阶段 9

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


阶段 9

阶段 10

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


阶段 10
上一篇 下一篇

猜你喜欢

热点阅读