分布式存储系统举例剖析(elasticsearch,kafka,redis-cluster)

这篇具有很好参考价值的文章主要介绍了分布式存储系统举例剖析(elasticsearch,kafka,redis-cluster)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 概述

对于分布式系统,人们首先对现实中的分布式系统进行高层抽象,然后做出各种假设,发展了诸如CAP, FLP 等理论,提出了很多一致性模型,Paxos 是其中最璀璨的明珠。我们对分布式系统的时序,复制模式,一致性等基础理论特别关注。

在共识算法的基础上衍生了选举算法,并且为分布式事务提供了部分的支持。本文从常见的几种分布式存储系统看看实践中的分布式系统设计细节。理论结合实际,能更好地帮助我们加深理解。

2.分片

先来看看分片的定义:

The word “Shard” means “a small part of a whole“. Hence Sharding means dividing a larger part into smaller parts. In DBMS, Sharding is a type of DataBase partitioning in which a large database is divided or partitioned into smaller data and different nodes

分片是分布式存储系统绕不开的话题,分片提供了更大的数据容量,能够提升读写效率,提升数据可用性。

分布式存储系统 分片 备注
elasticsearch 每个index 进行分片,即 shard shard计算,shard = hash(routing) % number_of_primary_shards
kafka 每个topic分析分片,即 partition 根据key来选择partition,也可以根据自定义partition算法实现 同一的user发送到同一 的partition
redis-cluster 对所有数据进行分片,hash slot 16384(2^14) hash tags 确保数据分配到同一个slot:{123}:profile and user:{123}:account
  • 对redis-cluster 来讲,redis client 需要缓存 key - slot 映射,因为redis 节点不会对 查询请求进行代理,如果查询数据不存在,则需要client重新查询。
  • redis-cluster 的设计目标是在提供高性能的基础上,让redis数据能分布在多达1000个节点的集群上。

3.复制

复制提升了数据的可靠性,复制分片还可以用来做read。在分布式系统重,有两种复制模式:

  1. 同步复制,主节点在同步数据到slave,然后返回响应给到client
  2. 异步复制,主节点先返回响应给到client,然后同步数据到slave

分布式存储系统举例剖析(elasticsearch,kafka,redis-cluster)

分布式存储系统 复制 备注
elasticsearch  primary 复制数据到 in-sync copies,同步复制  
kafka 主分片复制数据到 ISR (in sync replica) producer 可以配置 acks 和 min.insync.replicas 来调整一致性
redis-cluster 采用redis 的复制机制,异步复制 redis对性能非常敏感,所以采用的都是异步复制
  • 以上三种系统均采用 primary-backup model (Google I/O 2009 - Transactions Across Datacenters), 具有低延迟,高吞吐,会有部分的数据丢失窗口
  • 旧的elasticsearch 版本中可以调整write conistency level : one(primary shard), all(all shard), quorum(default).
  • kafka 是典型的日志消息系统,数据量特别大,在常见的quorum-based 系统中,为了能容忍n个节点失败,往往需要2n + 1 个节点,这对kafka来讲多余的存储成本非常的高,于是kafka采用了ISR机制,即只维护那些与主分片及时保持同步的分片,当主分片失败时,从ISR 中选取一个作为最新的主分片即可。

4.一致性

不同的复制策略带来了不同的一致性,常见的一致性有

  • 强一致性
  • 最终一致性
  • 弱一致性

根据Ryan Barrett在Google I/O 2009 - Transactions Across Datacenters中的定义,elasticsearch/kafka/redis-cluster 都采用了 primary-backup model,primary-backup model 的特点是最终一致性,但是具体细节有所不同。

分布式存储系统 写入一致性 NWR 模型 备注
elasticsearch 最终一致性 (较强) w(all write) , r(1) 需要refresh 到文件系统缓存才可见,flush操作到磁盘
kafka 最终一致性 (可调) w(ack writes) , r(1)  ack = 0 最弱,ack = all 最强
redis-cluster 最终一致性 (较弱) w(1) , r(1)  
  • 采用最终一致性,意味着在写入过程中,会出现部分节点返回最新数据,部分节点返回过期数据的情况,由于这个时间窗口很小,往往可以接受。
  • 我们在这里提到了NWR模型,参考 partial quorums,partial quorums 在基于冲突解决的复制模型中使用广泛,比如Dynamo。当 r + w > n 时总有节点能返回最新的数据。

5.选举算法

选举算法的基础是共识算法,paxos是其中最璀璨的明珠,paxos在共识算法中的地位可以用这样表述:

Either Paxos, or Paxos with cruft, or broken

paxos 最早应用于google 的 Chubby (lock manager),zk是 Chubby的开源版本。

分布式存储系统 选举算法 备注
elasticsearch bully/类raft bully算法比较简单,谁大就选谁
kafka zookeeper(zab)/kraft(raft)  
redis-cluster 类raft  
  • 可以看到很多分布式组件都有转向raft的趋势。
  • 由于paxos算法晦涩难懂,并且如果要应用到实际过程中需要做很多调整,所以开发了一个易于理解的版本raft算法,raft算法分为 leader election, log replication, safety, and membership changes 等模块,相比于paxos 所有节点都是平等的,raft 进行leader 选举,并且通过log replication进行数据同步,safety 确立了raft算法的完备性,membership changes 处理节点变更的情形。log replication 表示了raft底层的数据结构,对我们设计类似系统大有裨益。

6.事务支持

存储系统中,事务是非常重要一部分,我们来看看各类组件是否支持分布式事务,以及他们是如何实现的:

