首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

总第584篇 | 2024年第004篇 KV 存储作为美团一项重要的在线存储服务,承载了在线服务每天万亿级的请求量,并且保持着 99.995% 的服务可用性。...在 DataFunSummit 2023 数据基础架构峰会上,我们分享了《美团大规模 KV 存储挑战与架构实践》,本文为演讲内容的整理。...1 美团 KV 存储发展历程 上图就是美团第一代的分布式 KV 存储的架构,可能很多公司都经历过这个阶段。...这时我们发现业界有一个比较成熟的开源 KV 存储:也就是阿里巴巴的 Tair 。2014年,我们把 Tair 引入到技术内部,去满足业务 KV 存储方面的需求。...2 大规模 KV 存储的挑战大规模 KV 存储的业务挑战主要有两点: 一个是扩展性。随着业务规模持续变大,业务会要求使用容量更大的集群。这个容量包括两方面,一方面是数据量,还有一方面是调用量。

31910

KV存储跨IDC容灾部署

1.背景   目前部分KV存储不支持跨IDC部署,所以如果有机房故障的话,就会影响KV存储的可用性。本文提供了一种通过KV存储代理层来实现跨IDC容灾部署的方案。 2.实现原理 ?   ...主IDC的存储代理通过写流水文件到磁盘,通过Notify程序将流水传输到备IDC对应的存储代理Redo服务重做流水。...为了降低存储代理的压力,读写服务可以做读写分离,读取操作可以直接访问本地存储。 3.KV存储代理层实现原理 ?   ...客户端通过API接入KV存储代理, 如果是写操作, 存储代理会先写流水再操作本地KV存储. 流水转发程序会每隔10ms扫描流水,然后转发给流水转换服务....,而KV存储本身不一定是支持跨IDC容灾部署的。

