大型网站技术架构-发展过程

news/2024/5/20 23:01:35/文章来源:https://blog.csdn.net/weixin_33713503/article/details/92478548

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

网站都是从小网站一步一步发展为大型网站的,而这之中的挑战主要来自于庞大的用户、安全环境恶劣、高并发的访问和海量的数据,任何简单的业务处理,一旦需要处理数以 P 计的数据和面对数以亿计的用户时,问题就会变的很棘手

下面我们就来说说这个演变过程:

初始阶段

大型网站都是由小型网站演变而来的,网站架构也一样

小型网站最开始没有太多人访问,只需要一台服务器就绰绰有余,就像这样:

应用程序、数据库、文件等所有资源都在一台服务器上,通常使用 Linux PHP MySQL Apache 就可以完成整个项目部署,然后再买个域名,租一个廉价的服务器就可以开始我们的网站之旅了

应用服务与数据服务分离

随着业务的发展,逐渐的一台服务器已经不能满足需求,这时我们可以将 应用与数据分离

分离之后我们使用到三台服务器:应用服务器、文件服务器和数据库服务器,如下所示:

对于这三台服务器要求各不相同:

  • 应用服务器 要处理大量的业务逻辑,所以需要更好更快更强大的 CPU

  • 数据库服务器 需要快速的进行磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存

  • 文件服务器 需要存储用户上传的文件资源,因此需要更大的硬盘存储空间

应用与数据分离后,各个的职责变得更加专一,网站的性能得到进一步的提升,但随着用户的继续增加,我们需要对网站架构进一步优化

使用缓存改善性能

网站的访问一样遵循二八定律:80% 的业务访问集中在 20% 的数据上面

因此我们要对这一小部分的数据进行缓存来减轻数据库的访问压力,以提高整个网站的数据访问速度,改善数据库的读写性能

网站的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存

  • 本地缓存 的访问速度会快一些,但是受应用服务器内存限制,缓存数据量很有限,而且会出现内存争用的情况

  • 远程分布式缓存 可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务

如下所示:

使用缓存后,数据访问压力得到了有效的缓解,但单一的应用服务器能够处理的请求连接数有限,在访问的高峰期,应用服务器又会成为网站性能的瓶颈

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

使用集群是网站解决高并发,海量数据问题的常用手段,当你纵向提升到一定程度后,那就该开始横向提升了

当一台服务器的处理能力不足时,与其换一台更强大的服务器,不如增加一台服务器去分担原有的服务器压力。对于大型网站而言,无论多么强大的服务器,都满足不了持续增长的业务需求,更高效的方式就是增加服务器来分担压力

对于网站架构而言,如果增添一台新的服务器可以改善负载压力,那么就可以使用同样的方式来应对源源不断的业务需求,从而实现系统的可伸缩性

通过负载均衡调度服务器,可以将用户请求分发到应用服务器集群里的任何一台服务器上,如果有更多的用户,可以增加更多的应用服务器,使应用服务器的负载压力不再成为网站的性能问题

数据库读写分离

在使用了缓存后,大多数的操作不经过数据库访问就能完成,但仍有一部分读操作(缓存访问未命中,缓存过期)和所有的写操作需要访问数据库,在网站的用户量达到一定时,数据库的负载问题就来了

目前大多数的数据库都支持主从热备份,通过配置两台服务器的主从关系,可以将一台数据库服务器的数据更新同步到另一台,网站利用这一功能,实现数据库读写分离,从而进一步改善数据库负载压力

应用服务器在写操作的时候,访问主数据库,主数据库通过主从复制机制把数据同步更新到从数据库,这样当应用服务器进行读操作的时候,就能访问从数据库获取数据

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

CDN 和 反向代理 的基本原理都是缓存

  • CDN 部署在网络供应商的机房,用户在进行请求时,会从距离最近的网络供应商机房获取数据

  • 反向代理 则部署在中心机房,当用户请求到达中心机房后,会首先访问反向代理服务器,如果反向代理服务器中缓存这用户请求的资源,就直接返回给用户

