八种架构演进

日升时奋斗,日落时自省

目录

1、单机架构

2、应用数据分离架构

3、应用服务集群架构

4、读写分离/主从分离架构

5、冷热分离架构

6、垂直分库架构

7、微服务架构

8、容器编排架构

9、小结


1、单机架构

特征:应用服务和数据库服务器公用一台服务器

出现场景:访问量较小,单机可以满足,由于现在硬件的升级,所以一台服务器够支持很多请求

 红色箭头表示请求访问,蓝色箭头表示响应

 单机程序中,其实靠的不就是数据库信息的拉取嘛,但是数据库也不是不能去掉,光服务器负责所有操作(单机架构是比较常见架构使用)

一台主机的硬件资源是有上限的,CPU、内存、硬盘、网络每次请求都会收到一个请求,都是需要消耗上述的一些资源,现在一台主机都够用(不行了其实也可以增加硬件资源,但是肯定硬件资源不能在加了就开始使用分布式)

优点:部署简单、成本低

缺点:性能有严重平静、数据库和应用互相竞争资源

2、应用数据分离架构

特征:应用服务和数据库服务使用不同服务器

出现场景:单机架构存在严重的资源竞争,导致站点变慢

  红色箭头表示请求访问,蓝色箭头表示响应

优点:成本相对可控、性能相比单机有提升、数据库单独隔离、不会因为应用把数据库搞坏,不至于数据库瘫痪

缺点:硬件成本变高、性能有瓶颈,无法对应海量并发(当前数据库仍然是要接收所有请求处理处理)

3、应用服务集群架构

特征:引入负载均衡,应用以集群方式运作

出现场景:单个应用不足以支持海量的并发请求,高并发的时候站点响应变慢