1.6K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    谈谈 KV 存储集群的设计要点

    Key-value存储系统,是非常普遍的需求,几乎每个在线的互联网后台服务都需要KV存储,我们团队在KV存储方面,经历过几个时期,我自己深感要做好不容易。...第三个时期,为了应对普遍的KV存储需求,我们以公共组件的形式重新设计了KV存储,作为团队标准的组件之一,得到了大规模的应用。...一句话:团队自己做一个KV存储系统是成本很高的,而且也有比较高的技术门槛。...设计一个KV存储,需要考虑至少这些方面: 如何组织机器的存储介质,通常是内存、磁盘文件;例如用hash的方式组织内存 如何设计用户的数据结构,使得通用、易于扩展、存储利用率高;例如PB序列化、Json、...存储,用于存储一些公众号的个数不受限粉丝列表 上面八点,业内的KV存储组件一般都会考虑到,或者各有特色,各自优势在伯仲之间。

    4.9K00

    干货 | 携程持久化KV存储实践

    图1 随着业务发展和Redis集群的日益增长,需求更加多样化,需要在私有云上同样能有一种持久化的KV存储系统来提供服务,包括: 1)KV存储和读写的场景,Redis能提供的存储上限过低,需要有大容量的...KV存储系统; 2)数据持久化,而不是像Redis那样重启数据即丢失; 3)节约Redis的使用成本,毕竟私有云上的Redis集群非常庞大; 4)提供类似selectforudpate的语义来实现库存之类字段的扣减...大规模部署后,资源利用率是否可以提升? 性能是否满足要求,是否支持10X的扩展 上面说的这几点,如果都满足,但性能不满足或者不支持10X扩展,那也将一票否决。...由于所有数据最终都需要在新集群上刷盘,导致迁移过程中目标集群的磁盘读写会非常大,又由于我们都是容器化部署,大量的磁盘读写也可能会影响到统一宿主机上的其他无关的应用,所以我们调整了TRocks的写入限流设置...,以避免大量写入影响磁盘性能,同时修改了BinlogServer加入了限流功能,平缓数据传输的速率。

    99320

    聊聊原美图开源的 kv 存储 titan

    市面上开源 kv 轮子一大堆,架构上都是 rocksdb 做单机引擎,上层封装 proxy, 对外支持 redis 协议,或者根据具体业务逻辑定制数据类型,有面向表格 table 的,有做成列式存储的...如果基于最新版本的 tikv 集群测试效果可能更好 数据类型实现 目前数据结构只实现了 string, set, zset, hash, list, 有些也只是部分支持,只能说够用 持久化的 kv 轮子...再比如 zset 数据结构,zrange, zrangebyscore, zrangebylex 需要将 member, score 分别编码存储,用空间换时间 String String 类型只有两种...当前实现没看到 ziplist 到 linkedlist 的转换,其实对于持久化存储来说,只用 linkedlist 足够了 MetaValue 后 24 字节分别维护了 len, lindex 和...可以说 tikv 减少了持久化 kv 开发难度,也束缚了灵活性 删除 GC Delete 时,删除 MetaKey,如果存在 TTL 那么删除 ExpireKey, 对于非 String,将 DataKey

    27710

    硬核项目 KV 存储,轻松拿捏面试官!

    本文是《从零实现 KV 存储》课程的面试要点总结,相当于只要你学习了课程,以下提到的内容都是你自己完成的。...有哪些适用场景 缓存系统 KV 数据库可用作缓存系统的后端存储,以提供快速的数据访问和响应能力。...由于 Bitcask 存储模型具有高性能和低读写放大的特性,它适合存储频繁访问的热数据,提供快速的缓存读取操作。 日志存储 KV 数据库可以作为日志存储系统使用,将日志数据持久化到磁盘上的日志文件中。...Key 小 Value 大的 KV 数据存储 Bitcask 将 key 和对应的索引都维护在了内存当中,这样如果 key 较小的话,那么内存当中能够维护的数据量就更多,并且 Value 是在磁盘存储的...Redis 是一种纯内存的数据结构服务,也可以持久化到磁盘中,但其实际上是一种面向内存的 KV 存储,数据量受到内存容量的影响。

    85320

    美团万亿级 KV 存储架构与实践

    KV 存储作为美团一项重要的在线存储服务,承载了在线服务每天万亿级的请求量。...在 2019 年 QCon 全球软件开发大会(上海站)上,美团高级技术专家齐泽斌分享了《美团点评万亿级 KV 存储架构与实践》,本文系演讲内容的整理,第一部分讲述了美团 KV 存储的发展历程;第二部分阐述了内存...美团点评 KV 存储发展历程 美团第一代的分布式 KV 存储如下图左侧的架构所示,相信很多公司都经历过这个阶段。...这个时候,我们发现有了一个比较成熟的 KV 存储开源项目:阿里 Tair 。2014年,我们引入了 Tair 来满足业务 KV 存储方面的需求。...这两个存储其实都是 KV 存储领域不同的解决方案。

    3K2018

    200行代码实现基于paxos的kv存储

    这是一个基于paxos, 200行代码的kv存储系统的简单实现, 作为 [paxos的直观解释] 这篇教程中的代码示例部分....VBal *BallotNum ... ... } 以及KV服务的client端和server端的代码, client端是实现好的, server端只有一个interface, 后面我们需要来完成它的实现...voted的值都为空, 则直接返回: if p.Val == nil { return nil } [Example_setAndGetByKeyVer] 这个测试用例展示了如何使用paxos实现一个kv..., 但相比真正生产可用的kv存储, 还缺少一些东西: 写操作一般都不需要用户指定ver, 所以还需要实现对指定key查找最大ver的功能....以上这3块内容, 后续播出, 下个版本的实现将使用经典的log 加 snapshot的方式存储数据.

    34010

    美团万亿级 KV 存储架构与实践

    美团点评 KV 存储发展历程 美团第一代的分布式 KV 存储如下图左侧的架构所示,相信很多公司都经历过这个阶段。...在客户端内做一致性哈希,在后端部署很多的 Memcached 实例,这样就实现了最基本的 KV 存储分布式设计。...内存 KV Squirrel 架构和实践 在开始之前,本文先介绍两个存储系统共通的地方。比如分布式存储的经典问题:数据是如何分布的?这个问题在 KV 存储领域,就是 Key 是怎么分布到存储节点上的。...持久化 KV Cellar 架构和实践 下面看一下持久化 KV Cellar 的架构和实践。下图是我们最新的 Cellar 架构图。 ? ? ?...Squirrel 和 Cellar 虽然都是 KV 存储,但是因为它们是基于不同的开源项目研发的,所以 API 和访问协议不同,我们之后会考虑将 Squirrel 和 Cellar 在 SDK 层做整合

    1.2K20

    Nebula Graph 的 KV 存储分离原理和性能测评

    因此对于大规模的范围查询 Range Query,并且是小 value(64B),性能可能会差。...的 KV 存储分离原理和性能测评] [Nebula Graph 的 KV 存储分离原理和性能测评] [Nebula Graph 的 KV 存储分离原理和性能测评] [Nebula Graph 的 KV...存储分离原理和性能测评] [Nebula Graph 的 KV 存储分离原理和性能测评] [Nebula Graph 的 KV 存储分离原理和性能测评] [Nebula Graph 的 KV 存储分离原理和性能测评...的 KV 存储分离原理和性能测评] [Nebula Graph 的 KV 存储分离原理和性能测评] [Nebula Graph 的 KV 存储分离原理和性能测评] [Nebula Graph 的 KV...这是因为 KV 分离对读性能的提升主要来源于读放大的减少和 Cache 命中率的提升。但由于磁盘 I/O 性能远小于内存访问,所以读放大的减小对于性能提升更加明显。

    1.2K20

    B站分布式KV存储混沌工程实践

    01 背景 之前我们介绍了B站分布式KV存储在B站的探索实践(←点击回顾前文)。本文主要介绍对于高可靠、高可用、高性能、高扩展的B站分布式KV存储系统来如何保障其可靠性以及混沌工程的落地实践。...分布式存储业界已经发展几十年,各个商用存储团队也有对应的开源测试框架,比较知名的比如P#[2]和Jepsen[3],但是这些框架应用成本高,在非商用存储团队中已有的迭代开发过程中很难有额外的人力应用实施...2008年8月Netfilx因为数据库存储故障造成了长达三天的停机,之后他们开发了对应的测试工具,并在2015年发布了《混沌工程原则》[5],通过在复杂系统中采用混沌方式进行实验,增强存储产品可靠性方案处理混乱现象的能力和信心...04 混沌工程实践 4.1 建立稳态假设 B站分布式KV存储是随着业务需求不断迭代开发,功能需求逐渐覆盖到全公司各个业务线,性能和可靠性也是逐步完善优化的过程,在实践中需要对于稳态的标准不断更新和优化。...两套KV存储集群,模拟多机房部署物理隔离。 单套集群部署多region分区。 单个region分区中包含同等规模的raft group。

    57140

    clickhouse多磁盘存储

    此外,将数据存在多个存储设备中,以扩展服务器的存储能力,clickhouse 也能够自动在不同存储设备之间移动数据。...每张 MergeTree 表都有一个存储策略,用以规定该表数据如何写入;策略将不同的磁盘分到一个或多个卷中,并规定了数据的写入顺序以及如何在磁盘之间移动数据。...,仍需两个工作: 在配置文件中制定存储策略,并通过卷标签来组织多个磁盘 建表时通过SETTINGS storage_policy=’’来为表指定存储策略 JBOD(“Just a Bunch of Disks...”),通过将多个磁盘分配在一个卷中,每次插入数据所生成的data part会以轮询的方式依次写入这些磁盘,该策略的优点: 通过直接追加磁盘的形式,可以便捷地扩展存储能力 在多线程并行访问多个不同磁盘时,...可以提升读写速度 由于每个磁盘上的data parts变少,可以加快表的加载速度 在配置文件中添加如下的存储策略配置,并重启clickhouse服务。

    1.5K60

    FastKV:一个真的很快的KV存储组件

    一、前言 KV存储无论对于客户端还是服务端都是重要的构件。...1.1 SP的不足 关于SP的缺点网上有不少讨论,这里主要提两个点: 保存速度较慢 SP用内存层用HashMap保存,磁盘层则是用的XML文件保存。...如果数据完成写入到内存块,如果系统不崩溃,即使进程崩溃,系统也会将buffer刷入磁盘; 但是如果在刷入磁盘之前发生系统崩溃或者断电等,数据就丢失了,不过这种情况发生的概率不大; 另一种情况是数据写一半的时候进程崩溃或者被杀死...,然后系统会将已写入的部分刷入磁盘,再次打开时文件可能就不完整了。...四、结语 本文探讨了当下Android平台的各类KV存储方式,提出并实现了一种新的存储组件,着重解决了KV存储的效率和数据可靠性问题。

    1.3K00

    vivo 大规模特征存储实践

    (6)易用 业务在接入这个存储系统时,最好没有太大的理解成本。 2. 潜在需求 扩展为通用磁盘 KV,支撑各个场景的大容量存储需求 我们的目标是星辰大海,绝不仅限于满足特征场景。...这里简单介绍我们在易用性上的一些实践: (1)兼容 redis 协议 我们改造了美图开源的 KVrocks(一个基于 Rocksdb 的兼容 redis 协议的单机磁盘 KV 产品),依赖 Nebula...扩展成通用 KV 存储 我们立项特征存储的时候,就目标要做成通用 KV 存储,成为更多数据库的强力底座。但要做成一个通用 KV 存储,还需要很多工作要落实,包括可靠性、平台能力、低成本方面的提升。...SPDK 磁盘读写 实际测试告诉我们,同样是依赖 nvme 磁盘,单机上使用 SPDK 比不使用 SPDK 吞吐提升接近 1 倍。...支撑对象存储的元数据存储 元数据存储对“对象存储”来说至关重要,既然我们已经提供了一个强大的 KV 存储产品,是不是可以复用起来,减轻运维和研发维护的负担呢?

    1.4K20

    使用开源技术构建有赞分布式 KV 存储服务

    当时对比了几个开源产品, 最终选择了 aerospike 作为我们的 KV 存储方案。...为了充分利用已有的 aerospike 集群, 并考虑到当时的开源产品并无法满足我们所有的业务需求, 因此我们需要构建一个能满足有赞未来多年的 KV 存储服务。...有了此架构后, 我们就可以在不改动现有 aerospike 集群的基础上, 来完善我们目前的KV服务短板, 因此我们基于几个成熟的开源产品自研了 ZanKV 这个分布式 KV 存储。...实现内幕 DataNode 数据节点 首先, 我们需要一个单机的高性能高可靠的 KV 存储引擎作为基石来保障后面的所有工作的展开, 同时我们可能还需要考虑可扩展性, 以便未来引入更好的底层存储引擎。...选择 raft log 磁盘存储需要避免双层 WAL 降低写入性能。

    1.5K20

    【Rust日报】2022-12-27 Rust 中的 KV 存储引擎

    Rust 中的 K/V 存储引擎 Bassfaceapollo 发现了一些很酷的 Rust K/V 存储引擎项目,想与社区分享: Engula - 分布式 K/V 存储。它似乎是最活跃的项目。...AgateDB - 由 PingCAP 新创建的存储引擎,试图在 Tikiv 数据库中替换 RocksDB。...Marble - 一个新的 K/V 存储,旨在成为 Sled 的底层存储引擎,本身仍在开发中。 PhotonDB - 一种高性能存储引擎,旨在利用现代多核芯片、存储设备、操作系统和编程语言的强大功能。...DustData - Rustbase 的存储引擎(Rustbase 是一个 NoSQL K/V 数据库)。 Persy - 是用 Rust 编写的事务存储引擎....ReDB - 一种简单、可移植、高性能、ACID、嵌入式键值存储,其灵感来自 LMDB。

    43740

    存储01-磁盘阵列历史

    1.软raid 由于时代和磁盘技术发展的限制(单盘容量和性能发展缓慢),产生了raid相关技术。技术产生了,如何才能快速的来实现和进行部署呢?...计算,不占用系统CPU 2)降低了操作系统的复杂性 3)避免了raid软件对操作系统的依赖或者干扰 4)可以专注发展自己的一亩三分地(术业有专攻) 3.raid卡+jbod 由于机箱空间有限,可安装的磁盘数量受限...专门做一个磁盘箱子呗,这个磁盘箱子就是jbod(磁盘+磁盘背板+主机接口)。当主机磁盘不够的时候,就加jbod箱子,一个不够就两个,两个不够就三个,以此类推。...4.存储自己的时代 从上面123的发展可以看出,raid技术源于服务器到目前的脱离服务器自立门户:一个新的时代到来了,即:存储和服务器正式分家了,存储存储,服务器是服务器。...单控模式下,相当于一个车头带了好多车厢,即一个控制器带了好多个jbod磁盘扩展柜。双控模式下,相当于两个车头带了好多车厢,即两个控制器带了好多个jbod磁盘扩展柜。

    1.6K21
    领券