大型网站架构演化总结

news2024/12/28 18:49:07

本文图解大型网站架构演化。

目录

1、单一应用服务阶段

2、应用与数据服务分离阶段

3、利用缓存提高性能阶段

4、应用服务集群阶段

5、数据库读写分离阶段

6、反向代理与CDN加速阶段

7、分布式数据库阶段

8、 NoSQL与搜索引擎阶段

9、业务拆分阶段

10、分布式服务阶段

总结


1、单一应用服务阶段

所有的大型网站都是由最小型的网站架构演变而来的。回想一下你最开始写服务端代码,是不是数据库MySQL在本地,服务器也是本地,那最初阶段也是这样的,网站的流量也不大,通常就将应用服务、数据服务、文件资源等所有资源都放在一台服务器上,比如我们学java web的时候,都是利用Tom等Web容器开始运行应用服务程序,比如JSP,然后需要数据库的时候用JDBC去连接本地Mysql Server。

2、应用与数据服务分离阶段

经过业务发展迭代增加,用户量、日活的上升,简单的一台服务器就搞不定了。比如可能由于用户产生的数据量过多导致存储空间不够,而一台服务器同时得处理数据服务和用户的应用web响应,CPU资源有限的情况下,是无法满足用户想要快速响应需求的,网站的访问数据变得越来越慢,而数据服务和应用服务所对计算机资源的需求是不一样的,比如应用服务器需要更多的CPU资源,给这台服务器配上多几核的CPU,数据服务可能需要与磁盘打交道,配备更多的闪存。

这时候就将应用服务和数据服务进行分离。将应用服务器单独出来,专注于响应web请求,提高用户的访问速度,将数据库单独放在一台服务器,专注于处理与应用服务器打过来的数据请求,将文件资源放在一台服务器上,与应用服务器打交道,为其提供文件服务。

3、利用缓存提高性能阶段

随着用户的再增加,业务的再次升级。网站有面临了一个数据库服务的压力太大而导致整体的访问效率下降,再次影响用户的访问体验。

你可以想象,我们日常的微博、抖音那些热点数据,是几个每个打开这些应用的人会请求到的。所以二八定律永远存在,80%的请求在20%的数据上。所以这个时候将这20%的数据进行高校的缓存起来,这样网站整体的性能又可以提升了。

缓存可以分为两种:一种的直接缓存在应用服务器上,另外是一种开一台缓存服务器进行缓存。后者可以进行很好的弹性伸缩,而前者会受到本地容量的限制。我们称后者服务器为:分布式缓存服务器。

4、应用服务集群阶段

当使用缓存后,数据库的访问压力得到有效缓解。再次随着业务的增加,单一应用服务器能够并发处理的请求连接有限,在流量的高峰期,应用服务器开始成为整个系统的性能瓶颈。

因此这个时候就开始组件应用服务器集群,不仅应用服务器有集群,缓存服务器等也可以组成集群。那么既然有了服务器集群,那对于这些请求,到底应该有哪台服务器响应呢。所以负载均衡调度服务器就出现了。

通过负载均衡调度服务器,可将来自浏览器的访问请求分发到应用的集群中的任何一台服务器上。使用服务器集群也有个好处,Web 应用程序更新可以做到用户无感知,当有一个节点的服务器宕机之后,也不影响整体的请求。

5、数据库读写分离阶段

虽然增加了数据缓存这一层。比如利用redis缓存,但是随着用户量的不断增加。总有一些是无法通过缓存提高的,比如还可能出现缓存过期、缓存没有命中等情况。那么这些请求全部会打到数据库服务器上,这个时候数据库服务成为了整个系统的瓶颈。所以数据读写分离就出现了。

目前大部分的数据库都提供了一个主从热备的功能。通过配置主从两台服务器,当应用服务器往主服务器写入诗句时,利用主从复制机制将数据更新同步到从数据库上。读写分离之后,数据库的性能瓶颈就解决了。

6、反向代理与CDN加速阶段

当网站业务再次升级,用户规模再次扩大,为了满足不同地区的用户访问速度,提高响应速度,CDN和反向代理就出现了,两者基本原因都是缓存。

