阿里的OceanBase数据库世界第一,底层原来使用了Paxos协议

简介: 前段时间相信都被阿里的OceanBase数据库刷屏了,它击败世界头号数据库厂商Oracle,登顶全球第一。先不看新闻内容,光是看标题就足以让人耳目一新了。又是“击败”,又是“第一”,又是“打破世界纪录”。即使是IT行业的门外汉,相信也会对这个消息感到振奋。但是你知道其底层其实使用的Paxos协议吗?如果你不知道也没关系,这篇文章主要就是让你理解Paxos协议到底是个什么东西?

一、从分布式理论说起


我们知道分布式架构中有一个基础的CAP理论,也就是我们的系统最多只能满足数据一致性(Consistency)、可用性(Availability)和网络分区容忍(Partition Tolerance)三个特性中的两个。

v2-32c0d3cef061c9993a8f540917dc3865_1440w.jpg

在互联网中的大多数场景,其实都是牺牲了强一致性来换取系统的可用性。举个例子,就好比是在网上买衣服,我们明明看到还有一件,但是付钱的时候却提示没有了,这就是牺牲了强一致性,但换来的就是我们的系统可用。


但是这并不是说我们的强一致性没有什么用,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。就好比刚刚那个例子,付款的时候最终会显示衣服已经没有了。


为了实现最终一致性,有几个方案,比如有名的2pc协议和3pc协议,但是都有着各种各样的问题,这时候一个非常牛的人出来了,名字是莱斯利·兰伯特,提出了一个非常强大的分布式一致性算法Paxos。也就是阿里所使用的。


二、故事叙述


我们想要理解Paxos协议,最好的方式就是通过例子,因此我也举了一个非常简单的例子。


从前有座山,山里有座庙,庙里有一群和尚。庙里的所有事都有一群特殊的和尚决定,我们叫这些特殊的和尚为长老吧。庙里面有什么重大的决议都是大家商量着来,因此大家可以提出一个提议(Proposal),但是提议可能有很多,比如一号提议,二号提议等等,于是给这些提议加了一个编号。每个提议都需要超过一半的长老们同意才能生效。


如果一个提议没有通过,那就再拿出一个提议,这个大家应该能理解,每一个长老,只会同意大于当前编号的提议。现在问题来了,庙里面的香火钱考虑是否修建新的房子。针对这件事大家议论纷纷。但是最终要有一个确定性方案。这就是Paxos协议的大致流程,大概意思就是少数服从多数的一致性协议。


它分为两个阶段:


第一阶段(预提案):


(1)寺庙提议者先选择一个提案编号N,并且将该编号的预提交请求Prepare(N)发送给寺庙的长老们。


(2)长老们收到预提案请求Prepare(N),比较存储的最大提案编号PN与N的关系:如果PN < N,则先令PN = N,并且同意提议者请求,发送当前长老们的最大提案编号PN(等于N)和最后一个批准的数据Value(可能为空)。 否则,拒绝请求,同样发送发送当前长老们的最大提案编号PN(等于N)和最后一个批准的数据Value(可能为空)。这个部分的意思就好比是逐个表决,及时更新赞同最多的方案。


第二阶段(提案):


(1)当预提案Prepare(N)被大多数长老同意时(PN=N),则做出以下提案:

如果所有接收到的PrepareResponse(PN, Value)中Value全部为空(长老们还未批准任何提案),则自己制定一个该值的取值Vn,并向acceptor集合发送提案:Proposal(N, Vn) 。


如果接收到的PrepareResponse(PN, Value)集合中存在不为空的Value,则选取Value不为空的PrepareResponse(PN, ValueNotNull)集合中PN最大的值(PNmax, ValueNotNull),并将其作为提案发送给长老:Proposal(PNmax, ValueNotNull)


(2)如果一个长老接收到一个提案编号为N的提案Proposal(N, Vn)则:


