当前位置: 首页 > news >正文

美团KV存储squirrel和Celler学习

文章目录

  • 美团在KV存储squirrel优化和改进
    • 在水平方向
      • 1、对Gossip协议进行优化
    • 在垂直扩展方面
      • 1、forkless RDB数据复制优化
      • 2、使用多线程,充分利用机器的多核能力
    • 在高可用方面
  • 美团持久化kv存储celler优化和改进
    • 水平扩展优化
      • 1、使用bulkload进行数据导入
      • 2、线程模型调度优化
  • 知识点解释
    • 1、对于哨兵架构的redis虽然也使用一致性hash进行扩所容,但为什么有可能在扩缩容导致数据丢失?
    • 2、为什么对于kv存储服务,当集群数量达到一定规模之后,再水平扩容会遇到哪些问题,如何解决?
    • 3、mget操作在大集群中可能会有木桶效应,如何解决?
    • 4、什么是Gossip协议,应用场景和优缺点分别是什么?
  • Reference

美团在Redis Cluster和阿里的开源项目Tair基础上,分别自研开发了Squirrel和Celler两款KV存储系统。Squirrel全内存、高吞吐和低延迟,适合业务的数据量小,对延迟敏感,建议用 Squirrel ;Celler持久化、大容量、数据高可靠,适合数据量大,对延迟不是特别敏感,成本更低的Cellar 。

美团在KV存储squirrel优化和改进

在这里插入图片描述

KV存储主要的两个问题是,数据量增后的扩张性和随着节点增加后的可用性如何保证。squrriel分别在水平方向扩展和垂直方向扩展优化。

在水平方向

1、对Gossip协议进行优化

使用markle tree 对每个节点的数据进行摘要,将集群中Gossip协议通信传输数据量减少了90%以上。同时使用单独的心跳线程更新拓扑结构元数据,对于工作线程只对拓扑元数据进行读,可以做到无锁读,gosssip的请求处理对业务请求完全没有影响。

在垂直扩展方面

1、forkless RDB数据复制优化

Redis在的RDB过程中是通过系统的fork()函数创建一个子进程,创建的子进程拥有和父进程相同的资源和数据(系统的copy on write思想),然后让子进程对拥有的内存数据进行持久化。fork过程非常快,通常在秒级别完成,但对于一个通常几十毫秒KV系统来说也是影响很大的,尤其要求响应非常高的系统往往也是不可以接受。forkless 不需要创建子进程,使用工作线程将每次数据变成写到一个持久化队列里面,实时同步对数据的变更,相比fork好处是,即使在RDB过程中,也不会阻塞工作线程,但如果变更数据很多时,需要占用工作工作线程时间,如果有大kv需要复制,可能也会造成单个用户请求耗时增加。

2、使用多线程,充分利用机器的多核能力

squirrle的多线程方案吞吐比社区IO的多线程提升70%,相比社区单线程提升3倍多,具体原因没有太理解。

在高可用方面

多机房部署进行融灾,但为了降低多机房部署维护的难度,并同时实现为存活节点过半选主过程,增加不存储数据的见证节点单独部署在一个机房。对于跨地域容灾,使用双向数据同步,对数据双向同步遇到的循环复制和数据冲突问题,分别使用同步数据带上clusterId和基于时间戳的last write win策略进行解决。

美团持久化kv存储celler优化和改进

在这里插入图片描述
OB:只提供客户端集群节点元数据查询功能,可以水平扩展
ZooKeeper:分布式仲裁
Master:集群节点的管理
Slave:Master自己点,做容灾

kv存储希结构本身比较简单,基于内存的读写实现存储系统的高效性是kv系统设计的其中一个初衷原因,基于内存的存储系统受限于存储断电的丢失性和内存有限性,在有些场景,需要同时兼顾安全性、数据量和高效性。通过一定策略将热点数据缓存到内存中,将冷数据持久化到磁盘中,可以兼顾高效性和安全性。首先celler使用中心化方式进行集群管理和节点间数据同步,节点之间不用使用gossip进行通信,每个节点向管理中心发送心跳,理论上不存在水平扩展问题。但对单个节点来说,却存在水平扩展的问题。

水平扩展优化

1、使用bulkload进行数据导入

Celler是基于LSM-tree进行数据导入,存在写入放大的问题,为了解决这个问题,先将客户端数据使用对象存储(因为是直接从本地传输数据到对象存储服务器,突然理解为什么平时公司为什么对大数据问题,让客户端做数据的上传,然后只上传文件地址给服务端),将存储地址从客户端发送给服务器,服务器根据地址从对象存储服务器中获取数据,避免客户端网络不稳定可能导致的大数据传输失败问题。

2、线程模型调度优化

为了隔离开离线请求、快慢请求,使用四个队列和四个线程池分别处理,分别处理读快、读慢和写快写慢四种请求,保证对核心请求处理的效率。