注:能接收请求量多到数千,多个应用服务器集群同时处理大量请求量(此处tomcat就是横向扩展

 注:如果请求量更大呢,其实也同样可以按照上面的方法,交给一个更大应用服务接收请求,不够再进行横向扩展(第一先交给上层管理,第二同层进行横向扩展

   红色箭头表示请求访问,蓝色箭头表示响应

 注:根据需求而定不是说这样的架构一定好,能承载越多并发量就越适合当前,根据情况而定;对于图解有个解释,上面画的只是一个大概的图,实际上有了上层之后,下层就需要更多来接收,毕竟上层是负载均衡器,还是要给下层分配的

优点:

针对应用服务器

(1)高可用:应用满足高可用,不会一个服务出问题整个站点挂掉

(2)高性能:如果不是访问数据库,应用相关处理海量请求快速响应

(3)扩展能力:支持横向扩展

缺点:

针对数据库

(1)性能瓶颈:无法应对数据库的海量查询

(2)可用性:数据库是点单的,所以一旦崩溃就是整个系统挂掉

(3)运维成本高:扩展部署运维工作增加

(4)硬件成本高:说的就是F5这个硬件

4、读写分离/主从分离架构

特征:将数据库集群化,但是为了保证所取数据都是相同的,就让一个数据哭来下,剩下的小弟们跟随大哥进行同步;数据库服务器搭建主从集群,一主一从、也可以一主多从都可以,,数据哭主机负责写操作,从机只负责读操作

出现场景:数据库到达瓶颈,而互联网应用一般读多写少,数据库承载压力主要来源于读的请求你造成的,那么针对这样的情况把读操作和写操作分开

注:红色箭头表示请求是写操作;浅蓝色箭头表示读操作;紫色箭头表示写操作进行同步,同步给从库;蓝色箭头表示响应

优点:

针对请求访问

(1)读取性能提升

(2)读取操作为主数据库减轻了大部分请求的压力,写操作性能也得以提升

(3)可用性:一个数据库的坍塌不会给系统带来致命的伤害,提高了可用性

缺点:

针对热点数据

(1)读库虽然分担了很多请求量,但是它也会负载,热点数据的疯狂访问

(2)同步从库挂掉,或者延时,导致主库和从库数据有一定可能不一致

(3)服务器成本需要增加(添东西了,能不增加)

5、冷热分离架构

这里针对冷热数据进行解析:针对所谓数据都有常用数据,不常用数据,也就衍生出了“二八原则”,20%的热点数据,能满足80%的访问需求(不是说一定就是20%,按照业务需求来定夺分配,“一九”也不是没有)

特征:引入缓存,实行冷热分离,将热点数据放到缓存中快速响应

出现场景:海量的请求导致数据库负载过高,站点响应在度变慢,说明数据库已经开始吃力了;不足以提供较高的舒适度

 优点:大幅度降低数据库的访问请求,性能提升非常明显(访问缓存相比访问数据库快)

缺点:

(1)涉及到缓存就会设想到缓存到来的相关问题,缓存击穿、缓存失败、缓存雪崩等问题

(2)服务器成本的提高

(3)业务量支持变大,数据库单库太大,单表个体太大还是会导致数据库查询很慢,导致数据库再度到达瓶颈期

6、垂直分库架构

特征:数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解为分布式数据库架构

出现场景:写操作比较多,单机库性能已经支持不了了,需要拆分数据库,数据表的数据量太多,操作压力大,需要进行分表,降低运维难度,就有了分布式数据库,库表本来也就支持分布式

分库分表:

垂直分库:是指按照业务功能模块进行分库,将不同的业务模块分别放在不同的物理数据库中,这样可以提高系统的性能和扩展性

水平分库:是指按照用户属性(地市或者ID的hash)进行分库,将全省划分为个大区,每个大区有一个物理数据库,这样可以提高系统的扩展性和性能

注:这里就不在往整个架构图中带入了,这里直接将常见到的应用带入到架构中,这些中间件都是可以支持分库操作,内部实现思想也基本如上

分布式数据库:

 优点:数据库吞吐量大幅度提升,不再是瓶颈期

缺点:

(1)跨库join操作,分布式事务等问题,需要对应进行解决,目前的mpp都有解决对策

(2)数据库和缓存结合能够支持海量的请求,但是应用代码整体耦合,修改一行代码就需要连带修改很多,整体重新发布

7、微服务架构

特征:按照业务板块来分应用代码,是单个应用的职责更清晰,相互之间可以做到独立升级迭代

出现场景:场景不定全看自己对微服务的定位,这里针对几点进行评定

(1)扩展性差:应用程序不能轻松扩展,因为每次需要更新应用程序时,都必须重新构建整个系统

(2)持续开发困难一个很小的改动会惊动整个系统的代码连带改动,无法频繁并容易发布(这个是灵活性的体现)

(3)不可靠:一个功能不起作用了整个系统可能不能动

(4)代码维护比较吃力,都是在一起的,接手人需要了解整个系统才能每步修改

微服务体现:

 架构演示:

 注:图并没有画完,这里解释当我们找商品的时候,是可以去访问用户,返回用户信息之后,在去找商品,商品查找操作是一样的,先找缓存,如果缓存没有在找数据库

优点:

(1)灵活性高:服务独立测试、部署、升级、发布

(2)独立扩展:微服务将功能独立起来,各自扩展互不干扰

(3)提高容错性:一个服务问题,不会两边挂

(4)支持编程语言多

缺点:
(1)运维复杂度高:应用和服务的部署变得复杂,同一台服务器上不是多个服务还要解决运行环境冲突的问题,如果需要动态扩缩场景,需要水平扩展服务的性能,就需要在新增服务上准备运行环境

(2)资源使用变多:独立一个微服务是需要消耗CPU和内存的

(3)处理故障困难:需要查查看不同的日志完成问题定位,每个都是独立的,如果出问题需要慢慢排查

8、容器编排架构

特征:借助容器化技术(Docker)将应用/服务可以打包为镜像,通过容器编排工具(k8s)来动态分布和部署镜像,服务以容器化方式运行

出现场景:

(1)微服务拆分细致,服务多部署工作量大,配置复杂容易出错

(2)微服务数量多扩缩容麻烦,而且容易出错,每次缩容后再扩容又需要重新配置服务对应的环境参数

(3)微服务之间运行环境可能冲突,需要更多的资源来进行部署或者通过修改配置来解决冲突

容器化举例:

这里就我们比较熟悉的Java一套体系来说 java应用涉及:java、jdk、centos7 但是我们放到服务器上一次一次放太麻烦了,docker可以直接打包这个三个体系称为一个体系,直接部署到服务器上

 容器化体现:

 容器编排架构:

 红色箭头表示请求,蓝色箭头表示响应,紫色箭头表示去拿用户信息,浅蓝色箭头表示缓存没有,访问数据库

注:这里的图没有画完,同样是访问商品时拿到用户数据信息,再次进行数据访问,先访问缓存,数据不存在访问数据库

 优点:

(1)部署运维简单快速:一条命令就可以完成几百个服务的部署或者扩缩容

(2)隔离性好:容器与容器之间文件系统,网络相互隔离,不会产生环境冲突

(3)支持滚动更新:版本间奇幻都可以通过一个命令完成升级或者回滚

缺点:

(1)技术栈变多,技术要求严格

(2)运维成本极高,机器不是随时都会面临如此的资源消耗,一般只会维持一段时间,剩余时间还是闲置状态,此时资源利用率低,推荐云厂商服务器解决问题

9、小结

注:最后压力给到了应用,但是并没有结束,应用的改动会影响整个系统的代码耦合性太高,导致运维部署发布都需要很多次,任务量很大(图太长了,不太会截,这里分开截,内容是连续的)

 下面就有了微服务,微服务并没有解决运维任务量大的问题,微服务只是将代码解耦,能让开发更加便捷,各司其职互不影响,运维的麻烦还是经过docker容器化打包成镜像交给k8s进行编排降低运维的任务量

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

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

相关文章

【工具】 删除Chrome安装的“创建快捷方式”

创建Chrome的快捷方式,可以放在桌面,想用时双击就可以打开网页,比书签(brookmark)结构化管理更方便。 但是,安装一时爽,卸载有问题。 如果用 windows 控制面板\所有控制面板项\程序和功能 卸载…

FPGA原理与结构——RAM IP核原理学习

目录 一、什么是RAM 二、RAM IP介绍 1、RAM分类简介 2、可选的内存算法 (1)Minimum Area Algorithm(最小面积算法) (2)Low Power Algorithm (低功耗算法) (3&#x…

【Unity实战篇 】| 游戏中实现镂空遮罩效果【矩形、圆形镂空遮罩】

前言【Unity实战篇 】 | 游戏中实现镂空遮罩效果【矩形、圆形镂空遮罩】一、制作原理二、矩形中间镂空遮罩效果2.1 实现镂空显示2.2 镂空区域内事件穿透三、圆形中间镂空遮罩效果总结前言 本文来写一下怎样在Unity中完成一个 镂空遮罩 的效果。镂空遮罩 比较常用的有两种:矩形…

安全学习DAY17_信息打点-语言框架组件识别

信息打点-WEB打点-语言框架&开发组件 文章目录 信息打点-WEB打点-语言框架&开发组件本节涉及链接&工具本节知识&思维导图基础概念介绍框架:组件:Web架构 对应Web测试手法后端:前端组件:java居多,框架&…

IO day 4

1、使用两个进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半内容&#xff0c;子进程拷贝后一半内容&#xff0c;并且父进程要阻塞回收子进程资源 #include <myhead.h>int main(int argc, const char *argv[]) {char a[1] {0};pid_t pid;pid fork();//创建一个子进…

websocket + stomp + sockjs学习

文章目录 学习链接后台代码引入依赖application.ymlWebSocketConfigPrivateControllerWebSocketService WebSocketEventListenerCorsFilter 前端代码Room.vue 学习链接 WebSocket入门教程示例代码&#xff0c;代码地址已fork至本地gitee&#xff0c;原github代码地址&#xff…

红绿灯识别、倒计时识别(毕业设计)

交通标志识别 本项目使用YOLO 模型&#xff0c;并在对数字信号灯进行数字识别时采用opencv算法。 环境安装 所需环境 python 3.7.11 torch1.2.00 使用 pip install -r requirements.txt安装所需的包。 文件下载 训练所需的预训练权重可在百度网盘中下载。 链接&#xf…

【Unity】制作一个简单的菜单栏页面并实现其功能

这是一个简单的菜单页面制作&#xff0c;接下来我们将制作一个完整的菜单页面&#xff0c;并且通过一定的代码去实现它对应的效果。这个主要的功能就是我们在游戏中如果想暂停一下或者重新开始&#xff0c;那么就要用到我们这个功能。接下来我们将实现在游戏中按ESC退出键可以调…

【3Ds Max】弯曲命令的简单使用

简介 在3ds Max中&#xff0c;"弯曲"&#xff08;Bend&#xff09;是一种用于在平面或曲面上创建弯曲效果的建模命令。使用弯曲命令&#xff0c;您可以将对象沿特定轴向弯曲&#xff0c;从而创建出各种弯曲的几何形状。以下是使用3ds Max中的弯曲命令的基本步骤&…

react使用antd的table组件,实现点击弹窗显示对应列的内容

特别提醒&#xff1a;不能在table的columns的render里面设置弹窗组件渲染&#xff0c;因为这会导致弹窗显示的始终是最后一行的内容&#xff0c;因为这样渲染的结果是每一行都会重新渲染一遍这个弹窗并且会给传递一个content的值&#xff0c;渲染到最后一行的时候&#xff0c;就…

08-MySQL-基础篇-约束

约束 前言约束示例 外键约束示例外键删除/更新行为语法CASCADESET NULL 前言 本篇来学习下MySQL表中字段的约束 约束 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。目的&#xff1a;保证数据库中数据的正确、有效性和完整性。分类 …

ORB-SLAM2学习笔记7之System主类和多线程

文章目录 0 引言1 整体框架1.1 整体流程 2 System主类2.1 成员函数2.2 成员变量 3 多线程3.1 ORB-SLAM2中的多线程3.2 加锁 0 引言 ORB-SLAM2是一种基于特征的视觉SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;系统&#xff0c;它能够从单个、双目或RBG…

AIGC音视频工具分析和未来创新机会思考

编者按&#xff1a;相较于前两年&#xff0c;2023年音视频行业的使用量增长缓慢&#xff0c;整个音视频行业遇到瓶颈。音视频的行业从业者面临着相互竞争、不得不“卷”的状态。我们需要进行怎样的创新&#xff0c;才能从这种“卷”的状态中脱离出来&#xff1f;LiveVideoStack…

扩散模型实战(四):从零构建扩散模型

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 本文以MNIST数据集为例&#xff0c;从…

基于Mysql+Vue+Django的协同过滤和内容推荐算法的智能音乐推荐系统——深度学习算法应用(含全部工程源码)+数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境MySQL环境VUE环境 模块实现1. 数据请求和储存2. 数据处理计算歌曲、歌手、用户相似度计算用户推荐集 3. 数据存储与后台4. 数据展示 系统测试工程源代码下载其它资料下载 前言 本项目以丰富的网易云音乐数据为基…

一文彻底理解时间复杂度和空间复杂度(附实例)

目录 1 PNP&#xff1f;2 时间复杂度2.1 常数阶复杂度2.2 对数阶复杂度2.3 线性阶复杂度2.4 平方阶复杂度2.5 指数阶复杂度2.6 总结 3 空间复杂度 1 PNP&#xff1f; P类问题(Polynomial)指在多项式时间内能求解的问题&#xff1b;NP类问题(Non-Deterministic Polynomial)指在…

深入理解分布式架构,构建高效可靠系统的关键

深入探讨分布式架构的核心概念、优势、挑战以及构建过程中的关键考虑因素。 引言什么是分布式架构&#xff1f;分布式架构的重要性 分布式系统的核心概念节点和通信数据分区与复制一致性与一致性模型负载均衡与容错性 常见的分布式架构模式客户端-服务器架构微服务架构事件驱动…

python从入门到精通——完整教程

阅读全文点击《python从入门到精通——完整教程》 一、编程入门与进阶提高 Python编程入门 1、Python环境搭建&#xff08; 下载、安装与版本选择&#xff09;。 2、如何选择Python编辑器&#xff1f;&#xff08;IDLE、Notepad、PyCharm、Jupyter…&#xff09; 3、Pytho…

JetBrains IDE远程开发功能可供GitHub用户使用

JetBrains与GitHub去年已达成合作&#xff0c;提供GitHub Codespaces 与 JetBrains Gateway 之间的集成。 GitHub Codespaces允许用户创建安全、可配置、专属的云端开发环境&#xff0c;此集成意味着您可以通过JetBrains Gateway使用在 GitHub Codespaces 中运行喜欢的IDE进行…

JavaWeb-Listener监听器

目录 监听器Listener 1.功能 2.监听器分类 3.监听器的配置 4.ServletContext监听 5.HttpSession监听 6.ServletRequest监听 监听器Listener 1.功能 用于监听域对象ServletContext、HttpSession和ServletRequest的创建&#xff0c;与销毁事件监听一个对象的事件&#x…