使用 CDN 和 反向代理 都是为了尽快返回给用户数据,一方面加快用户访问速度,另一方面也减轻了后端服务器的压力

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

随着网站业务的继续发展,这时候就可以像分布式应用服务器一样,对数据库系统和文件系统进行分布式管理

分布式数据库 是网站数据库拆分的最后手段,一般我们可以采取业务分库,根据不同业务的数据库部署在不同的数据库服务器上

使用 NoSQL 和搜索引擎

这两个方式都是依赖于互联网的技术手段,应用服务器通过一个统一的数据访问模块来访问各种数据,从而减轻应用程序有多个数据源的麻烦

业务拆分

对于大型网站,我们可以分而治之,把整个网站的业务分为不同的模块,比如大型的交易购物完整可以分为首页、店铺、订单、买家等,分别交给不同的业务团队来负责

同时我们将一个网站根据模块划分拆分成多个应用,每个应用进行单独的部署和维护,应用之间通过超链接建立关系(指向不同的应用地址),最后通过相同的数据存储系统来构成一个互相关联的完整系统

分布式服务

随着业务拆分,整个系统越来越大,应用的整体复杂度呈指数级增加,部署维护越来越困难,并且所有的应用服务器都要与数据库服务连接, 在数万台服务器规模的情况下,这些连接的数目是服务器规模的平方,导致资源不足

这时候就要对相同的业务进行提取,独立部署,把这些可重用的业务和连接数据库等,提取出来作为公共业务服务,而应用系统只需要通过分布式服务访问公共业务服务完成业务操作

到这里,基本上大多数的技术问题都能得到解决,还有一些实时同步等具体业务问题也都可以通过现有的技术解决

转载于:https://my.oschina.net/liuyuantao/blog/784660

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_769532.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python一课一练(建立第一个个人网站)

2019独角兽企业重金招聘Python工程师标准>>> 使用Python来上手建站比较简单 安装lpthw.web框架,使用pip来安装,在powershell输入"pip install lpthw.web"还记得我们的工程结构吗?不过这次在"skeleton"目录下增…

云主机如何选带宽-- 1M带宽有多快--建站必考虑因素

对于很多新手来说,在选购服务器的时候可能会有些疑问,我应该买多大的带宽,或者是我买了1M的带宽怎么最快的传输速度只有120kB左右,有以上疑惑的朋友不着急,接下来我就带大家分析看看。 一、在分析之前我们要搞清楚几…

wordpress网站压测--Ubuntu下Apache2 的调优(待续)

最近我在对自己建的一个用wordpress搭建的网站使用进行压测。 设备 2核2G突发性实例(20%基准CPU计算性能 ) 带宽2M 工具 1、 压测工具 Jmeter 环境 1、Unbuntu16.04 2、Apache2.4.18 3、wordpress 5.3.2 4、php7.0 5、MySQL 5.6.29 压力测…

iis6服务器网站批量迁移,使用MS Web Deploy工具从IIS 6.0迁移大量应用到IIS 7.0

情人节,虽然一个人过,可是也不想加班,刚找到这篇文章就到点下班了,明天再测试行不行这里给大家介绍一下WebDeploy这个IIS的迁移工具。Windows server 2008r2在web服务上做了很大的提升,Windows server 2008的IIS7从核心…

MapReduce编程案例之电商网站日志的行为分析

目录一、需求分析二、程序编写一、需求分析 1.网站数据分析的四个指标: PV:PageView ,浏览量 用户每打开一个网页就会被记录1次浏览量,多次打开同一个页面浏览量累计加一 UV:Unique Visitor 独立访客数 同一用户多次访问&#x…

基于Sqoop+Hive+MySQL网站日志分析项目实战

目录一、需求分析及数据准备(1)需求分析(2)实施分案(3)准备数据二、pvuv数据分析三、导出结果四、企业优化方案五、编写自动加载数据脚本六、编写自动调度数据分析七、运行测试一、需求分析及数据准备 &am…

基于Spark SQL对新闻网站项目案例分析