CDN就是内容分发网络,你的请求响应服务器会从距离你最近的一个服务器集群上响应回来,比如你在云南,可能就从云南的机房响应。

而反向代理则部署在中心机房,当请求来到中心机房后,首先访问的时候反向代理服务器,看看是否名字缓存,如果命中则直接返回。

7、分布式数据库阶段

分布式数据库是系统数据库拆分的最后手段,这只有在单表数据规模非常大的时候才会用,一般的数据库拆分都是对业务拆分后将不同的业务数据部署在不同的服务器上。

8、 NoSQL与搜索引擎阶段

当成为大型系统的时候,搜索成为了日常需求,这时会采用NoSQL和搜索引擎来提高搜索效率,缓存的时候redis也是NoSQL类型的。

9、业务拆分阶段

当业务日渐的增多,可能团队人员也不利于管理,这个时候大型的系统都会进行业务拆分,比如抖音就拆了很多很多业务线。每条业务线服务不同的服务,每个服务都单独进行部署,可以通过消息队列进行数据分发。

10、分布式服务阶段

随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难。

既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供共用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作。

总结

目前很少有人能经历上面的系统演进,大部分大型的系统已经成型,而小系统可能又很可能撑不到成为大系统,所以很少有人能经历这些,不过了解这些,我们对于整个系统架构的理解非常有帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑要用多少V的电源?电脑电源输入电压是市电

台式电源的输出电压是多少? 电脑电源输出一般有三种不同的电压,分别是: 12V、5V、3.3V。 电脑电源负责给电脑配件供电,如CPU、主板、内存条、硬盘、显卡等,是电脑的重要组成部分。 工作电流根据不同的硬件及其使用状…

从仓储管理看3C电子行业智慧物流的优势

仓储管理是智慧物流的重要组成部分。通过引入自动化、智能化的仓储管理系统,3C电子企业可以实现库存的精准管理、快速分拣和高效配送。这不仅减少了库存成本,还大大提高了运营效率和市场响应速度。 传统的仓储管理依赖于人工操作和纸质文档记录&#xff…

Java项目:37 springboot003图书个性化推荐系统的设计与实现

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot003图书个性化推荐系统的设计与实现 管理员:首页、个人中心、学生管理、图书分类管理、图书信息管理、图书预约管理、退换图书…

unity学习(50)——服务器三次注册限制以及数据库化角色信息5--角色信息数据库化收尾

上一节内容结束后确实可以写入文件了,但还有两个问题: 1.一个是players.txt中,每次重启服务器,当注册新账号创建角色时,players.txt之前内容都会清空。 2.players.txt之前已经注册3次的账号,新注册的角色…

做接口测试的流程一般是怎么样的?2024全网最全教程(建议收藏)