知识点解释

1、对于哨兵架构的redis虽然也使用一致性hash进行扩所容,但为什么有可能在扩缩容导致数据丢失?

哨兵架构主要是为了保证高可用,但一个节点宕机,快速选择新的节点作为主节点。扩缩容主要有数据重分配和数据迁移过程中数据一致性问题,一致性hash只能减少扩缩容时数据迁移量,并不能保证数据迁移过程中一致性问题。数据迁移过程中,除了网络问题,如果迁移过程没有被正确管理,比如迁移过程中旧数据的更新并没有同步到新节点,会造成数据丢失。

2、为什么对于kv存储服务,当集群数量达到一定规模之后,再水平扩容会遇到哪些问题,如何解决?

管理复杂度增加,大规模节点中发现有问题的节点更加困难,更难保证数据的负载均衡;性能问题,集群节点内数据通信增加,网络宽带可能成为瓶颈,客户端访问数据分布在不同节点上,导致整体延时增加;数据一致性,在多个解节点维持事物的ACID更加困难,达到最终一致性延迟增高。其中一个有效解决方案是集群分区,根据业务场景,将数据划分到不同集群。

3、mget操作在大集群中可能会有木桶效应,如何解决?

mget是可以一次批量获取多个key的值。在大集群中,第一、节点数据可能分布不均匀,一致性hash只可以相对均匀维持数据的分布均匀;第二,节点性能差异,每个节点硬件、网络都会有差异,批量查询时,整个结果响应耗时以最差节点返回结果为准;第三,网络延迟的增加,如果同时请求多个数据中心的数据,整个查询延时会增加。针对这三个主要问题,可以定期重新分布数据;所有节点尽量使用相同的硬件和网络,对于热点key进行多副本处理或者升级硬件提升机器性能;减小单次mget查询的数据量,对于可以预测的热点key单独请求,缩短单次查询的耗时。

4、什么是Gossip协议,应用场景和优缺点分别是什么?

Gossip协议是分布式环境中节点之间信息交换的算法,使用过程要考虑如何避免循环传递,例如使用版本号和时间戳,分布式Id或者设置生存时间。工作原理,每个节点定期与周围节点交换信息,信息交换可以是单向,也可以是双向,每次选择交换节点事随机选取的,每次交换信息后会更新自身信息,并将更新信息在后续交换中传播。优点、去中心化,扩展性强,因为每次只用和部分节点进行交换,即使在大的分布式环境中依然可以使用,容错性高,即使某个节点出现故障,整个集群的消息依然可以保持正常交流。缺点、第一、冗余通信,同一个节点同一个更新信息,可能被通知多次;第二,全局达到一致性的时间会更长,由于每一轮只通知n个节点,过了一个周期后才会选择n个节点通知,需要经过多个周期之后,才有可能达到整个集群的一致性;第三、可能有些有些信息在某些节点不会被通知到,可以通过改进节点选择算法,或者调整更新频率或者范围(偶尔进行一次全局广播)。

Reference

美团大规模KV存储挑战与架构实践

相关文章:

美团KV存储squirrel和Celler学习

文章目录 美团在KV存储squirrel优化和改进在水平方向1、对Gossip协议进行优化 在垂直扩展方面1、forkless RDB数据复制优化2、使用多线程,充分利用机器的多核能力 在高可用方面 美团持久化kv存储celler优化和改进水平扩展优化1、使用bulkload进行数据导入2、线程模型…...

Python学习笔记------处理数据和生成折线图

