seo移动网站页面怎么做/怎么制作网站平台

seo移动网站页面怎么做,怎么制作网站平台,怎么建设网站啊,理财网站建设的毕业论文文章目录 是什么能干嘛集群算法-分片-槽位slotredis集群的槽位slotredis集群的分片分片槽位的优势slot槽位映射——业界的3种解决方案小厂:哈希取余分区中厂:一致性哈希算法分区大厂:哈希槽分区 面试题:为什么 Redis 集群的最大槽…

文章目录

    • 是什么
    • 能干嘛
    • 集群算法-分片-槽位slot
      • redis集群的槽位slot
      • redis集群的分片
      • 分片+槽位的优势
      • slot槽位映射——业界的3种解决方案
        • 小厂:哈希取余分区
        • 中厂:一致性哈希算法分区
        • 大厂:哈希槽分区
      • 面试题:为什么 Redis 集群的最大槽数是16384个?
    • 集群环境案例步骤
    • 集群常用操作命令和CRC16算法分析

是什么

  • 定义:由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展。每个复制集只负责存储整个数据集 的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集。
  • 官网:https://redis.io/docs/reference/cluster-spec/
  • 一图

在这里插入图片描述

  • 一句话:Redis集群是一个提供在多个Redis节点间共享数据的程序集,Redis集群可以支持多个master
  • Redis 集群是 Redis 提供的分布式解决方案,用于管理大规模数据集和高并发访问。它通过分片(sharding)将数据分布在多个节点上,提供高可用性和扩展性。

在这里插入图片描述

能干嘛

  • Redis集群支持多个master,每个master又可以挂载多个slave
    • 读写分离
    • 支持数据的高可用
    • 支持海量数据的读写存储操作
  • 由于Cluster自带Sentinel的故障转移机制,内置了高可用的支持,无需再去使用哨兵功能
  • 客户端与Redis的节点连接,不再需要连接集群中所有的节点,只需要任意连接集群中的一个可用节点即可
  • 槽位slot负责分配到各个物理服务节点,由对应的集群来负责维护节点、插槽和数据之间的关系

集群算法-分片-槽位slot

  • 官网出处

在这里插入图片描述
在这里插入图片描述

redis集群的槽位slot

  • Redis集群的数据分片
  • Redis集群没有使用一致性hash,而是引入了哈希槽的概念。
    • 一致性哈希是一种特殊的哈希算法,用于解决传统哈希(如取模哈希)在分布式系统中的节点扩容和缩容问题。它将整个哈希值空间组织成一个虚拟的环状结构(哈希环),数据和服务器(节点)都映射到这个哈希环上,以实现数据的分布。
    • 哈希槽主要用于 Redis Cluster 这样的分布式数据库系统,用于数据分片和管理。Redis Cluster 采用16384个哈希槽,所有 key 都会被映射到 0~16383 之间的某个哈希槽中。

在这里插入图片描述

  • Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽
  • 举个例子,比如当前集群有3个节点,那么:

在这里插入图片描述

redis集群的分片

  • 分片是什么:使用Redis集群时我们会将存储的数据分散到多台redis机器上,这称为分片。简言之,集群中的每个Redis实例都被认为是整个数据的一个分片。
  • 如何找到给定key的分片:为了找到给定key的分片,我们对key进行CRC16(key)算法处理并通过对总分片数量取模。然后,使用确定性哈希函数,这意味着给定的key将多次始终映射到同一个分片,我们可以推断将来读取特定key的位置。

分片+槽位的优势

  • 最大优势:方便扩容/缩容和数据分派查找
  • 这种结构很容易添加或者删除节点,比如如果我想添加个节点D,我需要从节点A,B,C中得部分槽位到D上。如果我想移除节点A,需要将A中的槽移动到B和C节点上,然后将没有任何槽的节点从集群中移除即可。
  • 由于一个结点将哈希槽移动到另一个节点不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态。
  • 扩容时,Redis 不是按顺序转移槽位,而是按节点的负载来选择迁移策略。目的是让槽位分布尽量均衡,而不是严格按 A ➝ B ➝ C ➝ D 顺序迁移。直接从 A、B 迁移给 D,减少额外的中间数据传输,提高效率。这样可以最小化数据重分布的影响,确保集群稳定运行。

slot槽位映射——业界的3种解决方案

小厂:哈希取余分区

