美团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存储挑战与架构实践

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

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

相关文章

linux启动常见问题

一、忘记root密码 日常生活中,我们会接触到很多账号和密码,而这些账号和密码我们不能都很好的记忆,对于linux也是一样的,如果root密码忘记了怎么办?岂不是都无法登陆使用Linux了?现在我就教各位&#xff0c…

一文了解CRM系统帮助中心:从认识到搭建

客户关系管理(CRM)系统是企业的一个重要部分。而CRM系统帮助中心为用户提供了便捷的支持服务,提升了用户体验,减少了企业运营成本。本文将从认识到搭建,带你全面了解CRM系统帮助中心。 一、认识CRM系统帮助中心 CRM系统…

智慧交通系统:未来出行,从这里开始

随着城市化进程的加快,交通拥堵、事故频发、停车难等问题日益凸显,传统交通管理模式已难以满足现代社会的需求。智慧交通系统作为解决这些问题的关键,通过集成创新技术,实现交通管理的智能化、信息化,提高交通系统的运…

流量分析利器arkime的学习之路(三)---结合Suricata攻击检测

1、基础 Arkime安装部分参考《流量分析利器arkime的学习之路(一)—安装部署》 在此基础上安装suricata软件并配置。 2、安装suricata yum install suricate 可能依赖的文件包括libyaml,PyYAML,这些可能在之前安装arkime或者其他…

教程分享:如何为跨境电商、外贸、国际展会制作二维码?

不论是做跨境电商、在全球做产品推广,还是国外的餐厅运营、参加国际展会,或者是做创意户外广告、制作个性化的个人名片、有趣的产品包装……只要是在国外使用二维码,你都可以在QR Tiger去制作您需要的二维码! 一、认识QR Tiger 二…

RVM(相关向量机)、CNN_RVM(卷积神经网络结合相关向量机)、RVM-Adaboost(相关向量机结合Adaboost)

当我们谈到RVM(Relevance Vector Machine,相关向量机)、CNN_RVM(卷积神经网络结合相关向量机)以及RVM-Adaboost(相关向量机结合AdaBoost算法)时,每种模型都有其独特的原理和结构。以…

[开发|鸿蒙] 鸿蒙OS开发环境搭建(笔记,持续更新)

搭建开发环境流程: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/installation_process-0000001071425528-V2 鸿蒙DevEco Studio 3.1.1 Release仅支持windows和mac系统 运行环境要求 为保证DevEco Studio正常运行,建议电脑配置…

idea修改maven项目名称及子模块名称

一、修改目录名称 shift F6修改目录,选择“rename module and dictionary”。![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/43efd9c6af6e43ad9656455db94b37a2.png)二、修改子项目pom的 三、修改父项目pom的 四、刷新maven项目

消费金融平台公司如何做大做强自营产品

本文来自于2019年的某次内部分享沟通会,部分敏感内容已做删减。

Facebook之道:探索社交媒体领域的未来

随着科技的不断发展,社交媒体已经成为我们日常生活中不可或缺的一部分。而在这个领域中,Facebook一直是引领者和领头羊。然而,随着时间的推移,社交媒体领域正在发生着翻天覆地的变化,而Facebook又将何去何从&#xff1…

Meta的Ray-Bans将是最好的AI伴侣眼镜

早在2023年,当我第一次尝试雷朋眼镜时,我就带着智能眼镜自拍。但那个时候,很少有人意识到它是一副智能眼镜。 现在2024年雷明这种眼镜兼作蓝牙耳机,与iOS或安卓系统配对,并与一个专门的元视图应用程序同步。眼镜臂底部…

Scanner中next()、nextInt()、nextLine()、hasNext()、hasNextInt()的使用方法及注意事项

目录 1、next()、nextInt()、nextLine()的使用方法及区分 2、循环时如何使用hasNext方法 3、用hasNextInt()作为判断下一个输入是否为数字需要配合next()方法使用 1、next()、nextInt()、nextLine()的使用方法及区分 三者简单定义 next():此方法遇见第一个有效字符…

厂家自定义 Android Ant编译流程源码分析

0、Ant安装 Windows下安装Ant: ant 官网可下载 http://ant.apache.org ant 环境配置: 解压ant的包到本地目录。 在环境变量中设置ANT_HOME,值为你的安装目录。 把ANT_HOME/bin加到你系统环境的path。 Ubuntu下安装Ant: sudo apt…

期权买方要保证金吗?期权交易保证金怎么计算?

今天期权懂带你了解期权买方要保证金吗?期权交易保证金怎么计算?期权保证金其实就是你在购买期权合约时,作为卖方要付出的那一小笔钱。简单说,就是为了防止你违约,给交易双方一个保障的“小押金”。 期权买方要保证金吗…

Python:实现b站登录并保存登录信息(baidu Comate插件帮助我逐行分析代码)

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️感谢大家点赞👍&…

消费增值:让每一分钱都增值的新时代消费模式

是否曾思考过,在每次购物或服务消费时,你支付的款项究竟流向了何方?如今,我想向你揭示一种颠覆性的消费理念——消费增值。它不仅仅满足你的日常消费需求,更能让你的资金在消费的同时实现增值,为你打开全新…

layui 数据表格 新增一行

第一件事 先把 闲心大佬的官网 贴上 &#xff1a;layui 官网 layui 数据表格中 新增一行 官网拉下来的一个 大体结构就这样 <!DOCTYPE html> <html> <head><meta charset"utf-8"><meta name"viewport" content"width…

8.MyBatis 操作数据库(进阶)

文章目录 1.动态SQL插入1.1使用注解方式插入数据1.2使用xml方式插入数据1.3何时用注解何时用xml&#xff1f;1.4使用SQL查询中有多个and时&#xff0c;如何自动去除多余and1.4.1方法一&#xff1a;删除and之后的代码如图所示&#xff0c;再次运行1.4.2方法二&#xff1a;加上tr…

vin码查询接口快速对接

vin码查询接口全称叫VIN车辆识别代码查询接口&#xff0c;也叫车架号查询接口&#xff0c;指的是通过车辆VIN&#xff08;车架号&#xff09;查询车辆相关信息&#xff0c;如车辆品牌、车型、油耗、车身形式、排量等等。那么vin查询接口如何快速对接呢&#xff0c;接下来我们聊…

Git命令Gitee注册idea操作git超详细

文章目录 概述相关概念下载和安装常见命令远程仓库介绍与码云注册创建介绍码云注册远程仓库操作关联拉取推送克隆 在idea中使用git集成add和commit差异化比较&查看提交记录版本回退及撤销与远程仓库关联 push从远程仓库上拉取&#xff0c;克隆项目到本地创建分支切换分支将…