大数据经典论文解读
徐文浩
bothub 创始人
13844 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 59 讲
大数据经典论文解读
15
15
1.0x
00:00/00:00
登录|注册

21 | Megastore(三):让Paxos跨越“国界”

你好,我是徐文浩。
过去的两讲,我们分别了解了 Megastore 的整体架构设计,以及它对应的数据模型是怎么样的。Megastore 在这两点的设计上都非常注重实用性。
在架构设计上,它把一个大数据库分区,拆分成了很多小数据库,互相之间相互独立。这样可以并行通过多组 Paxos 来复制每一个分区的事务日志,来解决单个 Paxos 集群的性能瓶颈问题。
在数据模型里,Megastore 更是进一步地引入了“实体组”这个概念,Megastore 的一阶段事务,只发生在单个实体组这样一个“迷你”数据库里。这些设计,都大大缓解了大型分布式数据库可能会遇到的各种单个节点的极限压力。
不过,在 Megastore 里我们还有一个非常重要的问题需要解决,那就是跨数据中心的延时问题。我们在解读Chubby 的论文里已经了解过 Paxos 算法了,任何一个共识的达成,都需要一个 Prepare 阶段和一个 Accept 阶段。如果我们每一个事务都要这样两个往返的网络请求,我们的数据库性能一定好不到哪里去。所以,Megastore 专门在原始的 Paxos 算法上做了改造和优化。
那么,今天我们就一起来看看 Megastore 具体是怎么做的。通过这一讲的学习,你可以了解这样两点:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Megastore系统是一个旨在解决分布式数据库性能和可用性问题的系统。通过优化Paxos算法,实现了跨数据中心的延时问题。文章深入探讨了Megastore系统的技术特点和解决方案,为读者提供了深入了解分布式数据库性能和可用性优化的知识。Megastore通过协同服务器和追赶共识的过程,实现了快速读取数据的复杂操作,保证了共识和可线性化的表现的同时,实现了高效的数据读取。文章详细介绍了Megastore面临的Paxos挑战,以及基于Leader的Paxos算法的实现方式。在实践中,Megastore通过基于Leader的实现方式,解决了单个Master成为写入数据瓶颈的问题,保证了系统的可用性。此外,Megastore的数据模型和写入策略充分利用了数据的局部性特征,提高了系统的性能。整体架构上,Megastore完全使用Bigtable用来存储事务日志和数据库内的数据。通过协同服务器,剥离了在多数据中心下,保障数据是“可线性化”的复杂性。为了减少服务器的硬件消耗,Megastore将Paxos集群里的参与者分成了三种类型。尽管Megastore已经支持了“可串行化”的数据库事务,在整个分布式系统下,也是“可线性化”的。文章总结了Megastore的设计思路,指出其对于分布式架构的学习有着很强的指导意义。 Megastore虽然只是一个过渡性的数据库产品,但是它的整个设计思路仍然有大量我们可以借鉴的地方。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大数据经典论文解读》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • 在路上
    徐老师好,学完Megastore我还是没想明白为什么它的写入吞吐量只有每秒几次。论文第2.2.3节Physical Layout提到,为了降低延迟,提高吞吐量,Megastore允许应用把数据放在靠近用户的地方,让数据的多个副本处于临近的数据中心,同时让一个EntityGroup的数据连续存储,尽量由一个TabletServer提供服务。唯一看起来有影响的是,写操作需要同步给所有副本,相关副本要么写入数据,要么标记自己的数据不是最新。 不过我在Spanner论文第6节Related Work中找到了答案,Megastore does not achieve high performance. It is layered on top of Bigtable, which imposes high communication costs. It also does not support long-lived leaders: multiple replicas may initiate writes. All writes from different replicas necessarily conflict in the Paxos protocol, even if they do not logically conflict: throughput collapses on a Paxos group at several writes per second. 主要原因有两个,一个是Bigtable带来高昂的通信成本,另一个是没有租期的Paxos Leader导致没有必要的写冲突。
    2021-11-30
    1
    1
  • 在路上
    徐老师好,学完Megastore这三讲,我觉得Megastore的性能提升在于将数据拆分打包成很小的实体组,在实体组内实现事务,在实体组间允许并发。读和写都尽可能在离用户最近的数据中心完成,读的时候采用只要没收到invalidate,数据中心就认为自己的数据是最新的,其实分布式环境下自己无法确认自己的数据是不是最新的,必须要通过集群中的其他多数节点确认,但是这种假装自己是最新的模式,加快了读操作的速度,写的时候要严格一些,先在集群中确认最新的事务日志位置。 Megastore 的写入的吞吐量慢就慢在向集群确认最新的事务日志位置。这是一种悲观的写入方式,认为对同一个实体组的写入会发生冲突,所以先确认别的数据中心中有没有新的写入。要提升吞吐量,可以采用乐观的写入方式,认为写入冲突是小概率事件,先写入,有冲突再回滚,或者解决冲突。
    2021-11-15
    1
    1
  • 密码123456
    有个问题,就是副本的追赶。这里只说了查询会同步一次。如果长期没有查询。突然来了一次查询,那岂不是要同步很久?
    2023-05-23归属地:江苏
  • dahai
    徐老师,关于这句:第一步,是查询本地的协同服务器,看看想要查询的实体组是否是最新的。 中的最新是怎么判断的?这点一直没弄明白。
    2022-01-18
  • dahai
    还有一点不明白,Leader 是一个实体组的leader,如果一个用户ID可以看作一个实体组,那么整个数据库中会有千万上亿的实体组,也会对应上亿个Leader映射关系,我这样理解对么?如果对的话,请问这些关系是在哪儿维护的?
    2021-12-29
    1
  • 在路上
    徐老师好,bigtable论文在figure 6中说,单个tabletserver随机读取1000-byte数据,每秒大概1200次,magestore论文在第4.10节说读操作的延迟是几十毫秒,两者差距怎么这么大?如果能够命中第4.4.1节所说的Fast Reads,相比bigtable,magestore的读操作只是多了coordinator的查询,查询性能不至于差这么大啊。
    2021-11-24
  • p
    在读数据时,如果本地数据不是最新的,直接找有最新数据的副本拿不可以吗,为什么需要等待本地的数据更新完成再去响应?这块设计是因为其他副本的数据也不一定是最新有效的么,是因为存在空洞吗?
    2021-11-21
    1
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部