深入浅出分布式技术原理
陈现麟
伴鱼技术中台负责人,前小米工程师
21241 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
深入浅出分布式技术原理
15
15
1.0x
00:00/00:00
登录|注册

17|分片(一):如何选择最适合的水平分片方式?

基于关键词的 Hash 值划分
基于关键词划分
数据平衡(动态分裂与合并)
数据划分
预先分配固定数据量 slot
动态分片
静态分片
基于范围划分
基于模运算划分
水平分片算法关键因素
负载均衡与水平分片
混合分片
垂直分片
水平分片
分享知识,扩散学习成果
在极端情况下,如何对一个关键词进行负载均衡?
水平分片策略的算法和应用场景总结
选择适合的水平分片策略
数据分片的原因和类型
讨论各组合的优缺点和应用场景
数据划分策略与数据平衡策略的组合
数据平衡
数据划分
分片策略
垂直扩容 vs 水平扩容
讨论一致性和共识问题
实现 ACID 事务
解决数据高可用的“复制”
解决单机存储和性能瓶颈的“分片”
构建大规模无状态分布式系统
解决无状态节点或服务之间的协调问题
推荐分享
思考题
总结
水平分片策略分析
水平分片策略介绍
分片策略讨论与梳理
分布式存储篇
分布式计算篇
分片(一):如何选择最适合的水平分片方式?

该思维导图由 AI 生成,仅供参考

你好,我是陈现麟。
结束了“分布式计算篇”的系列学习,我们掌握了如何解决分布式系统中,无状态节点或服务之间内部的协调问题,利用这些知识和技术原理,你就可以轻松地构建、运维一个大规模无状态的分布式系统了,恭喜你,取得了一个值得庆祝的学习成果。
接下来我们乘胜追击,继续了解有状态分布式系统的相关知识和技术原理。在“分布式存储篇”,我们先解决单机存储和性能瓶颈的“分片”,再解决数据高可用的“复制”,然后讨论如何在已经“分片”和“复制”的数据集上实现 ACID 事务,最后从实践回归到理论,讨论分布式系统最核心、最重要的两个问题:一致性和共识,进一步提高你对分布式技术的理解和认识。
从这节课开始,我们将用两节课的时间来讨论,如何通过“分片”技术,突破单机存储和性能瓶颈,让分布式系统的计算和存储能力可以线性扩展。本节课,我们先梳理常用的分片策略,然后讨论水平分片的算法,并对其优缺点进行比较,最后从理论到实践,分析这些分片策略在实际工作中的应用场景。

分片策略讨论与梳理

在 2000 年左右,由于互联网的快速发展,用户数据爆炸性增长,如何存储和管理这些海量的用户数据成为了一道难题,当时摆在工程师面前主要有两条道路。
第一条是垂直扩容,即 PC 机扛不住换小型机,小型机扛不住换大型机,大型机扛不住换超级计算机,通过不断提高机器的配置来应对数据的增长。但是,这条道路会受到材料的物理极限、制造的工艺水平和使用成本的限制,不是一条可持续的道路。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

