**一、大型互联网应用系统特点:
- 高并发,大流量
- 高可用
- 海量数据
- 用户发布广泛,网络情况复杂
- 安全环境恶劣
- 需求快速变更,发布频繁
- 渐进式发展
二、大型网站架构演化发展历程
1.初始阶段网站架构
例如,单台的lamp架构服务器。
2.应用服务和数据服务分离
随着业务发展,单台服务器不能满足需求,这时将应用和数据分离,整个网站使用三台服务器:应用服务器、文件服务器、数据库服务器。
三台服务器对硬件资源的要求各不同,应用服务器需要处理大量业务逻辑,因此需要更快更强大的CPU;数据库服务器需要快速检索和数据缓存,因此需要更快的硬盘和更大的内存;文件服务器需要存储大量文件,因此需要更大的硬盘。
随着用户逐渐增多,数据库压力太大导致访问延迟,进而影响整个网站的性能。这时,需要对网站架构进一步优化。
3.使用缓存改善网站性能
二八定律:80%的业务访问集中在20%的数据上。
因此,如果把这一小部分数据缓存在内存,是不是就可以减少数据库的访问压力,提供整个网站的数据访问速度,改善数据库写入性能?
网站使用的缓存分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。
本地缓存访问速度更快,但是受应用服务器内存限制,缓存数量有限。远程分布式缓存可以使用集群方式,部署大内存的服务器作为专门的缓存服务器,理论上可以做到不受内存容量限制。
使用缓存后,数据访问压力得到缓解,但单一应用服务器能够处理的连接请求有限,在访问高峰期,应用服务器成为整个网站瓶颈。
4.使用应用服务器集群改善网站的并发处理能力
使用集群是网站解决高并发、海量数据问题的常用手段。
对网站架构而言,只要能通过增加一台服务器的方式改善负载压力,就可以以同样方式持续增加服务器不断改善系统性能,从而实现系统可伸缩性。
通过负载均衡调度服务器,可将访问请求分发到应用服务器集群的任一服务器。这样使得应用服务器不再成为网站的瓶颈。
5.数据库读写分离
使用缓存后,绝大部分数据读操作可以不通过数据库完成,但有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库,当用户达到一定规模时,数据库因为压力过高而成为瓶颈。
目前大部分主流数据库都提供主从热备份功能,利用热备份功能将主数据库数据同步到从数据库实现数据库读写分离,从而改善数据库负载压力。
为了便于程序访问读写分离后的数据库,通常在应用服务器端使用专门数据访问模块,使数据库读写分离对应用透明。
6.使用反向代理和CDN加速网站响应
加速网站访问速度,主要手段有:使用CDN和反向代理。
使用CDN和反向代理目的是今早返回数据给用户,一方面加速用户访问速度,另一方面减轻后端服务器负载压力。
7.使用分布式文件系统和分布式数据库系统
随着业务发展,数据库读写分离后仍然不能满足需求。这时需要使用分布式数据库。文件系统也是一样。
分布式数据库是网站数据库拆分最后手段,只有在单表数据规模非常庞大时才使用。更常用的数据库拆分手段是业务分库,将不同业务数据部署到不同服务器上。
8.使用NoSQL和搜索引擎
随着业务越来越复杂,对数据存储和检索需求也越来越复杂,需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。
9.业务拆分
大型网站为了应对复杂的业务场景,将整个网站业务分为不同产品线,分归不同团队负责。
具体到技术上,根据产品线划分,将一个网站拆分为多个不同应用,每个独立部署维护。应用间通过超链接建立关系,也可以通过消息队列进行数据分发,最多的是通过分为同一数据存储系统来构成一个关联的完整系统。
10.分布式服务
随着业务拆分越来越小,存储系统越来越大,系统整体复杂度指数增加,部署维护越来越困难。
由于所有应用要和所有数据库系统连接,在数万台服务器规模中,连接的数目是服务器规模的平方,导致存数据库资源不足,拒绝服务。
既然每个应用系统都需要执行许多相同业务操作,如用户管理、商品管理等,那么可以将这些公共的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供共用服务,而应用系统只需要管理用户界面,通过分布式服务调用共用服务完成具体操作。
发展到这一阶段,多数技术问题都得到解决。所以,开始建设云计算平台,将计算作为基础资源出售。
三、大型网站架构演化价值观
网站的价值在于能为用户提供什么价值,在于能做什么,而不在于它是怎么做的,所以在网站还很小时去追求架构是舍本逐末。
1.大型网站架构技术的核心价值是随网站所需灵活应对
2.驱动大型网站技术发展的主要力量是网站的业务发展
四、网站架构设计误区
1.一味追随大公司解决方案
2.为了技术而技术
3.企图用技术解决所有问题
技术是用来解决业务问题,而业务问题,也可以提供业务的手段解决。