分布式存储系统 事务支持 备注
elasticsearch 不支持  
kafka 支持事务,基于2PC  
redis-cluster 不支持跨节点的事物,支持单节点的事物 使用multi/exec/watch 来实现
  • 2PC是一种强一致的模型,具有高延迟,低吞吐的特点。
  • 常见的分布式事务模型有,primary-backup model,multi-master model, 2PC, Paxos.  3PC 是2PC 的变体。个人认为TCC, 基于消息表的事务也是2PC 的变体。

7.总结

本文从分布式系统的几个方面探讨了elasticsearch,kafka,redis-cluster的细节,他们有很多共性,但是在许多方面也有很多不同。鉴于笔者对分布式系统的研究还不是很深入,如果错误,请指正。

8.参考

https://book.mixu.net/distsys/single-page.html

https://www.youtube.com/watch?v=srOgpXECblk

https://snarfed.org/transactions_across_datacenters_io.html

http://harry.me/blog/2014/12/27/neat-algorithms-paxos/

https://ramcloud.atlassian.net/wiki/download/attachments/6586375/raft.pdf文章来源地址https://www.toymoban.com/news/detail-655602.html

到了这里,关于分布式存储系统举例剖析(elasticsearch,kafka,redis-cluster)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 分布式搜索引擎elasticsearch搜索功能介绍及实际案例剖析

    分布式搜索引擎elasticsearch搜索功能介绍及实际案例剖析

    1.1.1 DSLQuery的分类 Elasticsearch提供了基于JSON的DSL(Domain Specific  Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query mu

    2024年02月20日
    浏览(13)
  • Elasticsearch 分布式文档存储

    Elasticsearch 分布式文档存储

    当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存储在分片 1 还是分片 2 中呢? 首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了

    2024年03月19日
    浏览(8)
  • zookeeper分布式协调系统的架构设计与源码剖析

    zookeeper分布式协调系统的架构设计与源码剖析

    目录 001_我们一般到底用ZooKeeper来干什么事儿? 002_有哪些开源的分布式系统中使用了ZooKeeper? 003_为什么我们在分布式系统架构中需要使用ZooKeeper集群? 004_ZooKeeper为了满足分布式系统的需求要有哪些特点 005_为了满足分布式系统的需求,ZooKeeper的架构设计有哪些特点? 006_

    2024年02月03日
    浏览(55)
  • Ceph分布式存储系统

    Ceph分布式存储系统

    Ceph :ceph被称为面向未来的存储还是一个分布式的存储系统,非常灵活,如果需要扩容,只要向ceph集中增加服务器即可。ceph存储数据时采用多副本的方式进行存储,生产环境下,一个文件至少要存三份,ceph默认也是三副本存储。 可以实现的 存储方式 : 块存储:提供像普通

    2024年04月15日
    浏览(9)
  • 分布式运用——存储系统Ceph

    分布式运用——存储系统Ceph

    Ceph是一个开源的分布式存储解决方案,旨在提供可扩展性、高性能和强大的数据可靠性。它采用了一种分布式对象存储架构,能够同时提供块存储和文件存储的功能。本篇博客将深入探索Ceph的原理、特性和应用场景,帮助读者更好地理解和使用这一强大的存储解决方案。

    2024年02月17日
    浏览(12)
  • 分布式文件存储系统-FastDFS

    分布式文件存储系统-FastDFS

            前言:FastDFS 是一个分布式文件存储系统, 主要用于存储和管理 大规模 的 文件数据,如图片、视频、文档等 ,是淘宝前架构师为了存储图片用C语言开发出来的系统。         服务端有两个组件  Tracker Server 与 Storage Server ,对应两个角色: Tracker: 管理和调度集群

    2024年02月13日
    浏览(12)
  • 分布式系统架构设计之分布式数据存储的扩展方式、主从复制以及分布式一致性

    分布式系统架构设计之分布式数据存储的扩展方式、主从复制以及分布式一致性

    在分布式系统中,数据存储的扩展是为了适应业务的增长和提高系统的性能。分为水平扩展和垂直扩展两种方式,这两种方式在架构设计和应用场景上有着不同的优势和局限性。 水平扩展是通过增加节点或服务器的数量来扩大整个系统的容量和性能。在数据存储领域,水平扩

    2024年02月03日
    浏览(43)
  • 分布式系统架构设计之分布式数据存储的安全隐私和性能优化

    分布式系统架构设计之分布式数据存储的安全隐私和性能优化

    在前面分布式系统部分,有对安全性做过介绍,如前面所述,在分布式系统中,确保系统的安全性和隐私是至关重要的。安全性关注系统的防护措施,而隐私是关注用户的个人信息保护。 身份认证:确保用户和系统组件的身份是合法的,通过通过密码、令牌或证书实现 授权

    2024年02月02日
    浏览(37)
  • 【Linux】分布式存储系统 Ceph

    【Linux】分布式存储系统 Ceph

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Ceph使用C++语言开发,是一个开放、自我修复和自我管理的开源分布式存储系统。具有高扩展性、高性能、高可靠性的优点。 Ceph目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack,Kubernet

    2024年02月17日
    浏览(12)
  • Ceph分布式存储系统优化分析

    Ceph分布式存储系统优化分析

            Ceph支持多种存储访问接口,现有的多种性能测试工具都可用于Ceph的性能测试,如测试块接口性能的fio,iometer等;测试CephFS接口的filebench,fio等;测试对象接口的cosbench等。Ceph有专用的基准测试集CBT,其包含radosbench,librbdfio,kvmrbdfio和rbdfio。radosbench基准测试使用

    2024年02月12日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包