Skip to the content.

架构的演变历程

单机服务器

背景: 用户量很少,基本上没有人访问,单机服务器显然够用。

目的: 就是让用户够用就行。

操作:搭建一台服务器,上面部署了应用程序,数据库,文件。

三台服务器

背景: 随着业务的发展,单机服务器扛不住了,性能越来越差,用户访问网页,半天还打不开,用户快气死了。单机服务器内存、磁盘、CPU都满满的,再不整治,就挂了。

目的: 就是让用户可用,能够满足用户的需求,起码能正常打开网页吧。

操作:搭建三台服务器,分别是应用服务器,数据库服务器,文件服务器。将这三块进行分离,架构清晰,也方面后面进行扩展。

引入缓存

背景: 网站访问的特点,大部分流量都会落到部分数据上,这些数据称为热点数据。用户访问量的增加,使得性能也越来越差,数据库扛不住了。

目的: 就是让用户可用,能够满足用户的需求。

操作:搭建缓存服务器,将热点数据放入缓存服务器中,从而降低数据库服务器的负载。 缓存服务器可以是分布式集群,这样就具有良好的伸缩性,不受容量控制。

应用服务器集群

背景: 应用服务器的处理能力不足,存储空间不足,无法支撑用户的访问。

目的: 就是让用户可用,能够满足用户的需求。

操作:搭建应用服务器集群,还有负载均衡服务器。凡是遇到集群的情况,为了确保每台服务器负载流量相差无几,都需要有个负载均衡服务器对集群服务器进行调节。

数据库读写分离

背景: 缓存虽然能够将大部分的请求抗住,但是还会有些请求会落到数据库,比如:缓存没有命中、缓存过期、写操作。随着这些流量的不断增加,数据库服务器性能开始下降。

目的: 降低数据库负载,提高数据库服务器的性能。对用户而言,依然是让用户可用,能够满足用户的需求。

操作:搭建主从数据库,主数据库主要用来写数据,从数据库主要用来读数据,主数据库(Master)将数据同步给从数据库(Slave)。

反向代理&CDN加速

背景: 不同地区网络环境不同,网站访问延迟较大,网络访问延迟必将导致用户留存率下降。我自己打开个网页,2s以内不出来,就马上给关了。

目的: 提高系统性能,留住用户。对用户而言,依然是让用户可用,能够满足用户的需求。

操作:使用反向代理和CDN加速(CDN主要存放的是一些前端资源 html+css+js+img)

分布式文件&分布式数据库

背景: 单点服务器总是会出现性能瓶颈的,无论单机服务器配置多好,总会有个上限的。

目的: 解除单点服务器性能瓶颈。对用户而言,依然是让用户可用,能够满足用户的需求。

操作:搭建分布式文件系统和分布式数据库系统,替换掉单点服务器。

NoSQL和搜索引擎

背景: 网站越来越复杂,对数据存储和检索的需求也越来越复杂,现有数据库无法满足这些需求。

目的: 满足数据存储和检索需求,降低检索对数据库的负载。对用户而言,依然是让用户可用,能够满足用户的需求。

操作:使用NoSQL集群和搜索引擎集群

应用服务器拆分

背景: 网站业务越来越复杂,业务越来越细化,很多业务在一个集群上,耦合性太高,牵一发而动全身。

目的: 降低业务耦合度,为了业务更加独立,协作发展。

操作:业务拆分,划分成不同的应用服务器集群。其中也会用到消息队列进行架构解耦。

分布式服务

背景: 随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难

目的: 降低系统复杂度,更容易维护系统。

操作:将这些共用的业务提取出来,独立部署