主要内容:
- 特点
- 演化历程
近期正在阅读《大型网站技术架构:核心原理与案例分析》,读一本书不关要阅读它还要进行总结归纳,因此记录一些笔记来加深自己对于大型网站架构的理解和印象。
本文主要介绍大型网站架构的特点、演化,首先先来说下什么是大型网站软件系统呢,它有什么特点呢?
特点
- 高并发、大流量:即高并发用户、大量PV。
- PV(page view):页面访问量,其实就是用户在一天内点击了网站的几个页面,指页面刷新的次数;
- UV(unique visitor):独立访客数,即访问某站点或某网页不同ip地址的个数;
- PR(pagerank):网页级别,表示网页的重要性,等级越高的网站说明越受欢迎。
- 高可用:系统能不间断7X24小时提供服务。
- 海量数据:要能存储并管理大量数据,海量没有明确的规定,一般达到xxPB级别。
- 用户分布广泛:大型网站许多为全球用户提供服务,分布范围广;运营商网络差异。
- 安全问题:由于互联网的开放性,网站容易遭到攻击。
- 需求迭代,版本发布频繁:快速适应市场变更,满足用户需求,经常迭代需求从而需要频繁发布产品版本。
- 渐进式发展:大型互联网产品是由小网站慢慢运营渐渐发展起来的。
不难发现上述介绍的不仅仅是特点,也是大型网站面临的技术挑战,一直要解决的问题。
大型网站架构演化历程
接下来介绍下大型网站架构的演化历程,更能加深我们对于架构的理解,以及从什么方面来考虑设计架构。
初始阶段
大型网站是由小型网站渐进式发展生成的,小型网站因为访问量较小,因此只需要一台服务器,而应用系统、文件、数据库所有资源都在一台服务器上,如图所示。优点很明显,开发部署简单。
应用服务和数据服务分离
单台服务器不能满足逐渐发展的业务,大量用户访问导致性能变差、大量数据导致存储空间不足。这时候就需要将应用和数据分离,由原来的单台服务器演化成三台服务器。三台服务器负责不同的服务,应用服务器处理大量业务逻辑,需要更快更强的cpu;数据库服务器负责数据存储和快速磁盘检索,需要更快的硬盘和更大的内存;文件服务器需要存储用户上传的文件,需要更大的硬盘空间,如图所示。
缓存热点数据
但随着用户量的增多,使得数据库压力过大,这导致了网站访问延迟,进而影响整个网站性能。
先来介绍下二八定律。
二八定律:网站访问特点也遵循二八定律,即80%的业务访问集中在20%的数据上。
大部分业务访问都集中在部分热点数据上,因此可以进一步对网站架构优化,将热点数据缓存在内存中,减少对数据库的访问压力。
主要由在应用服务器的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存两种方式进行热点数据的缓存,如图所示。显而易见,本地缓存速度更快,但由于它部署在应用服务器上,会收到应用服务器内存限制;而远程缓存采取集群方式,有专门的缓存服务器,基本可以不受内存容量限制。
应用服务器集群
上一步采用缓存,缓解了数据库访问压力,然而随着网站访问量增加,单一应用服务器处理的请求有限,成为网站瓶颈。
而集群是网站解决高并发、海量数据的常见手段。通过负载均衡将来自用户浏览器的访问请求分发到应用服务器的任何一台服务器上。
数据库读写分离
使用缓存后,大部分数据都可以使用缓存读取,不需要通过数据库操作。但也有缓存读取未命中和缓存过期的读操作,和全部的写操作需要操作数据库,当用户访问达到一定量后,数据库因为负载压力过高而成为瓶颈。
因此进一步优化架构,数据库提供主从热备,配置两台数据库的主从关系,实现数据库读写分离。应用服务器写数据时,访问主数据库,主数据库通过主从复制将数据更新同步到从数据库;读数据时通过从数据库获取数据。一般应用服务器专门设有数据访问模块。
反向代理和CDN
随着用户规模的不断增大,全球范围内用户访问网站时,各区域访问速度差异大,因此需要提高用户体验度,加速网站响应速度。
主要优化手段有反向代理和CDN,两者的基本原理都是缓存,目的都是为了加快访问速度以及减轻服务器的负载压力。
- CDN主要部署在网络提供商的机房,用户请求服务时可以从最近的网络提供商获取数据;
- 反向代理部署在网络的中心服务器,当用户请求到达内部网络中心服务器,先访问反向代理服务器,如果反向代理服务器缓存了用户请求的资源,将其直接返回给用户。
反向代理:由代理服务器接受用户请求,将请求转发给内部服务器,并将处理后的结果返回给在网络上发起请求的客户端。后续会写一篇正向代理和反向代理的区别。
分布式文件系统和数据库系统
单一服务器不难满足增长的业务需求。因此使用分布式数据库和分布式文件系统。
常见的数据库分布式手段有:业务分库,按业务拆分,将不同业务的数据库部署在不同的物理服务器上;分表分库。
NoSQL和搜索引擎
随着业务越来越复杂,对数据库海量存储和检索的需求越来越复杂。技术方面采取NoSQL数据库进行海量数据存储,和搜索引擎进行数据的快速检索,利用它们可伸缩的分布式特性。
业务拆分
应对复杂的业务场景,将业务分成不同的产品线,具体到技术上,将大型网站进行业务拆分分成不同的应用,各个应用独立部署维护。应用之间可以通过消息队列进行数据分发;也可以通过超链接方式进行关联;当然最简单的是访问同一数据存储系统来构成一个关联的完整系统。
分布式服务
不难发现许多应用系统都会执行相同的业务服务,例如用户管理,为了进一步优化网络架构,可以提取公用业务服务独立部署,复用这些公共服务,应用系统只需要管理用户界面,通过分布式服务调用公用业务服务,来完成具体的业务操作。例如分布式服务框架dubbo。
思维导图
参考文章
《大型网站技术架构:核心原理与案例分析》