一、大型网站架构演化

本篇文章是《大型网站技术架构》的笔记,感兴趣可以阅读该书。

1.1 大型网站系统特点

序号 特点 描述
1 高并发、大流量 需要面对高并发用户、大流量访问
2 高可用 系统7X24 小时不间断服务
3 海量数据 需要存储、管理海量数据,需要使用大量服务器
4 用户分布广泛,网络情况复杂 许多大型互联网都是为全球用户提供服务,用户分布广泛,各地网络千差万别
5 安全环境恶劣 黑客的攻击
6 需求快速变更,发布频繁 快速适应市场,满足用户需求,需要频繁发布新版本
7 渐进式发展 不断发展壮大

1.2 大型网站的演化发展历程

大型网站的技术挑战主要来自庞大的用户,高并发的访问和海量的数据。而大型网站架构主要就是处理数以P计的数据和面对数以亿计的用户


1.2.1 初始阶段网站架构

大型网站都是从小型网站发展而 来,而网站架构,也是从小型架构逐步演化而来

  • 特点:应用程序、数据库、文件等所有资源都在一台服务器上。
  • 架构图如下
    《大型网站技术架构》读书笔记一:大型网站架构演化

1.2.2应用和数据服务分离

随着网站业务发展,一台服务器逐渐不能满足需求。越来越多用户访问导致性能越来越差,越来越多的数据导致存储空间不足。这时将应用和数据分离

  • 特点: 将应用和数据分离后成三台服务器:应用服务器、文件服务器与数据库服务器

    • 应用服务器需要更快更强大的CPU。用于处理大量业务逻辑
    • 数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存。
    • 文件服务器需要存储大量用户上传的文件,需要更大的硬盘。
  • 架构图
    《大型网站技术架构》读书笔记一:大型网站架构演化
    不同服务器承担不同的服务角色,网站并发处理能力和数据存储空间得到很大改善,但随着用户逐渐增多,网站又一次面临挑战:数据库压力太大导致访问延迟,进而影响整个网站的性能。这时需要对网站架构进一步优化


1.2.3 使用缓存改善网站性能

网站访问特点:80%的业务访问集中在20%的数据上。大部分业务访问集中在一小部分数据上,那么如果把这一小部分数据缓存在内存中,就可以减少数据库的访问压力,提高整个网站的数据访问速度,改善数据库的性能。

  • 特点:缓存

    • 本地缓存:存在于应用服务器上的本地内存,访问速度更快,缓存数据量有限,受应用服务器内存限制。而且会出现和应用程序争用内存情况。
    • 分布式缓存服务器上的远程缓存:可以使用集群方式、理论上可以做到不受容量限制
  • 架构图:
    《大型网站技术架构》读书笔记一:大型网站架构演化使用缓存后,数据访问压力得到有效缓解,但是单一应用服务器能够处理的请求连接有限,在网站访问高峰期,应用服务器成为整个网站的瓶颈。


1.2.4 使用应用服务器集群改善网站的并发处理能力

使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时,不要企图去更换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。

  • 特点: 通过负载均衡调度服务器。将来自用户访问请求分发到应用服务器集群中任何一台服务器上。
  • 架构图
    《大型网站技术架构》读书笔记一:大型网站架构演化如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈。从而实现系统的可伸缩性。应用服务器实现集群是网站可伸缩集群架构设计中较为简单成熟的一种。

1.2.5 数据库读写分离

网站使用缓存后,使绝大部分数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中、缓存过期)和全部写操作需要访问数据库,在网站用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈

  • 特点:读写分离。当用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。而目前主流的数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库的数据更新同步到另一台服务器上。网站利用数据库这一功能实现数据库读写分离,从而改善数据库负载压力
  • 架构图:
    《大型网站技术架构》读书笔记一:大型网站架构演化
    写数据时,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库。

1.2.6 使用反向代理和CDN加上网站响应

由于复制的网络环境,不同地区的用户访问网站时,速度差别也极大。为了更好的用户体验,网站需要加速网站访问速度,主要手段使用CDN和反向代理

  • 特点: CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,而反向代理是部署在网站的中心机房,当用户请求到达中心机房后,首先访问的反向代理,如果反向代理缓存着用户请求的资源,则直接返回给用户

  • 架构图:
    《大型网站技术架构》读书笔记一:大型网站架构演化
    使用CDN和方向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方方面也减轻后端服务器的负载压力。


1.2.7 使用分布式文件系统和分布式数据库系统

任何强大的单一服务器都满足不了大型网站持续增长的业务需求,随着网站业务的发展,这时需要使用分布式数据库。文件系统也一样,需要使用分布式文件系统。

  • 特点分布式数据库时网站数据库拆分的最后手段,只用在单表数据规模非常大的时候才使用。不到不得已时,网站更常用的数据库拆分手段是业务拆分,将不同业务的数据部署在不同的物理服务器上。

  • 架构图
    《大型网站技术架构》读书笔记一:大型网站架构演化


1.2.8 使用NoSQL和搜索引擎

网站业务越来越复杂,对搜索和存储的需求也越来越复杂。此时引入NoSQL和非数据库查询技术,如搜索引擎
《大型网站技术架构》读书笔记一:大型网站架构演化NoSQL和搜索引擎都是源自互联网技术手段,对可伸缩的分布式特性具有更好的支持。


1.2.9 业务拆分

业务场景复杂度与日俱增,此时开始采取分而治之的手段把网站业务拆分成不同的产品线。技术上网站被拆分成多个独立维护的应用,每个应用独立部署。应用之间通过超链接关系,可以通过消息队列进行数据分发,当然最多还是通过访问同一个数据存储系统来构建一个关联的完整系统
《大型网站技术架构》读书笔记一:大型网站架构演化


1.2.10 分布式服务

随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂程度急剧上升,部署和维护越来越困难。此时采取分布式服务架构,把公共的可复用业务提取出来独立部署。而应用系统只需要管理用户界面,通过分布式服务器调用公用业务服务完成具体业务操作。
《大型网站技术架构》读书笔记一:大型网站架构演化


大型网站的架构演化到这里,基本上大多数的技术问题都可以解决。驱动大型网站技术发展的主要力量是网站的业务发展


1.3 大型网站架构演化的价值观

大型网站不是从无到有一步就搭建好一个大型网站,而是能够伴随小型网站业务的渐进发展,慢慢地演化成一个大型网站。网站的价值在于它能为用户提供什么价值,在于网站能什么,而不在于它是怎么做的。小型网站最需要做的就是为用户提供好的服务来创造价值,得到用户的认可,活下去,野蛮生长。

1.3.2 大型网站架构技术的核心价值是随网站所需灵活应对

大型网站架构技术的核心价值不是从无到有搭建一个大型网站,而是能够伴随小型网站业务的逐步发展,慢慢演化成一个大型网站。

1.3.2 驱动大型网站技术发展的主要力量是网站的业务发展

业务成就技术,是事业成就了人,而不是相反。


1.4 大型网站架构设计的误区

  • 一味追随大公司的解决方案
  • 为了技术而技术。网站技术是为业务而存在,除此毫无意义。
  • 企图用技术解决所有问题:技术是用来解决业务问题的,而业务的问题,也可以通过业务的手段去解决;

参考

  • 本文是《大型网站技术架构 核心原理与案例分析》的笔记。

相关文章: