大型网站技术架构详解 之一 大型网站架构演化

1. 大型网站架构演化

如果把20世纪90年代初CERN(欧洲核子研究组织)正式发布Web标准和第一个Web服务的出现当作互联网站的开始,那么只经历了20多年的时间,但是时至今日,互联网对人们的生活产生了巨大的改变。同时也看到,在互联网跨越式发展的过程中,在电子上午背后却是不堪重负的网站架构,某些B2C网站逢促销比宕机成为一种规律,铁道部电子客票官方网站的频繁故障和操作延迟更是将这一想象发挥的淋漓尽致。

1.1 大型网站软件系统的特点

**特点如下

  • 高并发,大流量--需要面对高并发用户,大流量访问
  • 高可用--系统7*24小时不间断服务
  • 海量数据--需要存储、管理海量数据,需要使用大量服务器
  • 用户分布广泛,网络情况复杂--许多大型互联网都是伪全球用户提供服务,各地网络情况千差万别。在国内,还存在各个运营商网络通信难的问题
  • 安全环境恶劣--由于互联网的开放性,使得互联网容易受到攻击,大型网站几乎每天都会被黑客攻击
  • 需求快速变更,发布频繁--大型网站基本每周都有新版本发布上线,中小型企业发布更为频繁
  • 渐进式发展--与传统企业不同,几乎所有的大型互联网站都是从一个小型网站开始,主键发展起来的。Facebook是扎克伯格在哈佛大学宿舍里开发的;Google第一台服务器部署在斯坦福大学实验室里;阿里巴巴则是在马云的客厅里诞生的。。。

**

1.2 大型网站架构演化发展过程

大型网站的技术挑战主要来源于庞大的用户,高并发的访问和海量的数据;任何简单的业务一旦需要处理以P计的数据和面对数以亿计的用户,问题就会变得很棘手,大型网站架构主要处理这类问题。

1.2.1 初始阶段的网站架构

应用程序、数据库、文件等所有的资源在一台 服务器上。通常操作系统使用Linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用MySQL。
初始阶段网站架构

1.2.2 应用服务和数据服务分离

随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足。这就需要将应用和数据分离。应用和数据分离后整个网站使用三台服务器:用用服务器、文件服务器和数据库服务器。应用服务器需要处理大量的业务逻辑,因此需要更快更强大的CPU;数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存;文件服务器需要存储大量用户上传的文件,因此需要更多的硬盘。
应用和数据分离后,不同特性的服务器担任不同的服务角色,网站的并发处理能力和数据存储空间得到了很大的改善,支持网站进一步发展。但随着用户逐渐增多,网站又面临挑战:数据库压力太大导致访问延迟,进而影响整个网站的性能。

应用服务和数据服务分离

1.2.3 使用缓存改善网站性能

网站访问特点和显示世界的财富分配一样遵守二八定律:80%的业务访问集中在20%的数据上。所以,把这一小部分数据缓存在内存中,就可以减少访问数据库的压力,提高整个网站的数据访问速度。
缓存分为两种:缓存在应用服务器上的本地缓存和换存在专门的分布式服务器上的远程缓存。本地缓存更快一些,但受应用服务器内存限制。远程分布式缓存可以使用集群的方式,理论上可以做到不受内存容量限制的缓存服务。
网站使用缓存
使用缓存后,数据访问压力得到有效改善,但是单一应用服务器能够处理的请求连接有限,在网站访问高峰期,应用服务器成为整个网站的瓶颈。

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

使用集群是网站解决高并发、含量数据的常用手段。增加服务器分担原有服务器的访问集缓存压力,从而实现系统的可伸缩性。
应用服务器集群部署
通过负载均衡调度服务器,可将来自用户浏览器的访问请求分发到应用服务器中任何一台服务器。

1.2.5 数据库读写分离

网站在使用缓存后,是绝大分数据都可以不通过数据库就能完成,但仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库。在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。
目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库的数据更新同步到另一台服务器。网站利用数据库这一功能,实现数据库读写分离,从而改善数据库负载压力。
数据库读写分离
应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据。

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

CDN和反向代理基本原理都是缓存,区别于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问到的是反向代理服务器,如果缓存着用户请求的资源,将其直接返回。
网站使用CDN和反向代理加速访问
使用CDN和反向代理的目的是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。

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

数据库经过读写分离后,从一台服务器拆分成两台,但是随着网站业务的发展依然不能满足需求,这时需要使用分布式数据库。
分布式数据库是数据库拆分的最后手段,只有在单表数据非常庞大的时候才使用。不到不得已,网站常用的数据库拆分手段是业务分库,将不同的数据库部署在不同的物理服务器上。
分布式文件和数据库系统

1.2.8 使用NoSQL和搜索引擎

随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。应用服务器可以通过统一数据访问模块访问各种数据。
使用NoSQL系统和搜索引擎

1.2.9 业务拆分

将一个网站拆分成不同的应用,每个应用独立部署维护,应用之间可以通过超链接建立关系,也可以通过消息队列进行数据分发。
应用拆分

1.2.10 分布式服务

随着业务拆分越来越小,存储系统越来越大;每一个应用系统执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。通过分布式服务调用共用业务服务以完成具体业务操作。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值