【redis】服务器架构演进

架构演进

  • 单机架构
  • 应用数据分离架构
  • 应⽤服务集群架构
  • 读写分离 / 主从分离架构
  • 冷热分离架构
  • 垂直分库
  • 微服务架构

单机架构

所有的应用服务、业务所需的数据、业务处理等都在一台服务器上。

在初期,用户访问量很少,对服务器的的性能和安全没有很高的要求,所以单机架构足以胜任。
在这里插入图片描述

⽤⼾在浏览器中输⼊ 网站名,⾸先经过 DNS 服务将域名解析成 IP 地址 ,随后浏览器访问该 IP 对应的应⽤服务。

应用数据分离架构

随着用户访问量的增加,已经逐渐逼近了系统的极限,需要进行系统重构,我们将应用服务和数据库服务分开部署到不同的服务器上,显著提高两者各自性能。
在这里插入图片描述

应⽤服务集群架构

我们上线的服务受到用户的欢迎,用户访问量暴增,单台服务器已经无法满足需求。
服务器应用首先遇到瓶颈,商讨后,有两种解决发案:

  1. 垂直扩展 / 纵向扩展:通过购买性能更优、价格更⾼的应⽤服务器来应对更多的流量。
    这种⽅案的优势在于完全不需要对系统软件做任何的调整;但劣势也很明显:硬件性能和价格的增⻓关系是⾮线性的,意味着选择性能 2 倍的硬件可能需要花费超过 4 倍的价格,其次硬件性能提升是有明显上限的。

  2. ⽔平扩展 / 横向扩展:通过调整软件架构,增加应⽤层硬件,将⽤⼾流量分担到不同的应⽤层服务器上,来提升系统的承载能⼒。
    这种⽅案的优势在于成本相对较低,并且提升的上限空
    间也很⼤。但劣势是带给系统更多的复杂性,需要技术团队有更丰富的经验

当然也可以进行软件优化来解决问题,但是这对程序猿的要求很高,需要通过性能测试区对症下药,也同样是有上限的。

我们选择了水平扩展方式,但是,为了保证用户的请求被平均的分配的每一台应用服务器上,需要⼀个专⻔的系统组件做流量分发-----负载均衡,这就可以说是分布式系统了。

引入分布式后,系统的复杂程度大大提高,出bug的概率也会更高。

在这里插入图片描述
负载均衡软件:Nginx、HAProxy、LVS、F5 等

读写分离 / 主从分离架构

我们通过水平扩展方式,引入多台应用服务器并设计好了负载均衡服务器后,我们解决了用户请求量增加的问题,但是,这些请求最终都会从数据库读写数据,到⼀定程度之后,数据库服务器就会达到极限,称为系统承载能⼒的瓶颈点。
我们可以像扩展应⽤服务器⼀样扩展数据库服务器么?答案是否定的,因为数据库服务有其特殊性:如果将数据分散到各台服务器之后,数据的⼀致性将⽆法得到保障。

所谓数据的⼀致性
此处是指:针对同⼀个系统,⽆论何时何地,我们都应该看到⼀个始终维持统⼀的数据。想象⼀下,银⾏管理的账⼾⾦额,如果收到⼀笔转账之后,⼀份数据库的数据修改了,但另外的数据库没有修改,则⽤⼾得到的存款⾦额将是错误的。

我们采⽤的解决办法是这样的,保留⼀个主要的数据库作为写⼊数据库,其他的数据库作为从属数据库。从库的所有数据全部来⾃主库的数据,经过同步后,从库可以维护着与主库⼀致的数据。然后为了分担数据库的压⼒,我们可以将写数据请求全部交给主库处理,但读请求分散到各个从库中。

在这里插入图片描述

冷热分离架构

随着访问量继续增加,发现业务中⼀些数据的读取频率远⼤于其他数据的读取频率。我们把这部分数据称为热点数据,与之相对应的是冷数据。针对热数据,为了提升其读取的响应速度,可以增加本地缓存,并在外部增加分布式缓存。