目录一、需求分析二、数据准备(1)数据格式(2)基于Java开发离线数据生成器(3)基于业务数据创建hive表三、数据模型(1)需求一:对网站的pv分析(2)需求…

实现基于LNMP的电子商务网站

实现基于LNMP的电子商务网站:1. yum方式安装mariadb、 mariadb-server、 php-mysql、 php、 php-fpm2.下载小米商城源码, 解压缩到/data/web目录, 修改权限为nobody3.修改nginx配置, 把nginx.conf.default模板复制为配置文件进行修…

各大网站和app是如何实现黑白页面效果?

今天是2020年4月4日,在此期间,全国和驻外使领馆下半旗志哀,全国停止公共娱乐活动。4月4日10时起,全国人民默哀3分钟,汽车、火车、舰船鸣笛,防空警报鸣响。 很多软件网站都变成了黑白色,比如b站.…

使用VuePress编写静态网站,个人使用过程记录

因为写过开源的简单入门案例,附加的md文档详细说明,但总觉得不是很规范不是非常美观,所以萌生了如何去快速生成静态网站,像基于elementui开源的vue-element-admin文档那样赏心悦目,所以总结了下内容: lop…

python网站安全(一): XSS注入

服务器 例如,我们开发一个显示所有用户的留言的网站: 建立如下的flask项目: app.py为python程序,代码: import json import flaskapp flask.Flask(__name__)app.route(/, methods[GET, POST]) def index():request flask.req…

网站响应式开发 (一) 概述

网站响应式开发 一、认识响应式互联网设计 参看一文 响应式互联网设计 以弹性为基础 作者认为以流动性网格为基础的简单双栏布局,加上若干弹性布局,这种非固定式的布局,更能接受住未来的考验。弹性设计不对浏览器的宽度作任何假设&#xff0c…

塞尼铁克详解网站建设的三项必要职能

塞尼铁克详解网站建设的三项必要职能,网站建设在如今的社会是比较重要的,企业没有网站进行宣传,则客户通过网络获取不到相应的信息就会对企业产生不好的印象,甚至于对企业散失了兴趣。现在各行各业竞争这么厉害,企业本身应该尽量多…

在阿里云云服务器上发布自己的网站(建站|详细)

一、选购云服务器 到阿里云官网进行选购 1.2 云服务器购买方式 如果是可以学生优惠的话,可用学生优惠方式,其它用市场价购买 阿里云还有企业和个人的免费使用的云服务器 阿里云还提供通用代金券,可叠加官网常规优惠使用 1.3 选择系统 Windows…

zabbix免客户端监控网站URL

1.我们需要在zabbix服务器端(这台服务器需要能正常上网)同时安装zabbix-agent客户端,使其正常监控zabbix服务器 2.创建web监测 点击web监测 创建web监测 3.配置异常报警,在添加里找到类似的值和对应的刚才添加的网站,后面那个参数一般选择200…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

如何仅使用javascript建立网站

JavaScript is one of the versatile language in the world. It allow us developers to build websites, servers, mobile apps, hardware and even AI. So it’s not a surprise that it’s one of the most popular programming languages in the world.JavaScript是世界上…

【前端教程】给网站添加暗黑模式指南

导读:给网站添加暗黑模式是随着macOS中的暗黑模式(Dark Mode)出现之后的一个热门话题。社区中有关于这方面的讨论也很多,都在围绕着怎么给网站添加暗黑模式。今天在这篇文章再次和大家一起聊聊这个已久的话题,不同的是…

html5 微软 跑分,微软Surface Phone现身HTML5跑分网站

IT之家讯 最近有关微软Win10新设备Surface Phone的消息日渐增多,但微软官方却从未提及此事,因此这些消息本身还都处于“流言”状态。不过“无风不起浪”,这些传闻可能最终还是要有“转正”的一天。最近这款Win10 Mobile新机Surface Phone又曝…

网站控制台的招聘信息使用console.log打印

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Document</title> </head><body><script>let string1 () > {/*你在电脑前看这段文字&#xff0c;写文字的人…