大型网站架构概述

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

大型网站不但要在技术上实现具有更强健壮性的解决业务需求的能力,更要在面对突发问题上有灵活快速的解决办法,对于网站的扩展性,模块型等有着高效的设计模式,简而言之,就是“打造一个高可用、高性能、易扩展、可伸缩且安全的网站”。以下为具体的特点。

1)高并发,大流量
大型互联网应用系统具有大量高并发实时用户和大流量访问的特点。在一些特殊时期,B2C网站(Business-to-Customer,电子商务中直接面向消费者销售产品和服务商业零售的模式)比如淘宝2017年的“双十一”活动,活动交易峰值达到每秒32.5万笔,支付峰值达到每秒25.6万笔,第7分23秒支付数突破1亿元。

2)高可用
系统需要在7x24小时不间断服务。若遇到宕机事件,必然会对用户流量与网站信誉产生影响。

3)海量数据
针对数量庞大的用户,自然需要存储于管理广大的用户数据,也对服务器有了更为苛刻的要求。

4)用户分布广泛,网络情况复杂
在针对于全球用户的大型网站中,不但要解决网络情况差异的问题,还要保证不同运营商网络之间的互通。

5)安全环境恶劣
由于互联网的开放性,保护用户数据安全也是一大重要的因素。

6)需求快速变更,发布频繁
针对具体的市场发展和用户需求,互联网产品需要具备更高的时效性,自然版本也需要更快的更新。

7)渐进式发展
所有的大型互联网企业都不是一蹴而就的,也都是一点点发展起来的,这也符合网站架构演化类型的发展。

二.大型网站架构演化发展史

如上述最后一点所说,在大型网站系统的发展过程中,与网站架构相一致的是渐进式的发展类型,最直白的特点就是用户量,访问量和数据处理都有了大量的增加,针对这些问题,大型网站在架构上,在不断解决这些问题。

初始阶段的网站架构
因为初始阶段没有大量的用户数据与访问需求,大型网站在初期一般都是一台服务器就足够解决问题,通常使用的开发技术也是LAMP技术(Linux + Apache + MYSQL + PHP)此时的应用程序,数据库与文件等都在一台服务器上,这样的开源的软件加上一台比较便宜的服务器就足够初期的开发了。

1.初始阶段的网站架构
因为初始阶段没有大量的用户数据与访问需求,大型网站在初期一般都是一台服务器就足够解决问题,通常使用的开发技术也是LAMP技术(Linux + Apache + MYSQL + PHP)此时的应用程序,数据库与文件等都在一台服务器上,这样的开源的软件加上一台比较便宜的服务器就足够初期的开发了。

初始阶段的网站架构
在这里插入图片描述
2. 应用服务和数据服务分离
随着用户访问和业务处理需求的增加,导致存储空间的不足,从而需要将应用和数据分离。此时,整个网站包括三台服务器:应用服务器,文件服务器和数据库服务器。其中应用服务器需要处理大量的业务,需要更快的CPU;文件服务器用来存储用户数据,需要更大的硬盘和更高的安全性;数据库服务器需要快速的磁盘检索和数据缓存,需要更快更大的内存和硬盘。

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

在这里插入图片描述
3.使用缓存改善网站性能
随着用户增多,数据库面临的压力也越来越大,导致数据访问延迟增加,从而影响网站性能和用户的体验。
因此,根据二八定律,80%的业务访问集中在20%的数据上,我们将这些数据缓存在内存上,就可以减少数据库的IO,提高网站的访问速度。
此处的缓存主要包括两种:1.缓存在应用服务器的本地缓存。2.缓存在专门的分布式缓存服务器上的远程缓存。其中本地缓存的访问速度更快,但是受到缓存大小的约束;远端的分布式缓存可以使用集群的方式,使用大内存的服务器作为缓存服务器,从而不受内存大小的限制。当需要访问的数据不再缓存上时,我们才会访问数据库,但是访问流量明显会远远减少。