在这里插入图片描述

  • 2亿条记录就是2亿个k,v,我们单机承受不了,必须要分布式多机,假设有3台机器构成一个集群,用户每次读写操作都是根据公式:hash(key) % N个机器台数,计算出哈希值,用来决定数据映射到哪一个节点上。
  • 优点:简单粗暴,直接有效,只需要预估好数据规划好节点,例如3台、8台、10台,就能保证一段时间的数据 支撑。使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求 (并维护这些请求的信息), 起到负载均衡+分而治之的作用。
  • 缺点:原来规划好的节点,进行扩容或者缩容就比较麻烦了,不管扩缩,每次数据变动导致节点有变动,比如第一次set k1 v1在第一台机器上,第二次我扩容后要去修改k1的值,set k1 v2,但是这个时候落在的扩容后的那台机器上,映射关系需要重新进行计算,在服务器个数固定不变时没有问题,如果需要弹性扩容或故障停机的情况下,原来的取模公式就会发生变化: Hash(key)/3会变成Hash(key) /?。此时地址经过取余运算的结果将发生很大变化,根据公式获取的服务器也会变得不可控。 某个redis机器宕机了,由于台数数量变化,会导致hash取余全部数据重新洗牌。
中厂:一致性哈希算法分区
  • 是什么:一致性Hash算法背景是在1997年由麻省理工学院提出的,设计目标是为了解决分布式缓存数据变动和映射问题,某个机器宕机了,分母数量改变了,自然取余数不行了

  • 能干嘛:提出一致性Hash解决方案。目的是当服务器个数发生变动时,尽量减少影响客户端到服务器的映射关系

  • 三大步骤:

    1. 算法构建一致性哈希环

      • 一致性哈希算法必然有个hash函数并按照算法产生hash值,这个算法的所有可能哈希值会构成一个全量集,这个集合可以成为一个hash空间[ 0 0 0 2 32 − 1 2^{32}-1 2321],这个是一个线性空间,但是在算法中,我们通过适当的逻辑控制将它首尾相连( 0 = 2 32 0 = 2^{32} 0=232),这样让它逻辑上形成了一个环形空间。
      • 它也是按照使用取模的方法,前面笔记介绍的节点取模法是对节点(服务器)的数量进行取模。而一致性Hash算法是对 2 32 2^{32} 232取模,简单来说,一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间为 0 ~ 2 32 − 1 0~2^{32}-1 02321(即哈希值是一个32位无符号整形),整个哈希环如下图:整个空间按顺时针方向组织,圆环的正上方的点代表0,O点右侧的第一个点代表1,以此类推,2、3、4、……直到 2 32 − 1 2^{32}-1 2321,也就是说0点左侧的第一个点代表 2 32 − 1 2^{32}-1 2321,0和 2 32 − 1 2^{32}-1 2321在零点中方向重合,我们把这个由 2 32 2^{32} 232个点组成的圆环称为Hash环。
        在这里插入图片描述
    2. redis服务器IP节点映射

      • 将集群中各个IP节点映射到环上的某一个位置。
      • 将各个服务器使用Hash进行一个哈希,具体可以选择服务器的IP或主机名作为关键字进行哈希,这样每台机器就能确定其在哈希环上的位置。假如4个节点NodeA、B、C、D,经过IP地址的哈希函数计算(hash(ip)),使用IP地址哈希后在环空间的位置如下:在这里插入图片描述
    3. key落到服务器的落键规则

      • 当我们需要存储一个kv键值对时,首先计算key的hash值,hash(key),将这个key使用相同的函数Hash计算出哈希值并确定此数据在环上的位置,从此位置沿环顺时针“行走”,第一台遇到的服务器就是其应该定位到的服务器,并将该键值对存储在该节点上。
      • 如我们有Object A、 Object B、 Object C. object D四个key数据对象,经过哈希计算后,在环空间上的位置如下:根据一致性Hash算法,数据A会被定为到Node A上,B被定为到Node B上,C被定为到Node C上,D被定为到Node D上。在这里插入图片描述
  • 优点:

    • 一致性哈希算法的容错性:

      • 假设Node C宕机,可以看到此时对象A、B、D不会受到影响。
      • 一般的,在一致性Hash算法中,如果一台服务器不可用,则受影响的数据仅仅是此服务器到其环空间中前一台服务悉(即沿着逆时针方向行走遇到的第一台服务器)之间数据,其它不会受到影响。
      • 简单说,就是C挂了,受到影响的只是B、C之间的数据且这些数据会转移到D进行存储。在这里插入图片描述
    • 一致性哈希算法的扩展性:

      • 数据量增加了,需要增加一台节点NodeX,X的位置在A和B之间,那收到影响的也就是A到X之间的数据,重新把A到X的数据录入到X上即可,不会导致hash取余全部数据重新洗牌。在这里插入图片描述
  • 缺点:一致性哈希算法的数据倾斜问题,容易头重脚轻。

    • 一致性Hash算法在服务节点太少时,容易因为节点分布不均匀而造成数据倾斜(被缓存的对象大部分集中缓存在某一台服务器上)问题
    • 例如系统中只有两台服务器:在这里插入图片描述
  • 小总结

    • 为了在节点数目发生改变时尽可能少的迁移数据
    • 将所有的存储节点排列在收尾相接的Hash环上,每个key在计算Hash后会顺时针找到临近的存储节点存放。而当有节点加入或退出时仅影响该节点在Hash环上顺时针相邻的后续节点。
    • 优点:加入和删除节点只影响哈希环中顺时针方向的相邻的节点,对其他节点无影响。
    • 缺点:数据的分布和节点的位置有关,因为这些节点不是均匀的分布在哈希环上的,所以数据在进行存储时达不到均匀分布的效果。
