【redis】服务器架构演进

news2024/11/20 15:51:48

架构演进

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

单机架构

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

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

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

应用数据分离架构

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

应⽤服务集群架构

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

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

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

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

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

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

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

读写分离 / 主从分离架构

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

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

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

在这里插入图片描述

冷热分离架构

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

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

在这里插入图片描述

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

垂直分库

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

在这里插入图片描述

微服务架构

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

在这里插入图片描述

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

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

相关文章

docker入门(一)—— docker概述

docker 概述 docker 官网:http://www.docker.com 官网文档: https://docs.docker.com/get-docker/ Docker Hub官网:https://hub.docker.com (仓库) 什么是 docker docker 是一个开源的容器化平台,可以…

盛最多水的容器——算法思路

题目链接:11. 盛最多水的容器 - 力扣(LeetCode) 题解: while中的主要步骤解释: 首先判断索引 i 处的高度是否小于索引 j 处的高度, 如果小于则计算 ( j - i ) * height [ i ];(先取…

有哪些强大好用的AI表格数据处理工具或者 AI Excel工具?

在繁忙的工作和生活中,处理大量的表格数据往往令人感到头疼。面对一列列数字、一行行文字,我们需要花费大量的时间和精力去整理、核对。然而,随着科技的飞速发展,人工智能(AI)技术正逐渐改变这一现状。 如…

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

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

uniapp套壳打包成apk

不管是vue项目还是uniapp项目,只要能打包成 index.html都可以通过uniapp打包成apk 1.首先把这个项目发布到线上 拿百度举例: 发布到百度服务器用 www.baidu.com能访问到 2.然后到uniapp上发布项目用默认的 vue2,如果你的项目是vue3也用vue2 3.废话我觉得说太多了,直接…

被群辉升级折腾得够呛

群辉升级后,因为版权问题,VideoStation 不支持播放 EAC3 格式的视频了,导致我大量视频都没法用 AppleTV 播放。 网上早期流传了各种方案,比如回退 VideoStation 版本等,都试过了,没啥用。 2024 年 3 月&a…

基于springboot+vue的影院订票系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

不要再封装各种 Util 工具类了,神级框架值Hutool

Hutool 谐音 “糊涂”,寓意追求 “万事都作糊涂观,无所谓失,无所谓得” 的境界。 Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以 …

深入理解Python异常处理机制:助力你的自动化测试脚本

前言 前些天,公司准备使用开源BI工具superset,但部署成功后,连接阿里数仓获取表时,一直报错,苦于日志不详细,从日志中并没有看出哪里的问题,然后就拉源码进行调试,终于找到抛出异常的…

2024年计算机三级|数据库习题整理(自用③)

所有题目均来自【三级数据库技术基础题库】,此博客仅包含部分设计题与应用题,用于自主的回顾学习,仅供参考。 ER图绘制 代码补全 方案选择 (1)在不改变SQL语句和不对表做分区的情况下,可以为学生进出校的申…

自动驾驶感知新范式——BEV感知经典论文总结和对比(一)

自动驾驶感知新范式——BEV感知经典论文总结和对比(一) 博主之前的博客大多围绕自动驾驶视觉感知中的视觉深度估计(depth estimation)展开,包括单目针孔、单目鱼眼、环视针孔、环视鱼眼等,目标是只依赖于视…

【Python爬虫】将某网页中表格里的十六进制颜色值转换成十进制,再生成新表格

【需求】 在 https://www.cnblogs.com/heyang78/p/5712076.html 上有360种颜色及代码,但很遗憾没有十进制的RGB值,使用时需要自己转换一下,此过程依赖网络或计算器,颇为不便。因此,拟设计一爬虫将原有表格内容取出&am…

深度学习入门指南:从理论到实践

深度学习如何入门 深度学习是机器学习的一个分支,它通过模拟人脑神经网络的结构和功能来实现对数据的学习和理解。近年来,深度学习在图像识别、自然语言处理、语音识别等领域取得了显著的成果,越来越受到人们的关注。如果你想入门深度学习&a…

Ambari——编译——解决PowerShell中报错问题

您的支持是我继续创作与分享的动力源泉!!! 您的支持是我继续创作与分享的动力源泉!!! 您的支持是我继续创作与分享的动力源泉!!! 错误日志 因为在此系统上禁止运脚本。有关详细信息,请参阅 https:/go,microsoft,com/fwlink/?LinkID135170 中的 about_Execution…

Cesium安装部署运行

目录 1.简介 2.Cesium项目下载 3.Cesium项目运行 4.cesium运行 1.简介 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎。Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区域,并提供良好的触摸支持,且支…

安卓手机系统跳过app启动广告软件

跳过广告关于此应用声明: 应用利用了安卓系统的辅助功能API,可以读取您手机屏幕上显示的所有内容,并且可以以您的名义进行屏幕点击等操作。* 轻量无广告,不联网,也不需要任何权限;* 请务必在系统设置中开启…

es bulk批量操作简单实例

(1)定义 bulk允许在单个步骤中进行多次create、index、update或delete请求。 bulk与其他的请求体格式稍有不同,如下所示: { action: { metadata }}\n { request body }\n { action: { metadata }}\n { request body …

C++多态机制详解(多态实现原理,单继承和多继承时虚函数表,菱形继承时的虚函数表原理)

文章目录 多态的定义多态的实现1.多态实现的两个必要条件2.什么是虚函数3.重写的条件4.多态实现代码5.重写的两个例外 C11引入的final和override关键字重载,重写(覆盖),隐藏(重定义)抽象类接口继承和实现继…

关于JAVA8的Lambda表达式

1. 水在前面 这个礼拜忽然心血来潮把Lambda表达式学习了一遍,发现这玩意跟原来想象的好像不是一个东西,写个学习心得供以后复习用。还是那句话,这篇水文不能让你完全掌握,只是用来给我自己温习用的,或者也可以作为小伙…

DXP学习2- 绘制电气图【实验】

目录 一、实验目的 二、实验原理 1、创建一个新的项目文件。 2、新建原理图文件 3、设置原理图选项 4、放置元器件 5、其他电路元素的放置 6、对所有电路元素属性参数值的修改 三、实验设备 四、实验内容 1、绘制实验图2-1 元器件所在位置: 1,…