对于大多数的业务来说,通常会出现 二八现象,80%的访问量是冲着那20%的热点数据去的,我们将热点数据放入缓存,能把绝⼤多数请求在读写数据库前拦截掉,⼤⼤降低数据库压⼒。

在这里插入图片描述

相关软件:
Memcached、Redis 等缓存软件

垂直分库

随着业务的数据量增⼤,⼤量的数据存储在同⼀个库中已经显得有些⼒不从⼼了,所以可以按照业务,将数据分别存储。

在这里插入图片描述

微服务架构

随着⼈员增加,业务发展,我们将业务分给不同的开发团队去维护,每个团队独⽴实现⾃⼰的微服务。
将之前的复杂的服务器拆分成更多的,功能较为单一,更小的服务器。降低了维护服务器的难度,但是服务器的数量和种类更多了。
也会降低业务整体的性能,因为各个拆分出来的服务要进行网络通信,而网络通信的速度可能会比硬盘的读取速度还慢。

在这里插入图片描述

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

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

相关文章

抖音视频无水印批量下载软件|爬虫视频采集工具

抖音视频无水印批量下载软件,轻松实现视频提取和下载 概述: 想要快速、方便地提取和下载抖音视频无水印?我们的抖音视频无水印批量下载软件将是您的得力助手!不仅支持通过关键词批量提取视频,还可以针对特定视频进行提…

Linux安装Nacos

安装前必要准备 准备Java环境 ,8以上的版本,mysql(集群相关信息),nginx(进行代理) 安装Nacos 首先我们要有一个nacos的包,我们可以在线下载,也可以提前下载好&#xf…

IRIS 和 Caché 是什么关系

我们都知道真正一个数据库通常是 2 个部分组成的,存储和进程。 Cach Cach 的定义就是一个数据库,在这个数据库中有存储和进程。 与我们常用的 MySQL 来说,我们安装好 MySQL 后我们就可以通过客户端进行连接了,同时我们还可以通过…

二叉树的链式结构和遍历(下)

又见面了,小伙伴们。今天我们继续来学习二叉树,今天的内容相对来说比较容易理解,前提是需要你们自己动手画图才会好理解。眼过千遍不如手过一遍。所以小伙伴们要多动手哦。直接开始今天的学习吧 1.二叉树链式结构的实现 1.1 前置说明 在学习…

Stability AI发布Stable Video 3D模型:可从单张图像创建多视图3D视频,视频扩散模型史诗级提升!

Stability AI发布了Stable Video 3D (SV3D),这是一种基于稳定视频扩散的生成模型,推动了3D技术领域的发展,并大大提高了质量和视图一致性。 该版本有两个版本: SV3D_u:该变体基于单图像输入生成轨道视频,无需相机调节。 SV3D_p:扩…

鸿蒙Harmony应用开发—ArkTS(@Link装饰器:父子双向同步)

子组件中被Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。 说明: 从API version 9开始,该装饰器支持在ArkTS卡片中使用。 概述 Link装饰的变量与其父组件中的数据源共享相同的值。 限制条件 Link装饰器不能在Entry装饰的自定义组件中使用…

伊理威科技:抖音开网店新手刚做选啥品

在数字浪潮中,抖音不仅是展示才艺的舞台,更是创业者的新天地。新手若想在这片热土上开垦网店,选品便是首要课题。选择产品如同种下希望的种子,既要考量土壤肥沃度,也得预测风雨适宜期。 兴趣与专长是选品的罗盘。热爱所…

STM32之HAL开发——RCC外设CubeMX配置时钟

RCC外设介绍 RCC是Reset and Clock Control (复位和时钟控制)的缩写,它是STM32内部的一个重要外设,负责管理各种时钟源和时钟分频,以及为各个外设提供时钟使能。RCC模块可以通过寄存器操作或者库函数来配置。 RCC是复位和时钟控制模块&#…

