开发者学堂课程【PolarDB-X 开源系列课程:本地部署 PolarDB-X(二)】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/1032/detail/15140
本地部署 PolarDB-X(二)
内容介绍:
三、 PolarDB-X 产品介绍
四、 PolarDB-X 核心特性
三、 PolarDB-X 产品介绍
PolarDB-X 这个产品有哪些特点:
首先来看一下 PolarDB-X 的系统架构是怎么样的?
从逻辑组件的视角来看,中间这块就是 PolarDB-X 的四个核心的组件。
从左往右看的话:
第一个组件是 CN ,也就是分布式的计算层:这一层就是刚才图里面所讲到的上层的计算层,你可以把它理成分工分表那一层,如果你对中间件比较熟悉的话。
这层跟我们的业务、应用直接进行交互的一层,也就是说你的应用里面的不管是只用JPEG直连;还是用一个数据库的连接池,它首先是连接到了 CN 的组件上面,那 CN这个组件是个无状态的,可以进行无限的扩展,目前 PolarDB-X 这个产品的CN的节点最大规模可以扩展到1024个节点,这也是分布式数据库它的水平扩展能力很强的体现。这是第一个节点,同时他会负责将你的数据进行拆分、计算。系统里面会用到事物这样的东西,在 PolarDB-X 里面,因为分布式数据库的原因,里面会有分布式事物,那么CN这一层它也会支持分布式事物。
第二个组件是我们的 DN 组件。为了便于理解,这里你可以把它简单的理解成就是一个 MySQL ,只不过是我们深度定制的这样的一个 MySQL 。DN 的话,就是我们的数据层,也就是说最终我们的数据还是存在了 DN 里面,CN那边是不存数据的。DN 这个节点的话,第一个是存数据,第二个它有非常强的扩展的能力,它跟CN一样,最大规模可以支持到1024个节点的扩展。在 PolarDB-X 里面, DN 还有另外一个非常重要的特点,就是它是用我们自研的 paxos 的库实现了它的高可用能力。
也就是说每一个 DN 的节点,都可以理解为它有三个副本在运行,这其中的任何一个副本挂了,即里面的数据丢了也好,或者它所在的机器当机了也好,或者说当前网络不可达也好,都不影响这个节点的一个可用性,这也正是分布式系统它所能够提供的高可用能力的核心体现。这是我们的 DN 节点。
第三个是上面的GMS这样的一个组件。那这个组件它其实也是一个DN或者说是一个 MySQL ,只不过它是一个扮演特殊角色的DN。它首先在整个系统当中是一个节点,不像 CN 和DN 可以无限的扩展,它只有一个节点,只不过它是一个高可用的节点,也就是它是一个三副本的高可能节点,那么它会扮演、提供这样几个功能:
(1)第一个是会为整个系统提供一个时间戳这样的一个服务。时间戳,比如说在我们的分布式事务里面,我们需要有一个能够提供全局时间戳的一个组件,那么在 PolarDB-X 里面就是由GMS的组件来提供的,也就是这张图里面说的 TSO 。
(2)第二个功能是我们整个系统当中的原数据都是存在GMS里面的,比如说库表的结构、账号信息权限信息等等,这些信息都是存在 GMS 里面。它内部的结构的信息,比如说CN最终部署之后,它的IP和端口是什么, DN 的IP端口是什么等等这些信息,也是存在了 GMS 里面。
最后一个组件是 CDC 。如果你对其他类型的分布式数据库之前有所了解的话,会发现 CDC这个组件可能在 PolarDB-X 里面是比较特别的一个存在,其他的数据库里面都没有 CDC 。这个组件是 PolarDB-X 用来提供全局日志的一个组件。所谓的全局日志,如果你对 MySQL 比较熟悉的话,它是用来提供跟 MySQL binlog 完全一致的全局 binlog 的组件。如果不了解的话, binlog 是按照时间顺序,严格的记录了这个系统当中所有的数据的变化。也就是说它是一个队列,如果你从头到尾去消费了这个队列,然后在本地重放的话,你可以把系统当中的数据原模原样的给还原出来,就是一个增加日志的一个组件。
以上就是 PolarDB-X 四个核心的组件, CN、DN、GMS 再加CDC。
四、 PolarDB-X 核心特性
这部分讲完之后,我们再来了解一下PolarDB-X 的核心特性。每个产品都会有自己的特点, PolarDB-X 也不例外。
1. 第一个特点,首先得讲到水平扩展。就刚才分布式2.0的架构或者 PolarDB-X 系统架构图,都说明了 PolarDB-X 的架构是Shared- nothing的一个架构。Shared -nothing就是 CN节点可能不共享任何的一个数据或者说是无状态的,可以做一个很好的一个水平扩展的能力,就像刚才提的,目前我们测下来 PolarDB-X 的集群的最大的规模可以扩展到1024个节点,也就是说这个系统当中可以有1024个CN,1024个DN,那这是个非常夸张的一个分布式系统。
同时如果你对分布式或者是分工分表的一些基本原理有了解的话,那我们同时是支持 Hash 和和 Range 这两种数据的路由的算法,;同时也支持水平透明的水平扩展的能力。这里所谓的透明的话,就是你可以像使用单机一样,使用单机的 MySQL 一样去做建表或者是加索引等等这样一系列的 DDL 操作,或者是插入数据的 HTML 的操作。
对分布式并不需要太强的了解就可以,PolarDB-X 会自动的帮你把这些东西给处理好,这就是所谓的透明水平扩展。一会在我们的演示当中也会进行进一步的展示,让大家有一个更强的体感,包括课后大家做实验的时候,也可以来亲自去体验一下所谓的透明水平扩展到底是什么样的体感。这就是 PolarDB-X 的第一个核心特性,它是一个分布式的数据库,采用的是 Shared-nothing 的架构,有很强的水平扩展的能力,最强呢可以扩展到1024个节点,这是第一个特性。
2. 第二个特性的话就是高可用。这点在刚才讲 DN 节点的时候也已经提到了,高可用主要是依赖于我们自己实现了 X-Paxos 这样一个基于Paxos 强一致的库,这样一个协议算法来实现了。同时还会支持其他的一些能力,比如说因为我们将数据进行了一个重新的分布,那么你可能有些 SQL 在进行查询的时候,尤其是一些状语相关的操作在进行查询的时候,数据会因为不同的拆分的算法导致数据的分布不同等等,会让你的查询效率降低。所以我们会提供一些其他的,让你有能力去干预到这个数据分布的特性。比如说将若干个表进行一个Goup的分组,一个组里面的这些表,在拆数据的拆分方式上保持一致,这样你在做一些join的相关操作的时候,能够让他们进行更快的数据查询操作。另外一个,比如说你可以来指定说我这个数据最好在物理位置上是分布在某一个机房或者是某一个可用区的,使我的应用访问的时候呢可以有一个就近的原则,我们可以提供这样一些能力。
这个就是 PolarDB-X 提供的第二个能力叫做高可用。同时,高可用这边从系统架构其实你可以看到,除了 DN 这边通过 X-Paxos 来保证数据节点的高可用之外,我们的 CN 节点其实也是高可用的。首先因为它是个无状态的节点,所以你可以比较容易的把它给扩展出好多份,其中任何一个节点挂掉之后,其他节点都可以正常的工作,他们完全不依赖于这个挂掉的节点,所以CN它其实也是一个具备高可用这能力的;包括GMS也是一样的,因为它是一个三副本这样的一个设计,所以GMS三个节点当中有一个挂架之后,它是不影响它对外服务的一个能力的;包括 CDC 也一样的,所以整个系统的1四个组件都是具有高可用能力的。
3. 第三个特点是 MySQL 生态兼容。刚才讲前面 PolarDB-X 这个产品发展的过程,也就是那段废话的时候,大家应该可以看得出来这个产品从一开始就是用分工分表的中间件,再加上一个 MySQL 来做架构设计的,所以后续很多的功能的持续的迭代和开发,那显然都是要考虑到 MySQL 的兼容,这其实是个很自然的过程,因为出发点就是 MySQL ,所以我们要考虑的兼容的 MySQL 生态。另外一点, MySQL 生态不管是在国内还是在全球都是非常大且非常繁荣的生态,去兼容它也是一个合理的选择。在 PolarDB-X 在兼容 MySQL 上面,第一个因为它的出发点就是 MySQL ,所以会有很多的先发的优势。
所以它在兼容上面可以做得更深入一些,比如说它不仅仅会只做到说对 MySQL的通讯协议的介入,也就是说你通过 JTPG 连我的时候,可以把我当成 MySQL ,发过来那些 SQL 不会语法报错、不会仅仅停留在这个层面,而是会做得更深入一些。 MySQL 的大部分语法以及它大部分的功能我们都是支持的,然后事务的隔离级别也是跟 MySQL 是一样的,包括 MySQL 的上下游的一些系统生态的兼容。
比如说刚才提到的,我们通过CDC这个组件提供了一个完全兼容我们 MySQL binlog 的全景 binlog 的能力,那么它就可以实现系统架构这张图里面所示的无缝跟 MySQL 下游的系统进行一个互通, MySQL 的下游系统,比如说用开源里面有非常有名的开源工具,也是我们团队在做的叫 connctal ;
另外一个就比如说公有云上的阿里云提供的叫DTS的等等,这些 MySQL binlog 的订阅工具都可以无缝切到 PolarDB-X 里面。另外一个,比如说大数据的系统可以用CDC 直接把或者 PolarDB-X 当成 MySQL 来连接到 PolarDB-X 里面,这个都是我们所做的兼容的一部分。
MySQL 的上游,比如说通常你在部署 MySQL 的时候会进行一个主备的搭建,来让这个系统有高可用这样的能力,那么我们在 PolarDB-X 里面也提供了一个application的能力,你可以将 PolarDB-X 无脑的作为一个 MySQL 的背来搭建一个 MySQL 到 PolarDB-X 的主备同步的链路等等,这些都是我们在 MySQL 兼容上面所做的一些工作。在前段时间,就是5月25号的时候,我们做过一个 PolarDB-X 的开源的新版本的发布会,也就是2.1这个版本,那里面对 binlog 尤其是replication的能力做了非常详细的展示,大家如果有兴趣的话,可以再去看一下那个直播的回放。这是 MySQL 兼容的部分
4. 第四个就是分布式事物。作为一个数据库,显然得具备提供事物这样一个基本的能力,那如果大家对事务的实现之前的各种方案有所了解的话,那么 PolarDB-X 实现的方案是 MVCC+TSO+2PC 这样的一种组合,来实现了一个工程事务的能力。同时我们做了大量的优化,但是这分布式事务的效率在生产可用的状态。
第五个特点是 HTAP 。 HTAP是目前大家做分布数据库都会去往这个方向去靠的一个点,在 PolarDB-X 里面具体来说做的几个跟 HTAP 相关的一些能力:
(1)第一个是我们具有原生 MPP 的能力。所谓的原生 MPP 能力不是将一个外挂的类似于sbug 的东西,挂在了 PolarDB-X 下面,就提供了在病情加速下查询的能力。那我们是自己又重新实现了一遍,再重新实现 MPP 的能力有什么好处呢?
就是在站在使用的视角,你用来做TP查询的 SQL 跟用来做AP查询的 SQL 是完全一样的,他们在语法的兼容还有其他的功能等等很多的地方都是完全一致的,不会出现比如说你TP上面的 SQL 可以跑,但是如果跑AP下面挂的是 sbug ,可能 SQL 又不能跑了一个诡异的行为。那这是所谓的原生 MPP 。
(2)第二个就是智能读写分离。因为通常来说我们是需要业务来将那 TP和AP的流量做一个划分,TP的就连接到TP所对应那个连接串,AP就连到AP所对应的连接串,这无疑就增加了我们应用上面连接池的维护的复杂度;更主要的是会让我们负责做应用开发写 SQL 的那些同学首先得判断获得的 SQL 到底是做一个TP查询还是做一个AP查询。很多情况下它是可以判断,但是也有很多情况下,它是处于一种中间态,模棱两可的状态,所以这件事情是比较困难的。我们这边就提供了一个统一的接入点,也就是说你的应用可以无脑的全部接入到 PolarDB-X 的 CN 节点上面,那不管是TP的查询还是AP的查询,都可以直接让 SQL 发过来。那我们的 CN 会自己来判断这个 SQL到底是个TP还是个AP的查询,来将它们自动的进行一个隔离。所谓的隔离是指我们TP和AP从CN到后续的DN整个查询的链路在资源上面都可以做到物理的隔离。这样可以避比较大批的查询,影响到我们在线的TP的一个业务,这是智能读写的功能。这个功能是依赖于我们部署的时候需要有一个特殊的指定。
(3)第三个是 OSS 归档存储。当前大家都会在讲降本增效的概念,尽量把我们的成本给降下来,那我们的后台系统当中很大的成本来自于数据的存储成本。在数据库里面,其实有很多的数据本身没有那么高的频繁的访问次数,就是所谓的冷数据。如果你是将它跟经常反馈的数据放在一起,那么它们都存储在一些比较贵的,类似于固态硬盘等的存储上面,那么它的成本就会比较高。因此我们提供了一种可以将库里面冷的数据,将他们归档到 OSS 或者其他的一些比较低成本的存储上面的能力,来使系统总体的成本降低。
5. 我们会提供提供一些企业级的特性。所谓的企业级特性,可以认为就是方便你做一些业务或者做管理的功能。
(1)第一个功能就是 SQL 限流。你的业务可能在跑得好好的,突然有其他的应用新上线,但因为它的 SQL 没有经过充分的验证或者是调试,上线之后就是个 MySQL 会把这个系统给打挂了。这个时候可能还没有办法在短时间内定位到说来自于哪个应用,但如果你知道是哪个 SQL 的话,就可以通过 SQL 限流的功能直接将 SQL 进行限制,使我们的系统可以快速进行恢复。
(2)第二个的话就是 swin 推荐。如果你需要对你的库表进行一个优化,可以通过 swin推荐这个功能,让我们的系统来告诉你在哪个表上面加一个怎样的 swin ,可能可以提高查询的效率等等,它有 TDE 、三权分立等等这样的能力,这就是我们提供一个所谓的企业级特性。
6. 最后一个就是云原生。因为它是基于原则性基础设施来做的数据库,开源的部分,我们提供了 K8S Operater 这样的部署的方式。如果你们的业务是运营在 K8S 的基座上面,就可以将 PolarDB-X 的值接在 Operater 上面进行部署,进行使用。另外就是我们基于 Prometheus+Grafana 做了K8S 部署形态的监控系统,这个大家有兴趣的话也可以尝试,后续我们还有更多基于 K8S 生态来做的一些能力,那么到合适的时间点会开放来给大家使用。
以上就是 PolarDB-X 这个产品的一些特点,水平扩展、高可用、 MySQL 生态兼容、分布式事务、 HTAP、企业级、云原生。如果大家想要这七点记的少一点的话,第一个记住它这个分布数据库显然具有水平扩展性;第二是基于 X-Paxos 协议,所以它是有个高可用的能力;第三个就是 MySQL 生态兼容,它是做得非常深入的。
PolarDB-X 开源之后,我们陆续的往外推出了很多的资源,可以让大家来了解或者学习 PolarDB-X 。这些资源目前包括4个部分:
第一个就是我们的源码,它是放在 Github 上面的,目前是有相关的五个参股,都是以GalaxySQL 来打头的,大家可以去搜一下这个 GalaxySQL 来作为产品的一个入口。那么在 Galaxy SQL这个仓库的维度里面,会把其他几个仓库的链接也会给加入。简单的来说,GalaxySQL 就是对应刚才架构图里面的 CN ,也就是我们的计算节点, GalaxyEngine 对应我们的存储节点DN以及GMS,CDC就是我们刚才介绍的 CDC 这个组件,那 GalaxyKube 就是我们说的K8S operater这个东西。
第二个部分就是我们的产品和文档网站。大家可以直接在浏览器里面输入 https://polardbx.com 这是产品的官网以及一些产品文档。
第三个就是我们的知乎的官号。在知乎的官号里面大家可以搜一下 PolarDB-X 那个是我们团队维护的一个重点讲解 PolarDB-X 的实现原理,它的一些源码解读以及数据库领域相关的一些论文阅读的地方。
最后一部分就是云起实验室。包括本次训练营的课程最后的课后作业的实操的部分也都是在云起实验室进行的,后面我会给大家一个二维码,大家可以直接扫码来链接到我们云起实验室的入口。
接下来我们会做什么?
首先在云栖大会的时候,我们做了第一次的开源;然后是在今年3月份的时候,做了第二个比较重要版本的开源;那么接下来一个目标是6.30这样的一个目标,我们会加入更多的能力在里面。那在9.30的时候,会尝试去做一个国产化相关的一些适配。
那这个 roadMAC ,不是一个非常精确的 MAC,这个 MAC 可能会根据当前的进展来做调整。大概的话,我们会每三个月发一个版本,是这样一个节奏。