[聚合文章] 《大型网站技术架构》笔记

软件架构 2017-04-11 22 阅读

其实这是一本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

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


注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。