一、大型网站的软件系统的特点


高并发,大流量

高可用

海量数据

用户分布广泛,网络情况复杂

安全环境恶劣

需求快速变更,发布频繁

渐进式发展

二、大型网站的架构演化发展历程


1、初始阶段的网站架构


最开始网站的应用程序、数据库、文件等所有的资源都在一台服务器上。最典型的就是LAMP技术了:服务器操作系统使用Linux,应用程序使用PHP开发,数据库使用MySQL,然后部署在Apache上。


大型网站技术架构读书笔记 大型网站系统架构_大型网站技术架构读书笔记

 


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


随着网站业务的发展,一台服务器的性能和存储空间逐渐不能满足需求,这时就将应用和数据分离,整个网站使用三台服务器:应用服务器、文件服务器和数据库服务器。三台服务器对硬件资源的要求也各不相同:应用服务器需要更快更强大的CPU,数据库服务器需要更快的硬盘的更大的内存,文件服务器需要更大的硬盘。


大型网站技术架构读书笔记 大型网站系统架构_数据库_02

 


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


网站访问特点和现实世界的财富分配一样遵循二八定律:80%的业务访问集中在20%的数据上。把大部分业务访问的小部分数据缓存在内存中,可以减少数据库的访问压力,提高整个网站的数据访问速度。


缓存可以分为两种:应用服务器上的本地缓存和分布式缓存服务器上的远程缓存。本地缓存访问速度更快,但缓存数据有限,而且会出现和应用程序争用内存的情况。远程缓存可以使用集群的方式,理论上可以做到不受内存容量的限制。


大型网站技术架构读书笔记 大型网站系统架构_大型网站技术架构读书笔记_03

 


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


一台应用服务器所能处理的请求有限(一台Tomcat大概六七百),企图去换更强大的服务器也终究会满足不了持续增长的业务需求,而且网站有访问高峰期和低谷期,扩展性也不好。使用集群是网站解决高并发、海量数据问题的常用手段。通过负载均衡调度服务器,可将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上。


大型网站技术架构读书笔记 大型网站系统架构_数据库_04

 


5、数据库读写分离


使用缓存后,仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库。数据库服务器也终究会因为负载压力过高而成为网站的瓶颈。


目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台数据库服务器。


应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据。


大型网站技术架构读书笔记 大型网站系统架构_缓存_05

 


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


CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。


大型网站技术架构读书笔记 大型网站系统架构_数据库_06

 


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


只有在单表数据规模非常庞大的时候才使用分布式数据库。网站更常用的数据库拆分手段是业务分库。


大型网站技术架构读书笔记 大型网站系统架构_数据库_07

 


8、使用NoSQL和搜索引擎


随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,关系型数据库逐渐不能满足需求。网站需要采用一些非关系型数据库技术如NoSQL和非数据库查询技术如搜索引擎。


大型网站技术架构读书笔记 大型网站系统架构_缓存_08

 


9、业务拆分


大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将整个网站按业务拆分,如购物系统将首页、商铺、订单、购物车、支付等分成不同模块,分归不同的团队负责,作为不同的应用独立开发和独立部署。用得最多的是各应用通过访问同一个数据存储系统来构成一个关联的完整系统。


大型网站技术架构读书笔记 大型网站系统架构_大型网站技术架构读书笔记_09

 


10、分布式服务


既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些公用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供公用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作。


大型网站技术架构读书笔记 大型网站系统架构_数据库_10

三、大型网站的架构模式

1、分层

对网站软件系统在横向方面进行切分,分为应用层、服务层、数据层。

应用层:负责具体业务和视图展示,如网站首页及搜索输入和结果展示。
服务层:为应用层提供服务支持,如用户管理服务、购物车服务等。
数据层:提供数据存储访问服务,如数据库、缓存、文件、搜索引擎等。
2、分割

在纵向方向对软件进行切分,将网站按不同的功能和服务分割,包装成高内聚低耦合的模块单元。一方面有助于软件的开发和维护,另一方面便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。比如将软件系统的购物、论坛、搜索、广告分割成不同的应用。

3、分布式

在网站应用中,常用的分布式方案有以下几种。

分布式应用和服务:将分层和分割后的应用和服务模块分布式部署。
分布式静态资源:网站的静态资源如JS、CSS、Logo图片等资源独立分布式部署。
分布式数据和存储:为网站应用而生的各种NoSQL产品几乎都是分布式的。
分布式计算:Hadoop及其MapReduce分布式计算框架,移动计算而不是移动数据。
分布式配置:支持网站线上服务器配置实时更新。
分布式锁:分布式环境下实现并发和协同。
分布式文件系统:FastDFS、HDFS。
4、集群

提高网站高并发和高可用的能力。

5、缓存

提高数据访问速度。

CDN
反向代理
本地缓存
分布式缓存
6、异步

降低软件耦合性。
提高系统可用性。
加快网站相应速度。
消除并发访问高峰。
7、冗余

服务器故障时保证数据不丢失。

8、自动化

发布过程自动化
自动化代码管理
自动化测试
自动化安全检测
自动化部署
自动化监控
自动化报警
自动化失效转移
自动化失效恢复
自动化降级
自动化分配资源
9、安全

通过密码和手机验证码进行身份认证。
对网络传输数据进行加密。
使用验证码识别机器人程序滥用网络资源攻击网站。
攻击网站的XSS攻击、SQL注入进行编码转换。
垃圾信息、敏感信息的过滤。
交易转账等重要操作的风险控制。
四、大型网站的架构技术一览

1、前端架构

浏览器优化技术
CDN
动静分离,静态资源独立部署
图片服务
反向代理
DNS
2、应用层架构

开发框架
页面渲染
负载均衡
Session管理
动态页面静态化
业务拆分
虚拟化服务器
3、服务层架构

分布式消息
分布式服务
分布式缓存
分布式配置
4、存储层架构

分布式文件
关系数据库
NoSQL数据库
数据同步
5、后台架构

搜索引擎
数据仓库
推荐系统
6、数据采集与监控

浏览器数据采集
服务器业务数据采集
服务器性能数据采集
系统监控
系统报警
7、安全架构

Web攻击
数据保护
8、数据中心机房架构

机房架构
机柜架构
服务器架构