GeoAI 简明教程

想象一下,能够在野火发生后立即发现它,可视化全球人口变化,或者立即从地图中提取线条。 GeoAI,即地理空间人工智能,是指地理信息系统 (GIS)、人工智能 (AI) 和机器学习 (ML) 的交叉点。 这个领域正在彻底改变我们与世界…

数据结构 - 二叉树非递归遍历

文章目录 前言一、前序二、中序三、后序 前言 本文实现二叉树的前中后的非递归遍历,使用栈来模拟递归。 文字有点简略,需要看图和代码理解 树节点: typedef char DATA; //树节点 typedef struct Node {DATA data; //数据struct Node* left…

基于springboot+vue的物资仓储物流管理系统(源码+论文)

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…

数据治理的迷失:揭开“屎上雕花”现象的真相

数据治理是企业信息化建设的核心环节,它直接关系到数据的质量、安全性和价值实现。然而,在实际操作中,不少企业却陷入了“屎上雕花”的误区,即在数据本身存在问题的情况下,试图通过表面的修饰来提升数据的外在表现&…

QT:三大特性

QT的三大特性: 1、信号与槽 2、内存管理 3、事件处理 1、信号与槽 当信号产生时,就会自动调用绑定的槽函数。 自定义信号: 类中需要添加O_OBJECT宏 声明: signals标签之下进行声明 定义: 信号不需要定义 …

使用 PyOpenGL 进行 2D 图形渲染总结

一、说明 OpenGL是一个广泛使用的开放式跨平台实时 3D 图形库,开发于二十多年前。它提供了一个低级API,允许开发人员以统一的方式访问图形硬件。在开发需要硬件加速且需要在不同平台上运行的复杂 2D 或 3D 应用程序时,它是首选平台。它可以在…

Day 14 JDBC

JDBC 1、简单入门 Statement2、preparedStatement3、主键回显4、批量操作5、事务6、Druid6.1 工具类V16.2 工具类V26.3 1、简单入门 Statement 步骤: 1、注册驱动 2、创建连接 3、创建 Statement对象 4、编写sql语句 并且发送sql语句获得结果集 5、解析结果集 6、释放资源 注意…

1、Dev软件的安装

预先善其事,必先利其器,想要学习编程语言的第一步就是学会使用编译软件,在这里我们所使用的编译软件为 Dev-cpp 5.11 ,在这一章节,我们将讲述如何下载并安 Dev-cpp 5.11。 一、下载 首先,我们要先学会下载 Dev-cpp 5.11,这里我们点击:Dev-cpp 5.11,即可完成下载,注…

Appium —— 移动应用自动化测试开源工具!

Appium介绍 Appium是一个用于自动化移动应用程序的开源工具,它支持iOS和Android平台。通过Appium,开发人员可以使用各种编程语言(如Java、Python、Ruby等)编写测试脚本,以自动化测试移动应用程序的功能和用户界面。Ap…

pytest运行结果解析及其改造

简介:场景假设 - 当运行pytest完成后,需要针对运行的结果进行即时的反馈,打印 PASS 或者 FAIL,及其运行失败的原因,最后将结果推送给消息机器人。 历史攻略: pytestallure安装和使用 pytest:…

C# 对App.config、Web.config的appSettings节点数据进行加密

appSettings加密原因,就是因为容易暴露服务器账号和密码,而且客户也不允许 使用ASP.NET提供的命令工具aspnet_regiis来创建加密命令;aspnet_regiis是提供了直接对配置文件加密的功能的;并且使用aspnet_regiis加密的配置节点在读取…

贪吃蛇(C语言超详细版)

目录 前言: 总览: API: 控制台程序(Console): 设置坐标: COORD: GetStdHandle: STD_OUTPUT_HANDLE参数: SetConsoleCursorPosition: …
最新文章