大型网站技术架构(1)
网站都是从小网站一步一步发展为大型网站的,而这之中的挑战主要来自于庞大的用户、安全环境恶劣、高并发的访问和海量的数据,任何简单的业务处理,一旦需要处理数以 P 计的数据和面对数以亿计的用户时,问题就会变的很棘手
下面我们就来说说这个演变过程:
初始阶段
大型网站都是由小型网站演变而来的,网站架构也一样
小型网站最开始没有太多人访问,只需要一台服务器就绰绰有余,就像这样:
应用程序、数据库、文件等所有资源都在一台服务器上,通常使用 Linux PHP MySQL Apache 就可以完成整个项目部署,然后再买个域名,租一个廉价的服务器就可以开始我们的网站之旅了
应用服务与数据服务分离
随着业务的发展,逐渐的一台服务器已经不能满足需求,这时我们可以将 应用与数据分离
分离之后我们使用到三台服务器:应用服务器、文件服务器和数据库服务器,如下所示:
对于这三台服务器要求各不相同:
- 应用服务器 要处理大量的业务逻辑,所以需要更好更快更强大的 CPU
- 数据库服务器 需要快速的进行磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存
- 文件服务器 需要存储用户上传的文件资源,因此需要更大的硬盘存储空间
应用与数据分离后,各个的职责变得更加专一,网站的性能得到进一步的提升,但随着用户的继续增加,我们需要对网站架构进一步优化
使用缓存改善性能
网站的访问一样遵循二八定律:80% 的业务访问集中在 20% 的数据上面
因此我们要对这一小部分的数据进行缓存来减轻数据库的访问压力,以提高整个网站的数据访问速度,改善数据库的读写性能
网站的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存
- 本地缓存 的访问速度会快一些,但是受应用服务器内存限制,缓存数据量很有限,而且会出现内存争用的情况
- 远程分布式缓存 可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务
如下所示:
使用缓存后,数据访问压力得到了有效的缓解,但单一的应用服务器能够处理的请求连接数有限,在访问的高峰期,应用服务器又会成为网站性能的瓶颈
使用应用服务器集群改善网站并发处理能力
使用集群是网站解决高并发,海量数据问题的常用手段,当你纵向提升到一定程度后,那就该开始横向提升了
当一台服务器的处理能力不足时,与其换一台更强大的服务器,不如增加一台服务器去分担原有的服务器压力。对于大型网站而言,无论多么强大的服务器,都满足不了持续增长的业务需求,更高效的方式就是增加服务器来分担压力
对于网站架构而言,如果增添一台新的服务器可以改善负载压力,那么就可以使用同样的方式来应对源源不断的业务需求,从而实现系统的可伸缩性
通过负载均衡调度服务器,可以将用户请求分发到应用服务器集群里的任何一台服务器上,如果有更多的用户,可以增加更多的应用服务器,使应用服务器的负载压力不再成为网站的性能问题
数据库读写分离
在使用了缓存后,大多数的操作不经过数据库访问就能完成,但仍有一部分读操作(缓存访问未命中,缓存过期)和所有的写操作需要访问数据库,在网站的用户量达到一定时,数据库的负载问题就来了
目前大多数的数据库都支持主从热备份,通过配置两台服务器的主从关系,可以将一台数据库服务器的数据更新同步到另一台,网站利用这一功能,实现数据库读写分离,从而进一步改善数据库负载压力
应用服务器在写操作的时候,访问主数据库,主数据库通过主从复制机制把数据同步更新到从数据库,这样当应用服务器进行读操作的时候,就能访问从数据库获取数据
使用反向代理和 CDN 加速网站响应
- CDN 和 反向代理 的基本原理都是缓存
- CDN 部署在网络供应商的机房,用户在进行请求时,会从距离最近的网络供应商机房获取数据
反向代理 则部署在中心机房,当用户请求到达中心机房后,会首先访问反向代理服务器,如果反向代理服务器中缓存这用户请求的资源,就直接返回给用户
使用 CDN 和 反向代理 都是为了尽快返回给用户数据,一方面加快用户访问速度,另一方面也减轻了后端服务器的压力
使用分布式文件系统和分布式数据库系统
随着网站业务的继续发展,这时候就可以像分布式应用服务器一样,对数据库系统和文件系统进行分布式管理
分布式数据库 是网站数据库拆分的最后手段,一般我们可以采取业务分库,根据不同业务的数据库部署在不同的数据库服务器上
使用 NoSQL 和搜索引擎
这两个方式都是依赖于互联网的技术手段,应用服务器通过一个统一的数据访问模块来访问各种数据,从而减轻应用程序有多个数据源的麻烦
业务拆分
对于大型网站,我们可以分而治之,把整个网站的业务分为不同的模块,比如大型的交易购物完整可以分为首页、店铺、订单、买家等,分别交给不同的业务团队来负责
同时我们将一个网站根据模块划分拆分成多个应用,每个应用进行单独的部署和维护,应用之间通过超链接建立关系(指向不同的应用地址),最后通过相同的数据存储系统来构成一个互相关联的完整系统
分布式服务
随着业务拆分,整个系统越来越大,应用的整体复杂度呈指数级增加,部署维护越来越困难,并且所有的应用服务器都要与数据库服务连接, 在数万台服务器规模的情况下,这些连接的数目是服务器规模的平方,导致资源不足
这时候就要对相同的业务进行提取,独立部署,把这些可重用的业务和连接数据库等,提取出来作为公共业务服务,而应用系统只需要通过分布式服务访问公共业务服务完成业务操作
到这里,基本上大多数的技术问题都能得到解决,还有一些实时同步等具体业务问题也都可以通过现有的技术解决
作者:arno_好久不见
来源:51CTO

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
为什么电信运营商容易接受开放标准的NFV?
如今,电信运营商们正在努力让他们未来的虚拟网络尽可能的开源化,是什么吸引了他们? 在巴塞罗那隆重举行的年度移动大会上,关于网络功能虚拟化(NFV)可谓是一个热门干货话题。 随着移动互联网的发展,高速的4G网络和未来可能无处不在的5G网络,将成为电信运营商们的“重要战场”. NFV的运行是通过使用x86等通用性硬件以及虚拟化技术,以软件的方式来承载很多以往需要专有电信级硬件才能实现的网络功能功能,从而降低昂贵的设备成本。通过软硬件解耦及功能抽象,可以使网络设备功能不再依赖于专用硬件,充分灵活共享资源,实现新业务的快速开发和部署,并基于实际业务需求进行自动部署、弹性伸缩、故障隔离和自愈等。 最近,OpenStack基金会在一份报告中提到,NFV将改变移动运营商的运营模式。因为NFV可以帮助运营商快速的进行部署服务,同时减少对专有网络硬件的依赖,也释放了数据中心的容量。 OpenStack基金会CEO Jonathan Bryce表示:“NFV已经成为OpenStack增长最快的领域。”同时他表示,NFV在初期时不是这样的状况。 Bryce也表示:“事实证明,一些电信运营商来到我们的社区,他...
- 下一篇
推荐六个用于大数据分析的最好工具
在大数据和大数据分析,他们对企业的影响有一个兴趣高涨。大数据分析是研究大量的数据的过程中寻找模式,相关性和其他有用的信息,可以帮助企业更好地适应变化,并做出更明智的决策。 一、Hadoop Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。 Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点: ⒈高可靠性。 Hadoop按位存储和处理数据的能力值得人们信赖。 ⒉高扩展性。 Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。 ⒊高效性。 Hadoop能够在...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7设置SWAP分区,小内存服务器的救世主
- Linux系统CentOS6、CentOS7手动修改IP地址