大厂:哈希槽分区
  • 是什么?HASH_SLOT = CRC16(key) mod 16384

    • 为什么出现?
      • 上面提到,一致性哈希算法会存在数据倾斜的问题
      • 哈希槽实质就是一个数组,数组 [ 0 0 0 2 14 − 1 2^{14} - 1 2141 ] 形成hash slot空间。 2 14 = 16384 2^{14} = 16384 214=16384
    • 能干什么?
      • 解决均匀分配的问题,在数据和节点之间又加入了一层,把这层称为哈希槽(slot),用于管理数据和节点之间的关系,现在就相当于节点上放的是槽,槽里面放的是数据。在这里插入图片描述
      • 槽解决的是粒度问题,相当于把粒度变大了,这样便于数据移动。哈希解决的是映射问题,使用key的哈希值来计算所在的槽,便于数据分配
    • 多少个hash槽
      • 一个集群只能有16384个槽,编号0-16383( 0 0 0- 2 14 − 1 2^{14} - 1 2141)。这些槽会分配给集群中的所有主节点,分配策略没有要求。
      • 集群会记录节点和槽的对应关系,解决了节点和槽的关系后,接下来就需要对key求哈希值,然后对16384取模,余数是几key就落入对应的槽里。
      • HASH_SLOT = CRC16(key) mod 16384。以槽为单位移动数据,因为槽的数目是固定的,处理起来比较容易,这样数据移动问题就解决了。
  • 哈希槽计算

Redis集群中内置了16384个哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。当需要在Redis集群中放置一个key-valuel时,redis先对key使用crc16算法算出一个结果然后用结果对16384求余数[ CRC16(key) % 16384],这样每个key都会对应一个编号在0-16383之间的哈希槽,也就是映射到某个节点上。如下代码,key之A、B在Node2, key之C落在Node3上

在这里插入图片描述

面试题:为什么 Redis 集群的最大槽数是16384个?

集群环境案例步骤

集群常用操作命令和CRC16算法分析

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

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

相关文章

城市地质安全专题连载⑧ | 强化工程地质安全保障力度,为工程项目全栈护航

作者 | 徐海洋、孙美琴 在城市化进程日益加速的今天,城市地质安全问题日益凸显,成为制约城市可持续发展的关键因素之一。从隧道掘进中的突发灾害,到高层建筑地基的稳定性挑战,再到城市地下空间的开发利用风险,地质安全…

FFMPEG利用H264+AAC合成TS文件

本次的DEMO是利用FFMPEG框架把H264文件和AAC文件合并成一个TS文件。这个DEMO很重要,因为在后面的推流项目中用到了这方面的技术。所以,大家最好把这个项目好好了解。 下面这个是流程图 从这个图我们能看出来,在main函数中我们主要做了这几步&…

sqli-lab靶场学习(七)——Less23-25(关键字被过滤、二次注入)