使用缓存改善网站性能
在这里插入图片描述
4. 使用应用服务器集群改善网站的并发处理能力
再解决数据库IO的问题以后,当用户流量更多时,单一的应用服务器就成为了限制网站访问速度的主要因素。
因此,对应用服务器使用集群设计,可以在面对更大的用户需求时系统可以具有可伸缩性,因此可以有效地改善负载压力。
其次,通过负载均衡调度服务器,可以使得来自用户的访问请求均衡的分布在集群中,从而保证网站的响应速度。

使用应用服务器集群改善网站的并发处理能力
在这里插入图片描述
5.数据库读写分离
当用户访问量进一步增加时,对于缓存中的数据已不足以支持用户的需求,部分的读操作和全部的写操作都需要访问数据库,从而数据库因为负载压力过大成为网站的瓶颈。
所以我们采用数据库的主从分离作为解决方法。即配置两台数据库作为主从关系,从数据库可以实时更新同步主数据库的内容。当写数据时,直接写到主数据库中,然后实时更新到从数据库,读数据时,直接在从数据库中访问数据。除此之外,为了便于应用程序访问读写分离的数据库,在应用服务器端口加上了数据访问模块,使读写分离对应用透明。

数据库读写分离
在这里插入图片描述
6.使用反向代理和CDN加速网站响应
在复杂的网络环境中,用户访问网站的速度也差别很大。研究表明,网站的延迟与用户流失成正相关。因此为了加速网站的访问速度,我们主要采用CDN和反向代理。
CDN和反向代理都是使用缓存,但是CDN会部署在网络提供商的机房,使得用户在访问网站服务时,从最近的网络节点上获取数据;反向代理是部署在网站的中心机房,当用户请求到达中心机房时,会先访问中心机房中的缓存数据,如果匹配则直接返回给用户。个人认为CDN是反向代理的延伸,反向代理初期被用来解决服务器压力和响应速度的问题,大规模部署反向代理时,如果都部署在一起,那么带宽和距离仍然是瓶颈,而异地部署则要考虑负载均衡的问题,解决了这些问题也就基本部署成CDN了。

使用反向代理和CDN加速网站响应
在这里插入图片描述
7.使用分布式文件系统和分布式数据库系统
对于持续增长的业务需求,数据库读写分离后还不足以满足网站的业务需求,这时候就需要分布式文件系统和分布式数据库。目前常用的数据库拆分是业务拆分,将不同的业务的数据部署在不同的服务器上。注意,此处应用程序的对于文件服务器和数据库服务器的接口合并,统称为统一数据访问模块。

使用分布式文件系统和分布式数据库系统
在这里插入图片描述
8.使用NoSQL和搜索引擎
因为对于网站业务的需求越来越复杂,数据存储和检索的需求也越来越复杂,因此采用非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎等。此处应用服务器可以通过一个统一的数据访问模块访问各种数据。
以下为个人认为比较好的NoSQL的说明。
NoSQL说明

使用NoSQL和搜索引擎
在这里插入图片描述
9.业务拆分
随着大型网站业务场景的复杂,我们一般通过分而治之的手段将整个网站分为不同的产品线,再针对不同的产品线拆分为不同的应用,每个应用都用独立部署维护。应用之间可以通过消息队列进行数据并发,或者超链接建立联系。不过最多的还是通过访问同一数据存储系统来形成完整的系统。

业务拆分
在这里插入图片描述
10.分布式服务
随着应用系统的整体复杂程度的增加,部署维护起来就更加的困难,同时因为所有的数据库要和应用进行连接,在数万台服务器的网站规模下,需要连接的数据是数据库的平方,这样会导致数据库连接资源不足。
针对不同的应用系统都有相同的功能,我们将这些可复用的业务连接数据库,用分布式服务调用共用业务完成具体操作。

分布式服务
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值