在讲接口流程测试之前,首先需要给大家申明下:接口测试对于测试人员而言,非常非常重要,懂功能测试接口测试,就能在企业中拿到一份非常不错的薪资。不信请狠狠点击下方链接(下方链接也有接口学习方法及学习资…

Vue中的v-for中为什么不推荐使用index作为key值

在Vue中,我们经常会用到v-for指令来遍历数组或对象并渲染列表。而在使用v-for指令时,通常会需要给每个遍历的元素指定一个唯一的key值,以帮助Vue更高效地更新DOM。 在很多情况下,我们可能会倾向于使用index作为key值,…

Qt程序设计-柱状温度计自定义控件实例

Qt程序设计-柱状温度计自定义控件实例 本文讲解Qt柱状温度计自定义控件实例。 效果演示 创建温度计类 #ifndef THERMOMETER_H #define THERMOMETER_H#include <QWidget> #include <QPainter> #include <QDebug> #include <QTimer> #include <QPr…

Unity之街机捕鱼

目录 &#x1f62a;炮台系统 &#x1f3b6;炮口方向跟随鼠标 &#x1f3b6;切换炮台 &#x1f62a;战斗系统 &#x1f3ae;概述 &#x1f3ae;单例模式 &#x1f3ae;开炮 &#x1f3ae;子弹脚本 &#x1f3ae;渔网脚本 &#x1f3ae;鱼属性信息的脚本 &#x1f6…

HTML5:七天学会基础动画网页9

在进行接下来的了解之前我们先来看一下3d的xyz轴&#xff0c;下面图中中间的平面就相当于电脑屏幕&#xff0c;z轴上是一个近大远小的效果。 3d转换属性 transform 2D或3D转换 transform-origin 改变旋转点位置 transform-style 嵌套元素在3D空间如何显 …

文件二维码怎么加访问权限?加密、限时、限次的二维码制作技巧

扫码查看或者下载文件已经是现在经常被使用的一种方式&#xff0c;当我们通过这种方式来展现文件内容时&#xff0c;是否能够加入一些权限设置来保障文件的安全性&#xff0c;是很多小伙伴非常关心的一个问题。 想要制作文件二维码&#xff0c;大多情况下会通过在线二维码生成…

GPQA数据集分享

来源: AINLPer公众号&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2024-2-28 尽管AI系统在许多任务上表现出色&#xff0c;但在需要大量专业知识和推理能力的任务上仍然存在局限性。为此&#xff0c;纽约大学的研究者提出…

Yii2中如何使用scenario场景,使rules按不同运用进行字段验证

Yii2中如何使用scenario场景&#xff0c;使rules按不同运用进行字段验证 当创建news新闻form表单时&#xff1a; 添加新闻的时候执行create动作。 必填字段&#xff1a;title-标题&#xff0c;picture-图片&#xff0c;description-描述。 这时候在model里News.php下rules规则…

智慧城市中的数据力量:大数据与AI的应用

目录 一、引言 二、大数据与AI技术的融合 三、大数据与AI在智慧城市中的应用 1、智慧交通 2、智慧环保 3、智慧公共安全 4、智慧公共服务 四、大数据与AI在智慧城市中的价值 1、提高城市管理的效率和水平 2、优化城市资源的配置和利用 3、提升市民的生活质量和幸福感…

【人工智能课程】计算机科学博士作业三

【人工智能课程】计算机科学博士作业三 来源&#xff1a;李宏毅2022课程第10课的作业 1 图片攻击概念 图片攻击是指故意对数字图像进行修改&#xff0c;以使机器学习模型产生错误的输出或者产生预期之外的结果。这种攻击是通过将微小的、通常对人类难以察觉的扰动应用于输入…

1.5 简述转置卷积的主要思想以及应用场景

1.5 简述转置卷积的主要思想以及应用场景 普通的卷积主要思想&#xff1a; 普通的卷积操作可以形式化为一个矩阵乘法运算&#xff0c;即yAx&#xff08;1-12&#xff09; 其中&#xff0c;x和y分别是卷积的输入和输出(展平成一维向量形式)&#xff0c;维度分别为d⁽i⁾和d⁽…

计算机设计大赛 深度学习花卉识别 - python 机器视觉 opencv

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &a…

[网络安全] PKI

一、PKI 概述 名称; 公钥基础设施 (Public Key Facility) 作用: 通过加密技术和数字签名保证信息安全 组成: 公钥机密技术、数字证书、CA、RA 二、信息安全三要素 机密性&#xff1a;确保仅信息发收双方 能看懂信息 完整性&#xff1a; 确保信息发收完整&#xff0c;不被破坏 …

阿珊带你深入理解 async/await 函数

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【RabbitMQ】WorkQueue

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;MQ ⛺️稳中求进&#xff0c;晒太阳 Work Queues Work queues任务模型&#xff0c;简单来说就是让多个消费者绑定到一个队列&#xff0c;共同消费队列中的消息 当消息处理比较耗时的时候&…

仿牛客网项目---消息队列的实现

本篇文章讲一讲我们的项目中用到的消息队列。 1.阻塞队列 2.kafka 我的项目为什么要用消息队列&#xff1f; 如果采用消息队列&#xff0c;那么评论、点赞、关注三类不同的事&#xff0c;可以定义三类不同的主题&#xff08;评论、点赞、关注&#xff09;&#xff0c;发生相应…