【redis】服务器架构演进

架构演进

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

单机架构

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

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

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

应用数据分离架构

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

应⽤服务集群架构

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

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

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

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

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

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

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

读写分离 / 主从分离架构

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

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

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

在这里插入图片描述

冷热分离架构

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

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

在这里插入图片描述

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

垂直分库

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

在这里插入图片描述

微服务架构

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

在这里插入图片描述

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

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

相关文章

NFT交易市场-后端开发

首先我们需要配置好我们的ipfs,参考官方文档 1.https://docs.ipfs.tech/install/command-line/#system-requirementshttps://docs.ipfs.tech/how-to/command-line-quick-start/#initialize-the-repository 首先新建一个文件夹 然后在终端输入npm init -y命令进行初…

H5实现Web ECharts教程:轻松创建动态数据图表

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

智慧公厕:跨界融合,打造智慧城市新名片

随着城市化进程的不断加快,公共厕所建设成为一个亟待解决的问题。传统的公厕存在着管理繁琐、卫生差、服务不到位等一系列问题,与城市发展的节奏不协调。为此,推进新型智慧公厕建设成为了一个重要的解决方案。智慧公厕的建设需要推进技术融合…

InstructGPT的流程介绍

1. Step1:SFT,Supervised Fine-Tuning,有监督微调。顾名思义,它是在有监督(有标注)数据上微调训练得到的。这里的监督数据其实就是输入Prompt,输出相应的回复,只不过这里的回复是人工…

【暴刷力扣】11. 盛最多水的容器

11. 盛最多水的容器 题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xf…

会员中心微服务

文章目录 1.环境配置1.创建会员中心模块2.检查父子模块的pom.xml1.父模块注意:如果父模块中的依赖显示not found,原因是子模块并没有引用,不用在意 2.子模块 3.pom.xml 引入相关依赖(别忘记刷新maven)4.application.ym…

使用双异步后,从 191s 优化到 2s

使用双异步后,从 191s 优化到 2s 一般我会这样做: 通过POI读取需要导入的Excel; 以文件名为表名、列头为列名、并将数据拼接成sql; 通过JDBC或mybatis插入数据库; 操作起来,如果文件比较多&#xff0…

计算机网络:物理层下的传输媒体概览

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

手机实时监控电脑屏幕(手机可以看到电脑在干什么吗)

已经2024年了,假如你还在问我,手机可以看到电脑在干什么吗,有没有手机实时监控电脑屏幕的系统。 那么证明,你可能已经out 了。 现代科技告诉发展的态势下,这种技术已经很成熟了。 域智盾软件就可以实现这种效果↓我们…

HTML元素语义化补充之css函数(三)

文章目录 CSS中的函数css函数–varcss函数–calccss函数–blurcss函数–gradientlinear-gradient的使用 CSS中的函数 ◼ 在前面我们有使用过很多个CSS函数: 比如rgb/rgba/translate/rotate/scale等; CSS函数通常可以帮助我们更加灵活的来编写样式的值; ◼ 下面有几…

Spring Boot1

SpringBoot概述 Spring Boot是Spring提供的一个子项目,用于快速构建Spring应用程序 SpringBoot特性 起步依赖 本质上就是一个Maven坐标,整合了完成一个功能所需要的所有坐标 自动配置 遵循约定大于配置的原则,再boot程序启动后&#xff0…

【数据挖掘】实验5:数据预处理(1)

实验5:数据预处理(1) 一:实验目的与要求 1:熟悉和掌握数据预处理,学习数据清洗、数据集成、数据变换、数据规约、R语言中主要数据预处理函数。 二:实验内容 【缺失值分析】 第一步&#xff1…