如果PN为空或者PN < N,则先令PN = N,Value = Vn,并且通过该条提案,返回:ProposalResponse(PN, Value) 。如果PN == N并且Value为空(尚未批准提案号为PN的任何提案),则先令Value = Vn,并且通过该条提案,返回:ProposalResponse(PN, Value) 。如果PN > N则拒绝该提案,回:ProposalResponse(PN, Value)

v2-7b10b2cdd30f64fd2acbab1e7c7e32cd_1440w.jpg

上面这张图就是paxos协议的演示,到这一步不知道我们心中会有疑问嘛,也就是如果只有俩长老,每次的提案每个人都只支持一个,这样会无求无尽。仅此我们还有必要对这种情况进行一个分析。


三、活锁和选主


当某一proposer提交的proposal被拒绝时,可能是因为acceptor 承诺返回了更大编号的proposal,因此proposer提高编号继续提交。 如果2个proposer都发现自己的编号过低转而提出更高编号的proposal,会导致死循环,这种情况也称为活锁。v2-a58569b5492f11394536492184e1cac9_1440w.jpg

为了保证流程的执行,我们必须选出一个主proposer,作为提案的唯一人选。如果主proposer能和大数派的集合进行通信,并且使用了一个比所有已经批准的提案号都大的编号,那么它就能成功产生被接受的proposal。批准拒绝已有的提案并且批准更高的提案号,主proposer最终会选择到一个足够大的提案号,最终使用提案被选定,从而达到数据一致性的目的。


关于paxos协议的基础知识我先写这么多,如有问题还请批评指正。


相关文章
|
3月前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
255 0
|
28天前
|
SQL 存储 人工智能
OceanBase CTO杨传辉谈AI时代下数据库技术的创新演进路径!
在「DATA+AI」见解论坛上,OceanBase CTO杨传辉先生分享了AI与数据库技术融合的最新进展。他探讨了AI如何助力数据库技术演进,并介绍了OceanBase一体化数据库的创新。OceanBase通过单机分布式一体化架构,实现了从小规模到大规模的无缝扩展,具备高可用性和高效的数据处理能力。此外,OceanBase还实现了交易处理、分析和AI的一体化,大幅提升了系统的灵活性和性能。杨传辉强调,OceanBase的目标是成为一套能满足80%工作负载需求的系统,推动AI技术在各行各业的广泛应用。关注我们,深入了解AI与大数据的未来!
|
2月前
|
存储 关系型数据库 MySQL
【阿里规约】阿里开发手册解读——数据库和ORM篇
从命名规范、建表规范、查询规范、索引规范、操作规范等角度出发,详细阐述MySQL数据库使用过程中所需要遵循的各种规范。
【阿里规约】阿里开发手册解读——数据库和ORM篇
|
3月前
|
Oracle 关系型数据库 MySQL
OceanBase 与传统数据库的对比
【8月更文第31天】随着云计算和大数据技术的发展,分布式数据库因其高扩展性、高可用性和高性能而逐渐成为企业和开发者关注的焦点。在众多分布式数据库解决方案中,OceanBase作为一个由阿里巴巴集团自主研发的分布式数据库系统,以其独特的架构设计和卓越的性能表现脱颖而出。本文将深入探讨OceanBase与其他常见关系型数据库管理系统(如MySQL、Oracle)之间的关键差异,并通过具体的代码示例来展示这些差异。
190 1
|
3月前
|
关系型数据库 OLAP 分布式数据库
揭秘Polardb与OceanBase:从OLTP到OLAP,你的业务选对数据库了吗?热点技术对比,激发你的选择好奇心!
【8月更文挑战第22天】在数据库领域,阿里巴巴的Polardb与OceanBase各具特色。Polardb采用共享存储架构,分离计算与存储,适配高并发OLTP场景,如电商交易;OceanBase利用灵活的分布式架构,优化数据分布与处理,擅长OLAP分析及大规模数据管理。选择时需考量业务特性——Polardb适合事务密集型应用,而OceanBase则为数据分析提供强大支持。
652 2
|
18天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
78 6
|
16天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
50 3
Mysql(4)—数据库索引
|
18天前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
57 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
14 2
|
4天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
19 4