大型网站的演化

发布时间 2023-08-09 17:21:13作者: 优前程

初始阶段

应用程序、数据库、文件等所有资源在一台服务器上。 典型架构Linux+Apache+Mysql+PHP,简称LAMP。

 

应用服务和数据服务分离

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

 

使用缓存改善网站性能

网站访问特点和现实世界的财富分配一样遵循二八定律:80%的业务访问集中在20%的数据上。例如淘宝买家浏览的商品集中在少部分成交数多、评价良好的商品上;百度搜索关键词集中在少部分热门词汇上。
网站使用的缓存分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器的远程缓存。本地缓存的速度更快一些,但是受应用服务器内存限制,其缓存数量有限,而且会出现与应用程序争用内存的情况。远程分布式缓存可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容器限制的缓存服务。

 

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

当一台服务器的处理能力、存储空间不足时,不要企图去更换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求,这种情况下,跟恰当的做法是增加一台服务器分担缘由服务器的访问及存储压力。

 

数据库读写分离

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

 

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

使用网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大。
使用CDN和反向代理的目的都是早返回数据给用户。一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。

 

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

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

 

业务拆分

大型网站为了应付日益复杂的业务场景,通过使用分而治之的手段将整个网站业务分为不同的产品线,如大型电商网站会将首页、商铺、订单、买家、卖家等拆分成不同的产品线,分归不同的业务团队负责。

 

使用NoSQL和搜索引擎

使用NoSQL和搜索引擎:随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用一些非数据库技术如NoSQL和非数据库查询技术如搜索引擎。

 

分布式服务

分布式服务:随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越难。由于所有应用要和所有数据库系统连接,在数万台服务器规模的网站中,这些连接的数目是服务器规模的平方,导致数据库连接资源不足,拒绝服务。

 

延伸,下面一篇文章也是类似的思路:

千万级用户直播APP——服务端结构设计和思考