给定数据: jsonp_1629344292311_69436({"status":0,"msg":"success","data":[{"name":"美国","trend":{"updateDate":["2.22","2.23","2.24",&qu…...

知识图谱与大语言模型的协同(RAG)——MindMap

MindMap : Knowledge Graph Prompting Sparks Graph of Thoughts in Large Language Models 论文地址: https://arxiv.org/abs/2308.09729 代码:https://github.com/wylwilling/MindMap 1.概述 大型语言模型(LLMs)在处理新信息、防止生成幻觉内容、以及增强决策过程透明度…...

奶爸预备 |《P.E.T.父母效能训练:让亲子沟通如此高效而简单:21世纪版》 / 托马斯·戈登——读书笔记

目录 引出致中国读者译序前言第1章 父母总是被指责,而非受训练第2章 父母是人,不是神第3章 如何听,孩子才会说:接纳性语言第4章 让积极倾听发挥作用第5章 如何倾听不会说话的婴幼儿第6章 如何听,孩子才肯听第8章 通过改…...

【WebGIS实例】(13)MapboxGL 加载地形高程数据

前言 官网示例:Add 3D terrain to a map | Mapbox GL JS | Mapbox 大佬博客:Mapbox GL基础(七):地形数据的处理与加载 (jl1mall.com) 加载Mapbox地形数据 map.once(style.load, () > {map.addSource(mapbox-dem,…...

Node.js -- MongoDB

文章目录 1. 相关介绍2. 核心概念3. 命令行交互3.1数据库命令3.2 集合命令3.3 文档命令 4. 数据库应用场景4.1 新增4.2 删除4.3 更新4.4 查询 5. 图形化工具Robo 3T 1. 相关介绍 一、简介 Mongodb是什么 MongoDB是一个基于分布式文件存储的数据库,官方地址https://…...

语音识别--单声道转换与降采样

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…...

基于springboot+vue+Mysql的点餐平台网站

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...

数据库优化

一、主从读写分离 主库:主要负责数据的写入。 从库:主要负责数据的查询。 引出问题: 可能会存在主从延迟,导致主从一致性问题。查询主库的量级需要控制。数据量庞大,索引也占据存储空间,磁盘空间不足,当主库宕机后会影响所有模块的写入,需要进行数据分片,因此引出分库…...

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(一)

本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! Phpsploit-Framework(简称 PSF)框架软件,是一款什么样的软件呢? Phpspl…...

Web安全研究(七)

NDSS 2023 开源地址:https://github.com/bfpmeasurementgithub/browser-fingeprint-measurement 霍普金斯大学 文章结构 introbackground threat model measurement methodology step1: traffic analysisstep2: fingerprint analysis dataset attack statisticsbro…...

矩池云jupyter运行opengait代码 未完成版

文章目录 前言——矩池云的使用技巧1.切换源 一、下载数据集二、下载模型三、环境配置1.查看python、torch、torchvision版本2.查看一些包版本是否过高3.下载包 四、开始训练1.设置环境变量2.遇到的问题(1)torch.cuda.is_available()返回false&#xff0…...

油烟净化器买家必看!商用油烟净化器功效及使用方法盘点

我最近分析了餐饮市场的油烟净化器等产品报告,解决了餐饮业厨房油腻的难题,更加方便了在餐饮业和商业场所有需求的小伙伴们。 在选择商用油烟净化器时,了解其功效和正确的使用方法至关重要。让我们一起来盘点一下。 高效净化油烟 商用油烟…...

gitee关联picgo设置自己的typora_图床

一:去gitee官网创建仓库:typora_图床 1.百度搜索关键字:gitee,进入官网 2.进入gitee登录或者注册自己的账号 3.进入主页后,点击右上方 4.点击新建仓库 5.设置仓库名:typora_图床 6.点击5的创建&#xff0…...

深入理解网络原理1

文章目录 前言一、网络初识1.1 IP地址1.2 端口号1.3 协议1.4 五元组1.5 协议分层 二、TCP/IP五层协议三、封装和分用四、客户端vs服务端4.1 交互模式4.2 常见的客户端服务端模型 前言 随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据&…...

为什么感觉没有效果

以前在辅导小儿作业的时候,我会在常用的搜索引擎里去寻找答案,一般情况下都能解决问题。 但是最近一段时间,我发现,搜索引擎搜出来的结果还没有利用短视频搜出来的答案更全面,短视频软件不仅可以显示AI整理出来的答案…...

C++中的指针详解

C中的指针详解 在C编程中,指针是一个非常重要且基础的概念。它允许程序员直接访问和操作内存地址,为高级数据结构和算法的实现提供了基础。本文将详细讲解C中指针的概念、用法和注意事项,帮助读者深入理解并掌握指针的相关知识。 一、指针的…...

视频改字祝福 豪车装X系统源码uniapp前端小程序源码

视频改字祝福 豪车装X系统源码uniapp前端小程序源码,创意无限!AI视频改字祝福,豪车装X系统源码开源,打造个性化祝 福视频不再难! 想要为你的朋友或家人送上一份特别的祝福,让他们感受到你的真诚与关怀吗&am…...

google chromeDriver 地址

#chrome driver 下载地址 https://getwebdriver.com/chromedriver #chrome brower下载地址 https://googlechromelabs.github.io/chrome-for-testing/ centos 安装的dockerFile的部分命令: #安装browser wget https://dl.google.com/linux/chrome/rpm/stable/x86_…...

分布式与一致性协议之Raft算法(一)

Raft算法 概述 Raft算法属于Multi-Paxos算法,它在兰伯特Multi-Paxos思想的基础上做了一些简化和限制,比如日志必须是连续的,只支持领导者(Leader)、跟随者(Follwer)和候选人(Candidate)3种状态。在理解和算法实现上,Raft算法相对…...

从自定义一个作用域开始来了解SpringBean的作用域

你好,这里是codetrend专栏“Spring6全攻略”。 在 Spring 框架中,Bean 的作用域(Scope)定义了 Bean 实例在容器中如何创建、管理和销毁的策略。 Spring 提供了多种 Bean 作用域,每种作用域都有其特定的生命周期和适用…...

Android 编译文件简述(Android.mk)

Android 编译文件简述(Android.mk) Android.mk 文件是 Android 构建系统中的一种构建配置文件,使用 GNU Make 语法,用于定义 Android 项目中的模块、库、应用程序、JNI 代码等的编译和链接方式。每个 Android.mk 文件通常对应一个目录,代表构建系统应该如何处理该目录下的源…...

[React] 手动实现CountTo 数字滚动效果

这个CountTo组件npmjs里当然有大把的依赖存在,不过今天我们不需要借助任何三方依赖,造个轮子来手动实现这个组件。 通过研究其他count to插件我们可以发现,数字滚动效果主要依赖于requestAnimationFrame 通过js帧来让数字动起来,…...

9.Admin后台系统

9. Admin后台系统 Admin后台系统也称为网站后台管理系统, 主要对网站的信息进行管理, 如文字, 图片, 影音和其他日常使用的文件的发布, 更新, 删除等操作, 也包括功能信息的统计和管理, 如用户信息, 订单信息和访客信息等. 简单来说, 它是对网站数据库和文件进行快速操作和管…...

redis之集群

一.redis主从模式和redis集群模式的区别 redis主从模式:所有节点上的数据一致,但是key过多会影响性能 redis集群模式:将数据分散到多个redis节点,数据分片存储,提高了redis的吞吐量 二.redis cluster集群的特点 数据分片 多个存储入…...

#9松桑前端后花园周刊-React19beta、TS5.5beta、Node22.1.0、const滥用、jsDelivr、douyin-vue

行业动态 Mozilla 提供 Firefox 的 ARM64 Linux二进制文件 此前一直由发行版开发者或其他第三方提供,目前Mozilla提供了nightly版本,正式版仍需要全面测试后再推出。 发布 React 19 Beta 此测试版用于为 React 19 做准备的库。React团队概述React 19…...

STM32中UART通信的完整C语言代码范例

UART(通用异步收发器)是STM32微控制器中常用的外设,用于与其他设备进行串行通信。本文将提供一个完整的C语言代码范例,演示如何在STM32中使用UART进行数据传输。 硬件配置 在开始编写代码之前,需要确保以下硬件配置&…...

【ITK统计】第一期 分类器

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK中的分类器及其使用情况,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 在统计分…...

51单片机两个中断及中断嵌套

文章目录 前言一、中断嵌套是什么?二、两个同级别中断2.1 中断运行关系2.2 测试程序 三、两个不同级别中断实现中断嵌套3.1 中断运行关系3.2 测试程序 总结 前言 提示:这里可以添加本文要记录的大概内容: 课程需要: 提示&#x…...

VUE 监视数据原理

1、如何监测对象中的数据? 通过setter实现监视,且要在new vue时就传入监测的数据 (1)对象中后加的属性,vue默认不做响应式处理 (2)如需给后添加的属性做响应式,请使用如下API&#x…...

wordpress添加文件2m/深圳正规seo

replaceAll() 方法使用给定的参数 replacement 替换字符串所有匹配给定的正则表达式的子字符串。语法public String replaceAll(String regex, String replacement)参数regex -- 匹配此字符串的正则表达式。newChar -- 用来替换每个匹配项的字符串。返回值成功则返回替换的字符…...

如何创建自己的网站平台免费/百度指数的网址是什么

AIGC是什么 AIGC - AI Generated Content (AI生成内容),对应我们的过去的主要是 UGC(User Generated Content)和 PGC(Professional user Generated Content)。 AIGC就是说所有输出内容是通过AI机…...

php企业网站无限制源码/chrome官方下载

Docker是一个客户端-服务器架构,Docker客户端与守护进程进行通信,Docker守护进程大大提升了docker容器的构建和运行。Docker客户端和守护进程可以在同一个系统上运行,也可以远程连接Docker的守护进程。他们之间使用Rest API,通过U…...

像芥末堆做内容的网站/百度推广优化中心

在上一篇中,我们讲到了如何配置多个容器并且定制属于自己的镜像,但是容器的数据性能以及持久如何保证的?本篇将通过介绍Docker Volume来说明这个问题,涉及到的架构如下图所示:1、 说到Volume实际上有多种方式可以实现&…...

杭州网站排名优化/sem和seo是什么

日语2——在线考试复习资料 一、单选题 1.ここからまっすぐ行く( )、郵便局があります。 A.ば B.も C.たら D.と 2. 渡辺さんは毎朝パンを( )。 A.食べます B.食べです C.食べるます D.食べります 3. 王さんは、英語が( )。 A.話せます B.話します C.話すます D.…...

wordpress 同步登录/网站建设软件

解析:此题手算或者用excel很快,这里我用代码代码量较大但思路简单。 星系炸弹 在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置&am…...