前言 之前的每一关,我们都是在末尾加上注释符,屏蔽后面的语句,这样我们只要闭合了区间之后,差不多就是为所欲为的状态。但如果注释符不生效的情况下,又该如何呢? Less23(注释符被过滤&#xff…

Self-Supervised Prompt Optimization

论文:[2502.06855] Self-Supervised Prompt Optimization 仓库:GitHub - Airmomo/SPO: SPO | Self-Supervised Prompt Optimization 自监督提示优化(SPO) 创新点 成对比较评估 输出指导优化 全文介绍 背景 随着大语言模型…

AI-Ollama本地大语言模型运行框架与Ollama javascript接入

1.Ollama Ollama 是一个开源的大型语言模型(LLM)平台,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 Ollama 提供了一个简单的方式来加载和使用各种预训练的语言模型,支持文本生成、翻译、代码编写、问答等多种…

分布式多卡训练(DDP)踩坑

多卡训练最近在跑yolov10版本的RT-DETR,用来进行目标检测。 单卡训练语句(正常运行): python main.py多卡训练语句: 需要通过torch.distributed.launch来启动,一般是单节点,其中CUDA_VISIBLE…

LLM大型语言模型(一)

1. 什么是 LLM? LLM(大型语言模型)是一种神经网络,专门用于理解、生成并对人类文本作出响应。这些模型是深度神经网络,通常训练于海量文本数据上,有时甚至覆盖了整个互联网的公开文本。 LLM 中的 “大” …

蓝桥杯备考:动态规划dp入门题目之数字三角形

依然是按照动态规划dp的顺序来 step1:定义状态表示 f[i][j]表示的是到,j这个坐标的结点时的最大权值 step2: 定义状态方程 i,j坐标可能是从i-1 j-1 到i,j 也可能是从i-1 j到 i,j 所以状态方程应该是 f[i][j] max(f[i-1][j-1],f[i-1][j]) a[i][j] step3:初始化…

HarmonyOS NEXT开发进阶(十一):应用层架构介绍

文章目录 一、前言二、应用与应用程序包三、应用的多Module设计机制四、 Module类型五、Stage模型应用程序包结构六、拓展阅读 一、前言 在应用模型章节,可以看到主推的Stage模型中,多个应用组件共享同一个ArkTS引擎实例;应用组件之间可以方…

deepseek+mermaid【自动生成流程图】

成果: 第一步打开deepseek官网(或百度版(更快一点)): 百度AI搜索 - 办公学习一站解决 第二步,生成对应的Mermaid流程图: 丢给deepseek代码,或题目要求 生成mermaid代码 第三步将代码复制到me…

Solon AI —— RAG

说明 当前大模型与外部打交道的方式有两种,一种是 Prompt,一种是 Fuction Call。在 Prompt 方面,应用系统可以通过 Prompt 模版和补充上下文的方式,调整用户输入的提示语,使得大模型生成的回答更加准确。 RAG RAG &…

STM32——USART—串口发送

目录 一:USART简介 二:初始化USART 1.开启时钟 2.代码 三:USART发送数据 1.USART发送数据函数 2.获取标志位的状态 3.代码 4.在main.c内调用 5.串口调试 1.串口选择要与设备管理器中的端口保持一致 2.波特率、停止位等要与前面…

基于SpringBoot的在线骑行网站的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

通义万相2.1:开启视频生成新时代

文章摘要:通义万相 2.1 是一款在人工智能视频生成领域具有里程碑意义的工具,它通过核心技术的升级和创新,为创作者提供了更强大、更智能的创作能力。本文详细介绍了通义万相 2.1 的背景、核心技术、功能特性、性能评测、用户反馈以及应用场景…

3.3.2 Proteus第一个仿真图

文章目录 文章介绍0 效果图1 新建“点灯”项目2 添加元器件3 元器件布局接线4 补充 文章介绍 本文介绍:使用Proteus仿真软件画第一个仿真图 0 效果图 1 新建“点灯”项目 修改项目名称和路径,之后一直点“下一步”直到完成 2 添加元器件 点击元…

极狐GitLab 正式发布安全版本17.9.1、17.8.4、17.7.6

本分分享极狐GitLab 补丁版本 17.9.1、17.8.4、17.7.6 的详细内容。这几个版本包含重要的缺陷和安全修复代码,我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS,技术团队已经进行了升级,无需用户采取任何…

QT——对象树

在上一篇博客我们已经学会了QT的坏境安装以及打印一个hello world,但是如果有细心的朋友看了代码,就会发现有一个严重的问题,从C语法看来存在内存泄漏。 上面的代码实际上并没有发送内存泄漏,是不是觉得有点奇怪?大家有…

深度学习之-“深入理解梯度下降”

梯度下降是机器学习和深度学习的核心优化算法,几乎所有的模型训练都离不开它。然而,梯度下降并不是一个单一的算法,而是一个庞大的家族,包含了许多变体和改进方法。本文将从最基础的梯度下降开始,逐步深入学习&#xf…

力扣-字符串

字符串不能被修改,所以如果有想修改字符串的行为,需要转换为StringBuilder StringBuilder里也有很多封装方法String没有,比如reverse() StringBuilder sb new StringBuilder();// 添加字符串 sb.append("Hello"); sb.append(&qu…

Ollama+Deepseek-R1+Continue本地集成VScode

一、OllamaDeepseek-R1Continue本地集成VScode 1)安装前知识点 Continue 介绍 详情可参照官网: continue官网 Continue 是 Visual Studio Code 和 JetBrains 中领先的开源 AI 代码助手。 •在侧边栏中进行聊天以理解和迭代代码。 •自动补全&#…