水平分片是解决分布式系统中数据存储和性能瓶颈问题的重要技术之一。本文从数据划分和数据平衡两个维度讨论了水平分片策略。数据划分主要有基于模运算和基于范围划分两种方式,其中基于范围划分又分为基于关键词划分和基于关键词的 Hash 值划分。基于关键词划分保留了数据的顺序性,便于区间查询,但可能导致数据分布不均匀和访问热度不均匀的问题。而基于关键词的 Hash 值划分通过 Hash 运算解决了数据分布和访问热度不均匀的问题,但失去了关键词的顺序性。水平分片技术的选择对于构建和运维大规模无状态的分布式系统具有重要意义。 根据数据分片是否支持动态的分裂与合并,水平分片的数据平衡方式可分为静态分片和动态分片。静态分片在系统设计之初确定数据分片的数目和区间,而动态分片可以在运行时根据分片的负载和容量做调整。动态分片与基于关键词的划分是一个比较好的组合方式,避免了基于关键词划分的问题,还保留了数据基于关键词有序的优点。但是,基于关键词的划分可能导致访问冷热不均匀的问题,而基于关键词的 Hash 值划分则可以很好地解决这个问题。 总而言之,水平分片策略的选择应基于业务特点,清晰地选择适合的策略。文章还对常见的数据划分策略和动态、静态的数据平衡策略进行了讨论,分析了它们的优缺点和应用场景。水平分片技术的全面总结和对比有助于读者深入理解分布式技术的应用和实践。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出分布式技术原理》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • 言十年
    基于关键词的划分中,基于自增 ID 或者时间戳等原因,导致的访问冷热不均匀的问题。为什么会导致冷热不均呢?

    作者回复: 一般来说,最新的数据,访问热度最高,比如三年前的朋友圈、新闻、评论、消息是很少有人访问的,但是最新的新闻等访问的人就越多了,自增 ID 或者时间戳会让最新的数据在最新的分片中。

    2022-03-17
    6
  • shuff1e
    在极端情况下,如果一个关键词的访问热度非常大,我们有什么办法对这个关键词进行负载均衡呢? --- 可以对该关键词进行逻辑上的再划分。 比如"你好"这个key, 可以分成"你好_1","你好_2",...“你好10”等10个逻辑key

    作者回复: 是的,非常对! 不过这个也是有代价的,在更新的时候,需要保持多个副本的一致性(这个看业务需求来决定一致性级别)

    2022-03-09
    2
    4
  • 言十年
    #思考题#在极端情况下,如果一个关键词的访问热度非常大,我们有什么办法对这个关键词进行负载均衡呢? 多级缓存?考虑程序内存缓存、文件缓存或者其他方式

    作者回复: 对的,多级缓存的思路不错,不过写操作要注意多级缓存的一致性

    2022-03-17
    2
  • 言十年
    有没有动态分片的具体应用案例?或者技术?

    作者回复: 最近的分布式数据库几乎都是采用动态分片策略的,比如spanner、tidb等,单独就动态分片来说,技术上不难,按一定的大小分裂和合并就行了,难的是基于分片之上的操作,比如事务、性能优化等

    2022-03-17
    1
  • sunnywhy
    在极端情况下,如果一个关键词的访问热度非常大,是不是可以考虑再加一个别的纬度来进行细分?

    作者回复: 是的,这是思路是对的,不过由于只有一个关键词,增加维度对于关键词不能划分了,不过可以给关键词复制的“替身”

    2022-03-10
    2
    1
  • 小虎子🐯
    老师讲得很清晰,点赞👍

    作者回复: 哈哈,多谢~

    2022-03-09
    1
  • 和光同尘
    实际业务场景复杂,按照ID取模进行分表之后会导致数据严重倾斜,单个用户的数据量因为查询和排序条件复杂又没法再分裂,一直没想到这种场景如何处理,目前还只存了近三个月的数据。

    作者回复: 如果是分表的话,数据倾斜没有太好的办法,查询的话,可以通过其他的键再分片存储一份索引数据,不过也不是很好的办法。 我们当时是选择 NewSQL 了

    2022-04-10
    2
  • 宇智波鼬
    增加冗余数据?针对热点数据

    作者回复: 是的👍

    2022-04-02
  • peter
    请教老师两个问题: Q1:动态分片没有讲具体的方法,不需要讲吗? 或者,动态分片就是增加一个新的节点并把数据拷贝到新节点上,所以不用讲吗? Q2:峰值同时在线人数这个指标有意义吗? 在“期中测评:IM系统设计中”,有一个指标是“峰值同时在线人数”,这个指标很重要吗?一般都是说并发数量,峰值同时在线人数会占用系统很多资源吗?

    作者回复: Q1:课程中的描述:“动态分片,因为在运行时,分片区间是可以进行分裂和合并的”。 Q2:对于IM系统来说,峰值在线人数就是长连接的最大并发数。

    2022-03-09
  • Hello
    关键词hash值划分和模运算有什么区别?hash以后不是也要取模?老师,能否举个例子帮助理解下。
    2022-05-08
    1
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部