【Redis】服务端高并发分布式结构演进之路
文章目录
- 前景概念
- 架构演进
现在说起服务端,经常听到的就是分布式、集群、微服务这类词汇,这些到底是什么呢?又是如何而来的呢?本篇博客记录相关学习
前景概念
在认识上述架构之前,需要有些前景知识
应用(Application) / 系统(System)
应用是为了完整一整套服务的一个程序,而系统是一组互相配合的程序群。
类比生活中的篮球队,中锋、后卫、自由人都是一个个应用,有各自的功能,而他们相互配合组成的队伍就是一个系统,有强大的功能
模块(Module) / 组件(Conponent)
当应用功能复杂时,可以从中分离职责,将其中具有清晰职责、内聚性强的部分抽离出来,单独为一部分
类比军队将人员分为突击小组、爆破小组、掩护小组、通信等
分布式(Distributed)
系统中的多个模块可以被部署在不同的服务器上,模块之前通过网络进行通信,这样的系统就被称为分布式系统
。
常见的有Web服务器和数据库分别工作在不同的服务器上,或者多个Web服务器部署在不同的服务器之上
集群(Cluster)
部署在多台服务器上的,为了实现特定目标的一个或多个组件,被称为集群
如多个MySQL工作在不同的服务器上,共同提供数据库服务
主(Master) / 从(Slave)
集群中,一般有一个程序需要承担更多的职责,称为主;其他承担附属职责的被称为从
比如MySQL集群中,外界只对一台主服务器上的MySQL进行操作(增/删/改),其他从服务器的MySQL只对主服务器作数据同步。当主服务器挂掉了,再找个从服务器顶上,变成主服务器
中间件(Middleware)
常常说“没有什么是加一层中间层解决不了的,如果有就再加一层”
中间件就是互通不同技术、工具和数据库之间的桥梁,用于相互通信
架构演进
单机架构
单机架构即业务处理,数据存储都在一台服务器上,甚至单线程。此时用户访问量不大,没有对性能、安全提出很高的要求,而且系统架构简单,运维起来成本不大
相关软件
Web服务器:Tomcat、Netty、Nginx、Apache等
数据库:MySQL、Oracle、PostgreSQL、SQL Server等
应用数据分离架构
数据持久化往往是比较耗时的,因为磁盘IO速度较慢,当系统的访问量逐步上升后,在业务处理的时候,不希望因为数据持久而拖慢了系统的性能,此时就可以把数据库服务独立出去,成为存储服务器,将业务和存储分离
应用服务器通过网络访问存储服务器,虽然网络通信也比较慢,但比磁盘IO还是要快一些的,而且分离后,数据存储并不会影响应用服务器的业务处理
应用服务集群架构
当系统访问量再次上升后,可能单台应用服务器已经无法满足需求,此时有两种方案:
垂直扩展
/ 纵向扩展 Scale Up:购买性能更优、价格更高的服务器水平扩展
/ 横向扩展 Scale Out:调整软件架构,增加应用服务器,将用户流量分摊到不同的应用服务器
集群就是水平扩展的产物,有了多台服务器,还需要对用户流量进行分流,常见的方法有:
- Round-Robin 轮询算法:公平地将请求依次分给不同的应用服务器。优点是不会出现有服务器没有分摊到流量的情况;缺点就是性能好的服务器没有完全发挥性能,因为是公平分配给差的和好的
- Weight-Round-Robin 轮询算法:为不同的服务器(比如性能不同) 赋予不同的权重(weight),解决方法1的缺点。但新的缺点是同一用户的多个请求可能分配到不同的服务器
- 一致哈希散列算法:通过计算用户的特征值(如IP地址)得到哈希值,根据哈希值做分发,这样同个用户的请求就可以被分配给同一个服务器。这就是专项客户经理服务
相关软件
负载均衡软件:Nginx、HAProxy、LVS、F5等
读写分离 / 主从分离架构
应用服务器扩展后,用户流量已经可以抗住了,但是数据库读写数据性能还不足以支撑,到一定程度后,数据的压力称为系统承载能力的瓶颈点。
如果像应用服务器一样进行纵向扩展,那么数据就会被分散,一致性无法保证。这就用到上述的主从思想
了
保留一个主数据库作为写入数据库,其他从数据库同步主数据库数据。因为二八定律:用户的操作20%是写,80%是读,写操作并不会那么频繁,所以可以将写数据请求全部交给主库处理,主库也一般是性能更强的服务器,读请求则分散到各个从库中,因为从库同步主库数据,所以也保证了一致性
应用服务器需要对读写请求做分离处理,可以利用一些数据库中间件,将请求分离的职责托管出去
相关软件
MyCat、TDDL、Amoeba、Cobar等类似数据库中间件等
冷热分离架构
引入缓存
随着访问量继续增大,发现业务中一些数据的读取频率远大于其他数据的读取频率。这部分数据被称为热点数据,与之相对的是冷数据。
为了提取读取的响应时间,可以将这些数据缓存,如此还减少了磁盘的读取开销
相关软件
Memcached、Redis等缓存软件
垂直分库
业务数据量再增大后,大量数据存储在同一个库中已经有些力不从心了,所以可以根据业务,对数据分别存储
相关软件
Greenplum、TiDB、Postgresql XC、HAWQ等,商用的如南大通用的GBase、华为的LibrA
微服务
随着业务发展,可以将业务分给不同的开发团队去维护,每个团队独立实现自己的微服务,然后互相之间对数据的直接访问进行隔离
以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
相关文章:
【Redis】服务端高并发分布式结构演进之路
文章目录 前景概念架构演进 现在说起服务端,经常听到的就是分布式、集群、微服务这类词汇,这些到底是什么呢?又是如何而来的呢?本篇博客记录相关学习 前景概念 在认识上述架构之前,需要有些前景知识 应用(Applicatio…...
【SpringMVC文件上传终极指南:从基础配置到云存储集成】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
windows安装docker教程
1、参考博客 - 安装教程: https://blog.csdn.net/GoodburghCottage/article/details/131413312 - docker详解: https://www.cnblogs.com/yaok430/p/16738002.html 2、设计目标 - 提供一个简单的应用程序打包工具,可以将应用程序…...
基于物理信息的神经网络在异常检测Anomaly Detection中的应用:实践指南
物理信息神经网络(PINNs)代表了一种令人兴奋的新建模范式,这种范式正在各行各业迅速崭露头角。 PINNs 最有前景的应用之一是复杂物理系统中的异常检测Anomaly Detection。这一应用尤其值得关注,因为它解决了传统机器学习方法在实践中一直难以克服的几个关键痛点。 在这篇…...
Spark阶段学习总结
一、Spark 是什么 Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎,也可说是分布式内存迭代计算框架。 二、Spark 四大特点 速度快(内存计算) 易于使用 通用性强 运行方式多 三、与hadoop的核心差异 数据通信…...
统信操作系统使用默认yum源安装 Docker 的踩坑
事件 在使用 docker 运行 es 的时候,es 报错 ulimit 的值为1024,但是服务器已经设置成了65535。 排查结果 在装完 docker 之后发现 docker systemd 的启动命令引用了 /etc/sysconfig/docker 这个文件里面设定了 ulimit 为 1024 如下: [ro…...
HK1RBOX K8 RK3528 Via浏览器_插件_央视频的组合验证(失败)
文章目录 前言软件和设备信息过程方案插件代码 运行效果问题 前言 实践的结果为失败,设备性能不满足, 无法流畅播放视频 软件和设备信息 via浏览器, 版本4.9.1HK1RBOX K8 RK3528设备win10, 逍遥游安卓虚拟机(开发插件)央视频官网(不是cctv那个) 过程 方案 浏览器设置央视…...
XMOS直播声卡——可支持实时音频DSP处理的低延迟音频方案
对于游戏玩家和短视频直播工作者来说,声卡不可或缺。它除了能将计算设备的数字信号转换为声音信号,还能够提供各种逼真的或者定制的3D音效,提升游戏的沉浸感,特别是在大型开放联网游戏或射击游戏中,声音细节直接影响玩…...
DB2备份恢复操作文档及其注意事项
备份BACKUP 备份语法: 在线备份:db2 backup db MYDB online to /tmp/backup_db2_20250326 离线备份:db2 backup db MYDB to /tmp/backup_db2_20250326 需要注意,在执行在线备份时需要开启归档,即执行db2 get db cfg f…...
flask uri 怎么统一加前缀
在 Flask 中为 URI 统一添加前缀,可以通过多种方式实现,下面为你详细介绍几种常见的方法。 方法一:使用 Blueprint(推荐) Blueprint(蓝图)是 Flask 中组织路由的一种方式,它可以将…...
创建一个springboot的项目-简洁步骤
1. 打开IDEA,新建项目: 2. 设置项目的基本信息,其中注意jdk版本要与Java版本匹配,这里使用jdk17和java17 3. 选择SpringBoot版本,选择项目依赖(依赖也可以创建完项目后在pom文件中修改) 这里选…...
杭电oj(1008、1012、1013、1014、1017)题解
目录 编辑 1008 题目 思路 代码 1012 题目 思路 代码 1013 题目 思路 代码 1014 题目 思路 代码 1017 题目 思路 处理每组测试数据 计算满足条件的整数对数量 代码 1008 题目 思路 s a[0];:初始化 s 为数组的第一个元素,即电…...
VRRP与BFD在冗余设计中的核心区别:从“备用网关”到“毫秒级故障检测”
(本文完全由deepseek生成,特此声明) 在网络冗余设计中,VRRP(Virtual Router Redundancy Protocol)和BFD(Bidirectional Forwarding Detection)是两种关键协议,但它们的定…...
蓝桥杯 2. 确定字符串是否是另一个的排列
确定字符串是否是另一个的排列 原题目链接 题目描述 实现一个算法来识别一个字符串 str2 是否是另一个字符串 str1 的排列。 排列的解释如下:如果将 str1 的字符拆分开,重新排列后再拼接起来,能够得到 str2,那么就说字符串 st…...
巧记英语四级单词 Unit6-上【晓艳老师版】
master n.雇主,主人 发音“骂死他”,骂死谁?雇主,主人masterpiece n.代表作,名著 主人的作品就是名著deputy n.副手 de表示往下,put放,往下放给副手appeal n.要求,呼吁 一再的要求剥…...
Java求职面试:从Spring Boot到微服务架构的全面解析
场景:互联网大厂Java面试 在某互联网大厂的面试房间里,面试官李老师正准备面试一位传说中的“水货程序员”——谢飞机。 第一轮提问:基础框架与工具 李老师: “谢飞机,你好。我们先聊聊Spring Boot吧。你能简单说说…...
来自B站AIGC科技官的“vLLM简介“视频截图
来自B站AIGC科技官的"vLLM简介"视频截图 0. 引言1. vLLM简介2. vLLM启动日志解析3. vLLM压力测试4.vLLM分布式推理 0. 引言 这篇文章主要记录了B站AIGC科技官的"vLLM简介"视频截图。 1. vLLM简介 笔记 From Up主: KV Cache的大小与序列长度的…...
CSS元素动画篇:基于当前位置的变换动画(四)
基于当前位置的变换动画(四) 前言透明效果类元素动画闪烁动画效果效果预览代码实现 淡入动画效果效果预览代码实现 淡出动画效果效果预览代码实现 结语 前言 CSS元素动画一般分为两种:一种是元素基于当前位置的变换动画,通过不明…...
如何打包一个QT 程序
如何打包一个QT 程序 找到 vcvarsall.bat 文件 打开 图中框选的命令行 输入命令 D:\MicrosoftVisualStdio2022\Community\VC\Auxiliary\Build\vcvarsall.bat x64命令行进入待打包的目录,只留下一个exe 文件即可 windeployqt 程序名打包完成...
【vLLM 学习】CPU 离线处理
vLLM 是一款专为大语言模型推理加速而设计的框架,实现了 KV 缓存内存几乎零浪费,解决了内存管理瓶颈问题。 更多 vLLM 中文文档及教程可访问 →https://vllm.hyper.ai/ 源代码:vllm-project/vllm from vllm import LLM, SamplingParams# S…...
德州仪器(TI)—TDA4VM芯片详解—目录
写在前面 本系列文章主要讲解德州仪器(TI)TDA4VM芯片的相关知识,希望能帮助更多的同学认识和了解德州仪器(TI)TDA4VM芯片。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 本篇是此系列的目录…...
深入解读:2025 数字化转型管理 参考架构
《GB/T 45341—2025 数字化转型管理 参考架构》规定了数字化转型参考架构,涵盖主要视角、过程方法、发展阶段与水平档次。主要视角包含发展战略、业务创新转型等 5 个方面,明确任务及关联; 过程方法基于 “策划 — 支持、实施与运行 — 评测 …...
dma_buf学习记录之二核心接口
dma_buf学习记录之一基础知识-CSDN博客 本章学习linux\include\linux\dma-buf.h dma-buf.h 是 Linux 内核中用于实现 DMA 缓冲区共享框架的核心头文件。它定义了 dma-buf 子系统的主要数据结构和操作接口,允许设备驱动程序之间共享缓冲区,并支持异步硬件…...
java Optional
我还没用过java8的一些语法,有点老古董了,记录下Optional怎么用。 从源码看,Optional内部持有一个对象, 有一些api对这个对象进行判空处理。 静态方法of ,生成Optional对象, 但这个value不能为空&#…...
一文说清Token这个大模型中的数字乐高积木的作用
第一章:语言解码的底层逻辑 1.1 人类大脑的"偷懒智慧" 想象你走在街头,突然看到"星巴克"的招牌。你的大脑不会逐个分析"星""巴""克"三个字的笔画,而是瞬间将其识别为一个整体。这种将高…...
界面打印和重定向同时实现
在 Shell 中,若要让程序运行时既在界面打印输出内容,又将其重定向到文件,可使用tee命令达成此目的。tee命令的作用是从标准输入读取数据,然后将这些数据同时输出到标准输出(也就是屏幕)和指定的文件中。 基…...
最佳实践-HENGSHI SENSE 可视化创作中如何引入数据集市的成果
HENGSHI SENSE 提供了 中心化的数据集市管理 ,即数据集市的功能: 数据集市,支持层级结构的数据集市建立,按用户,用户组,组织架构授权,将数据分配到合适的人。支持统一的计算字段,计算…...
YOLO旋转检测模型简化
YOLO模型作为单阶段目标检测方法的代表,其已经应用在多个领域。 但要想将其部署到单片机上,其模型的大小需要受到极大的限制,而采用剪枝的方式模型体积下降效果有限,因此我们直接修改网络结构,将其进行删减,…...
JavaScript之Webpack的模块加载机制
目录 目标 概述 IIFE语法分析 无参数的IIFE 有参数的IIFE Webpack语法分析 基本结构 缓存加载过的模块 ES5的格式 ES6的格式 目标 本文站在js逆向的角度总结知识,所以不讲解Webpack打包技术,只分析模块加载机制。 概述 Webpack Webpack是一个…...
深度解析如何将图像帧和音频片段特征高效存储到向量数据库 Milvus
在视频和音频分析领域,如何高效地处理和检索海量的多模态数据一直是一个重大挑战。本文将深度解析一种行之有效的解决方案:利用 OpenCV 和音频处理库提取数据特征后,将这些特征向量存储到 Milvus 向量数据库,以实现高效的相似性检…...
《Vue3学习手记6》
组件通信 props props 可以父传子,也可以子传父 1.父传子 子组件: <template><div class"child"><h2>子组件</h2><h3>礼物:{{ gift }}</h3><h3 v-show"zichan">父亲给我的…...
抗体品牌推荐
默克超级英雄抗体的披荆斩棘之路 自保罗埃尔利希1891年10月提出“Antikrper”一词后,科研人逐渐意识到抗体(Antibody)可以应用于各种类型的研究中。 从结构、功能、人体免疫应答……到基因治疗、药物研究,抗体的身影无处不在。值…...
生成式人工智能认证(GAI认证)有什么用?
在人工智能的浪潮中,我们正站在一个前所未有的十字路口。有人将生成式人工智能(Generative AI)视为技术迭代的工具,有人将其视为颠覆行业的“黑匣子”,而更少有人意识到:它正在重新定义人类与技术的共生关系。当AI不再局限于辅助人类,而是开始参与创作、决策甚至伦理判断…...
全新升级:BRAV-7601-T003高性能无风扇AI边缘计算系统,助力智能未来!
在数字化与智能化飞速发展的今天,AI边缘计算正成为各行各业的核心驱动力。BRAV-7601作为一款高性能无风扇AI边缘计算系统,凭借其强大的硬件配置与丰富的扩展能力,为车路协同、特种车辆车载、机器视觉、医疗影像等领域提供了卓越的解决方案。最…...
基于c++的LCA倍增法实现
原理就不写了,自己找b站视频学习 #include <iostream> #include <vector> #include <cmath> #include <algorithm> using namespace std; const int MAXN 100005; // 最大节点数 const int MAXLOG 20; // 最大对数深度 vector<…...
探索大语言模型(LLM):语言模型从海量文本中无师自通
文章目录 引言:当语言模型学会“自己教自己”一、自监督学习:从“无标签”中挖掘“有监督”信号二、语言模型的自监督训练范式:两大经典路径1. 掩码语言模型(Masked Language Modeling, MLM)——以BERT为例2. 自回归语…...
大语言模型 - 运行、微调的显存计算详解与优化 全量微调、LoRA 优化策略
写在前面 随着Transformer架构的大语言模型(LLM)不断发展,其参数规模也在迅速增加。无论是进行模型推理还是微调训练,GPU显存消耗都是开发和应用LLM时的重要考量。本文将详细探讨大模型运行(推理)与微调时…...
【音视频】视频解码实战
FFmpeg流程 从本地读取YUV数据编码为h264格式的数据,然后再存⼊到本地,编码后的数据有带startcode与FFmpeg 示例⾳频编码的流程基本⼀致。 函数说明 avcodec_find_encoder_by_name:根据指定的编码器名称查找注册的编码器。avcodec_alloc_co…...
计算机网络学习笔记 4-6章
第 4 章 网络层 【考纲内容】 (一)网络层的功能 异构网络互连;路由与转发;SDN 基本概念;拥塞控制 (二)路由算法 静态路由与动态路由;距离 - 向量路由算法࿱…...
游戏哪些接口会暴露源IP?_深度解析服务器通信安全隐患
一、用户认证体系中的IP泄露陷阱 在游戏登录验证环节,采用明文传输的HTTP协议接口会将客户端IP直接暴露在TCP握手阶段。某头部MOBA游戏曾因使用HTTP Basic认证方式,导致黑客通过抓取三次握手数据包获取服务器真实IP。游戏行业权威测试显示,使…...
树莓派学习专题<11>:使用V4L2驱动获取摄像头数据--启动/停止数据流,数据捕获,缓存释放
树莓派学习专题<11>:使用V4L2驱动获取摄像头数据--启动/停止数据流,数据捕获,缓存释放 1. 启动和停止数据流2. 捕获数据3. 释放缓存 1. 启动和停止数据流 使用命令 VIDIOC_STREAMON 启动摄像头数据流,使用…...
adb push 报错:CreateProcess failure, error 123
客户使用adb push 可执行程序的时候报错如下所示 原因:文件目录里边带中文导致 解决方法:将文件目录里中文改成英文就好了...
【实战篇】数字化打印——打印格式设计器的功能说明
前言 myBuilder内置了覆盖丰富场景的打印格式设计器,效果统一,功能完善。 设计器一:小票 用于设计小票、水单等滚筒纸张的场景,例如:超市购物小票 主要功能 打印格式的保存、下载、上传设计时功能:撤销…...
【数据挖掘】时间序列预测-时间序列预测策略
时间序列预测策略 (1)单步预测与多步预测(2)直接多步预测(3)递归多步预测(4)直接递归的混合预测(5)多输入多输出预测 (1)单步预测与多…...
京东商品详情数据爬取难度分析与解决方案
在当今数字化商业时代,电商数据对于市场分析、竞品研究、价格监控等诸多领域有着不可估量的价值。京东,作为国内首屈一指的电商巨头,其商品详情页蕴含着海量且极具价值的数据,涵盖商品价格、库存、规格、用户评价等关键信息。然而…...
【Linux】线程
一.线程概念 我们在学习进程的时候已经知道了,进程内核数据结构pcb自己的代码和数据。那么单单一个task_struct是什么呢? 我们将单个的task_struct叫做轻量级进程,而这个轻量级进程也叫做线程。以往我们在了解进程的时候,一个进…...
WPF-遵循MVVM框架创建图表的显示【保姆级】
文章速览 1、技术栈实现步骤1、创建WPF工程项目2、引入框架 Caliburn.Micro、数据可视化库ScottPlot.WPF3、创建文件夹,并创建相应的View & ViewModel4、创建启动类5、将启动类设置为启动项6、编写View7、编写VM8、将VM和View中的图表进行绑定9、备注 示例效果 …...
深入详解人工智能数学基础—概率论-KL散度在变分自编码器(VAE)中的应用
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...
《代码整洁之道》第9章 单元测试 - 笔记
测试驱动开发 (TDD) 是一种编写整洁代码的“规程”或“方法论”,而不仅仅是测试技术。 JaCoCo 在运行测试后生成详细的覆盖率报告的工具, maven 引用。 测试驱动开发 测试驱动开发(TDD)是什么? TDD 不是说写完代码…...
每日c/c++题 备战蓝桥杯(P2392 kkksc03考前临时抱佛脚)
【题解】期末考试抱佛脚最短时间(动态规划 | 二进制背包) 题目链接 题目背景 kkksc03 的大学生活非常颓废,临近期末考试才开始疯狂复习。他有 4 门科目需要复习,每一科都有若干道题目,每道题目需要一定的时间完成。…...