编程设计
大型网站架构的演化过程

重温《大型网站技术架构》一书,做一下读书笔记。

大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得很棘手。大型网站架构主要就是解决这类问题。

1.初始阶段的网站架构

大型网站,都是从小型网站发展,逐步演化而来的。

最开始访问量小,应用程序、数据库和文件等都在同一台服务器上。

2.应用服务和数据服务分离

随着越来越多用户的访问,单台服务器可能出现内存不足、磁盘空间不足、CPU使用率过高等问题。

因此,我们将应用和数据进行分离:

  • 应用服务器:使用更快更强大的CPU,处理大量的业务逻辑;
  • 数据库服务器:使用更快的硬盘加速磁盘检索,更大的内存进行数据缓存;
  • 文件服务器:使用更大的磁盘空间,以满足用户上传的大量文件。

3.使用缓存改善网站性能

随着用户的增多,数据库压力太大,导致访问延迟,影响网站整体体验。

由于大部分的业务访问集中在一小部分数据上,可以将这部分数据缓存起来。提升查询性能,降低数据库的访问压力。

4.应用服务器集群改善的并发处理能力

单一应用服务器的处理能力有限,通过增加服务器来分担访问压力,使用负载均衡进行请求分发。

5.数据库读写分离

在网站的用户数达到一定规模后,全部的写操作,和部分读操作(缓存不命中、过期),将会导致数据库负载过高。

通过数据库的主从热备,主从数据同步,实现对数据库访问的读写分离。为了使读写对应用透明,通常会使用专门的数据访问模块。

6.使用反向代理和CDN加速网站响应

由于中国复杂的网络环境,不同地区的用户访问网络时,速度差别极大。

有研究表明,网站访问延迟和用户流失率正相关。

  • 使用CDN缓存网站数据,让用户从距离自己最近的网络提供商机房获取数据;
  • 增加网站反向代理,当用户访问网站时,请求首先到达反向代理,如果缓存数据存在则直接返回。

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

任何强大的单一服务器都满足不了大型网站持续增长的业务需求。

当数据库和文件系统遇到了瓶颈,我们需要使用分布式数据库和分布式文件系统。

8.使用NoSQL和搜索引擎

随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂。

通过引入NoSQL和搜索引擎,可以更灵活高效的存取数据和对网站内容进行快速搜索。

9.业务拆分

为了应对日益复杂的业务场景,通常会将网站分成不同的产品线。

根据产品线将网站分成许多不同的应用,每个应用进行独立部署。

10.分布式服务

随着业务拆分得越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难。所有应用和所有数据库进行连接,导致数据库连接资源不足。

解决办法是,将共用的业务抽出来独立部署,提供共用的业务服务给上层应用系统调用。

例如将用户管理、商品管理等抽取出来,由这些服务来连接数据库,上层应用系统负责管理与用户界面相关的业务逻辑。

后记

如果能控制住并发访问的量,很多棘手的技术问题也就不是什么问题了。

技术是用来解决业务问题的,而业务的问题,也可以通过业务的手段去解决。

通过理解已成熟的网站架构技术方案的来龙去脉和历史渊源,在技术选型和架构决策时才能有的放矢,直击要害。