用 PolarDB-X+Flink 搭建实时数据大屏_数据仓库_技术课程_开发者学堂

阿里云
为了无法计算的价值
打开APP
阿里云APP内打开
开发者社区> 开发者学堂> 全部课程> 用 PolarDB-X+Flink 搭建实时数据大屏

用 PolarDB-X+Flink 搭建实时数据大屏

2课时 |
145人已学 |
免费
课程介绍

PolarDB-X动手实践系列课程


第一讲:如何一键部署开源 PolarDB-X
第二讲:开始使用 PolarDB-X开始使用PolarDB-X
第三讲:如何将 PolarDB-X 与大数据等系统互通
第四讲:如何对 PolarDB-X 集群做动态扩缩容
第五讲:如何在 PolarDB-X 中进行 Online DDL
第六期:如何在 PolarDB-X 中优化慢 SQL
第七讲:用 PolarDB-X + Flink 搭建实时数据大屏
第八讲:用 PolarDB-X 搭建一个高可用系统
第九讲:PolarDB-X Replica原理和使用

PolarDB-X技术图谱:https://developer.aliyun.com/graph/polardbx

用 PolarDB - X + Flink 搭建实时数据大屏

 

内容介绍

一、PolarDB - X主要讲解内容

二、用 PolarDB - X + Flink 搭建实时数据大屏

 

 

一、PolarDB - X主要讲解内容

用 PolarDB - X + Flink 搭建实时数据大屏,这个所依赖的能力是PolarDB - X 比较有特色的能力,就是全局的变log,以前课程中也涉及到过这个能力,今天再来展示一下。

首先是围绕社区版本对应于商业2.0版本进行讲解,面向的群体是应用视角,不管是开发者还是架构师DBA还是学生想学习一下DB-X都可以听此次课程,主要内容是使用PolarDB - X过程中分场景化来介绍PolarDB - X的一些功能项.

目前为止已经进行了六讲,今天是第七讲,第一讲讲的是如何安装部署PolarDB - X,后面讲的是如何连接使用PolarDB - X,后面讲了PolarDB - X如何与大数据互通,在后面讲了PolarDB - X集群动态的扩充和缩容,后面讲了onlineddl,今天讲解PolarDB - X和fink的配合,后面也会继续讲一些其他的场景,后续内容和前面呈现的有一些不同,稍微做了一些调整,内容做了扩充

 

 

二、用 PolarDB - X + Flink 搭建实时数据大屏

1.环境准备

如果自己想体验需要一个这样的环境,有Linux或Mac的系统,里面需要装好dockerK8S以及PolarDB - X以及今天需要配合的flink这样的环境

 

 

 

  1. PolarDB - X基本架构

 

 

在开始之前先简单了解一下PolarDB - X基本架构,PolarDB - X是一个分布式的系统,核心的有四个组件来,组成,第一个是cn分布式的计算层,负责分布式事务,数据的拆分,路由等等,第二个组件是DN数据存储的节点,为了便于理解可以简单的看成是my clar不过是深度定制的my clar,第三个组件是GMS系统,可以把它看成半圆的特殊角色的DN,最后一个组件是CDC是全局日志的节点,也是在本次演示中所相关的组件,会生成PolarDB - X基本架构系统当中全局增量的日志

 

3.演示内容

今天会演示两个场景,第一个是PolarDB - X MySQL

具体来说就是PolarDB - X为主,mySQL为备,搭建一个主被同步的系统,这个场景是在第三讲demo的场景,那时出现一个问题导致链表没有搭建起来,mySQL crash表出来的时候查到了原因,所以今天会把这个demo重做一遍.

第二个场景是今天的主题,用PolarDB - X➕flink➕VUE基于vue的前端来模拟阿里的双十一的交易的大屏。

具体来说他的电路是上面这张小图所示,首先这张图分为上下两个部分,上面是业务视角或者应用开发视角,与我们打交道的一个是业务系统APP把他的数据写到下面的数据库也就是PolarDB - X里面,最终会通过大屏也就是vue的框架来展示交易实时的情况,下面显示的是数据流的方向,也就是我们今天会将PolarDB - X作为数据的源端,通过PolarDB - X提供的全局变log能力,因为是从mySQL电路板是完全兼容的,所以可以借助blink CDC mySQL connect连接到他这边获取到增量的日志,之后会建一个实时的计算,然后flink会把计算的结果写到一个DB里面,交易大屏就是读取DB数据并且进行呈现,在今天的demo里面,blink计算好的结果写到了PolarDB - X中,所以一会儿会在PolarDB - X中建两个库,一个用来模拟业务库,一个用来缓存实时计算结果的库。

 

4.PolarDB - X MySQL

接下来开始第一个demo,也就是PolarDB - X 为主MySQL为备来搭建主备同步的场景,今天用的是之前在阿里云购买的ECS,先登录远端的ECS,为了便于演示,提前把今天所需要的PolarDB - X集群创建好了,他的名字叫做PolarDB - X.

可以看到有一个GMS,一个CN,两个DN和一个CDC组成的集群,现在做一下端口转发,port - forward sVc / polardb -×8527:3306-- addresS = g ,将这个PolarDB - X集群3306这个端口转发到ECS端口8527,用8527进行服务是因为会起一个mySQL,mySQL默认会占用3306,这时已经将PolarDB - X的集群端口转换好了,在启动另外一个终端连接上ECS,尝试先登陆一下PolarDB - X ,看一下里面的情况。

可以看到,目前可以正常的连接,里面没有任何库是一个空的实例,现在打开第三个终端,在这个终端中会做一件事情,启动一个mySQL的容器,然后用这个容器作为PolarDB - X 的备用库,先来看一下目前docker目前是没有与mySQL相关的容器的,现在过来启动一个,简单来看一下这个命令,启动了一个名字叫做mySQL的mySQL容器,注册密码是123456,占用的端口也是3306,用的版本是mySQL8.0.11,上次的crash也是和mySQL版本相关的,mySQL刚好是在最新的版本里面将解析blog的一段逻辑稍微做了一个调整,导致在解析所给的blog时crash为了兼容mySQL更新版本解析blog的行为,在PolarDB - X 的最新版本里面做的格式的调整,后续PolarDB - X 发了新版之后,用最新版的mySQL做同步也不会有问题,现在就创建一个这样的容器,来登录一下。

是正常的,可以看到里面除了系统的库没有其他的库,现在来做一下主备同步的链路,准备同步会在原端PolarDB - X 去做一个转账测试来模拟业务,同时下游mySQL会见一个blog 同步的链路,希望能够实时的把转账测试的变更同步到mySQL这边,同时会对数据做一致性的校验来确保同步的过程当中也是没有问题的。接下来在PolarDB - X 创建转账测试所需要的库。

创建好了,在mySQL里面也创建一个同样的库,接下来先把主备同步的链路搭建起来,首先在PolarDB - X 里看一下当前Binlog的情况。

有一个Binlog文件,他的位点是161626,在mySQL通过change master指令与PolarDB - X 进行链路,为了方便演示,已经提前将这个命令写好了。

这就是mySQL用来去和主之间进行搭建同步链路的指令,简单看一下,这个命令就是change master做一个ipe端口,用户名,密码给他,然后指明一下从哪个Binlog文件的什么位置开始消费开始同步,这就是这条指令的含义,写好之后再mySQL这边start slave,这样两边的同步链路就开起来了,现在看一下同步链路的状态

 

已经在等待主节点给他发送Binlog的event,再回到PolarDB - X ,看一下test库

目前可以看到里面是没有表的,下面来启动业务也就是转账测试,这个业务简单来讲就是会连接上PolarDB - X ,然后在里面transfer test库里面创建一张表,这个表叫做counts,然后会初始化一些账号并且开始这些账户之间的转账,会有insert和update这些操作,因为这些实例都是跑在远端ECS,代码是在本地的,所以需要做一个端口转发,将远程ECS上的8527端口转换到现在演示的这台机器的8527端口上,这样本地的代码就可以直接连上了,现在已经连接好了,启动测试,转账测试已经启动,再来看一下PolarDB - X 目前情况。

tables这张表已经建立出来了,看一下这里面都有什么数据,使用select*from accounts order by id命令

可以看到里面有100条数据,也就是有100个账户,每个账户初始都有1000的资金,因为已经开始转账了所以有些账户多于一千,有些少于一千,使用select sum(balance) fromaccounts命令来看一下他们拥有的总的钱数,因为每一笔转账都是一个事务所以总的钱数是不变的。

可以看到总的钱数一直是10万,刚才所有的操作,包括转账测试的代码都是连接上了原端PolarDB - X 的,现在看一下mySQL这边是不是与预期的一样,将account这张表的建表同步过来了并且将里面的变更也同步过来了,首先切到主库里面看mySQL中是不是有了同样一种表。

可以看到mySQL也有accounts这张表,来看一下里面数据的情况使用select*from accounts order by id命令,里面也是有100条数据,使用select sum(balance) fromaccounts命令来看一下他们拥有的总的钱数,也是10万,可能大家没有注意到这里面神奇的地方通常我们所知道的Binlog工具都不是基于show的,都是一条一条基于行景同步的,也就是说例如现在做一个转账测试,A账户减了10块,B账户加了10块,那么就会对应两个操作,一个将一条记录做减十,一个将另外一条记录做驾驶,在Binlog同步的过程当中就会将它当成两个事情可能会看到一个中间态,可能先看到减10+10还没有同步过来,如果在这个情况下做查看总体余额可能不是刚刚好是10万,在PolarDB - X里面的Binlog是可以保证事物的原子性的,mySQL在做Binlog同步时也是基于事务来同步的,这样就会把事务一个一个完整的同步过来,所以不管在同步的任何时间点去做总余额的查询,始终可以保证余额是10万的,这是Binlog的一个特点,已经做了一段时间的转账测试,下面就将转账测试点掉,点掉之后再来看PolarDB - X,首先总的余额还是10万,看一下里面数据的情况,里面数据已经不变化了。

 

最后几条是这样一个数据,99账号对应的余额是997,来看一下mySQL这边是怎样的情况,这边99账号对应的余额也是997,为了对比两边的数据是否完全一致,提前写好了一个命令,这个命令就是将里面所有的数据做一个md 5计算,首先比较的一点是两边数据是否完全一致,首先在PolarDB - X这边执行C口,执行C口比较简单就是将所有数据的ID账户余额做一个拼接,先排序然后在拼接再计算md 5,md5字符串然后计算出md 5的值,只有两边的数据是完全一致的理论上算出来的md 5的值应该是一致的,在PolarDB - X中算出来的md 5值是这样的。

E881开头的以7a75结尾,再来看一下mySQ里面的情况,可以看到也是E881开头的以7a75结尾,表明同步链路是正常工作的,源端这边没有变更之后稍微过一点时间目标mySQL这边就把所有的增量全部的同步了,大家来看一下

在原端还有另外一个事情,accounts这张表其实是PolarDB - X里面分布式的表,里边会有一个dbpartition by hash是一个分表,在mySQL这边就是正常的一张表

可以看到在mySQL这边也是通过准备同步,把ddl同步过来,也就意味着全局Binlog里会将分布式的一些特性给处理好,保证下游可以把它当做mySQL的语法,以上便是第一个demo,也就是用PolarDB - X为主,mySQL为备用mySQL原生的Change master指令搭建PolarDB - X到mySQL主备同步的链路

 

5.PolarDB - X+Flink+Vue

接下来来看第二个例子,也就是用PolarDB - X+Flink+Vue来做一个双十一的交易大屏,稍微再看一下整个数据的链路,因为涉及到主件比较多。

第一个是在业务端,会有一个模拟线上交易的一段代码来写PolarDB - X数据,PolarDB - X作为交易的主库,之后会通过Binlog增量的日志同步到flink,flink计算之后把结果取到db,db用的是PolarDB - X会把它再写到PolarDB - X里面,之后有一个专门的交易大屏,应用分前端和后端,前端是用Vue,后端使用spring boot,Spring boot中写了一个小的应用来读数据库里面知识,现在就按照数据读的顺序,将这个系统一步一步搭建起来。

首先将刚才的例子改掉,mySQL就不管了,这里会有一个transfer test库,清掉它,这样有了一个干净的环境,接下来在PolarDB - X里面创建业务的一些库表,这次模拟的是一个电商的服务器,电商系统的表结构来自于flink CDC官方的一个教程,flink CDC在getting started快速上手的教程里面,第一篇讲的就是用flink cdc搭建一个mySQL和postgres的streaming ETL,最后通过flink cdc到ECS的一个有计算的链路,此节课就借鉴了这样的数据流的过程,其中原端将mySQL+opg PolarDB - X,目标端也将它换成了PolarDB - X,中间原模原样的使用flink cdc,在办公教程里面会让我们创建若干张表,首先用户的库叫my DB,第一张是商品的表,叫product,里面会有ID,名字还有一些商品的描述,会向里面插入一些初始商品的条目,- MySOL

CREATE DATABASE mydb ;

USE mydb ;

CREATE TABLE profucts (

id INTEGER NOT NULL AUTO _ INCREMENT PRINARY KEY , name VARCHAR (255) NOT NULL ,

description VARCHAR (512) ALTER TABLE products AUTO _ INCREMENT =101;

INSERT INTO products

 VALUES

( default ,“ scooter ","Snal12-wheel scooter "),

( default ," car battery ","12V car battery "),

( default ,"12-pack drill bits ","12-pack of drill bits with sizes ranging from #4E( default ," harner ","12oz carpenter ' s hamner '),

( default ," hamner ","140z carpenter ' s hamner '),

( default ," hanner ”,“16oz carpenter ' s haner "),

( default ," rocks "," box of a5sorted rocks "),

( default ," jacket ”,“ water resistent black wind breaker '),

( default ,“ spare tire ","24 inch spare tire ");

 

第二个是订单表orders,会有订单的ID订单时间购买者的名字价格商品的ID还有商品目前的状态订单的状态等等,

CREATE TABLE orders (

order _ id INTEGER NOT NULL AUTO _ INCRENENT PRIMARY KEY , order _ date DATETIHE NOT NULL ,

custorer _ nane VARCHAR (255) NOT NULL , price DECIMAL (10,5) NOT NULL ,

produet _ id INTEGER NOT NULL ,

order _ status B00LEAN NOT NULL 一 Whether order has been placed AUTO _ INCREMENT =10001;

INSERT INTO orders

VALUES ( default ,"2020-07-3010:08:22," Jark ",50.50,102, false ),

2020-87-3010:11:09,‘ Sally ",15.00,105, false ),

'2020-87-3012:08:30",' Edward ',25.25,186, fatse );

( default ,

( default ,

 

第三个表示快递的情况,主要是有三张表一张是商品,一张是订单,一张是物流的信息这三张表,今天的演示为了简便起见只关注订单这一张表

PG

CREATE TABLE shiprents (

shipment _ id stRIAL NOT NULL PRIMARY KEY , order _ id SERIAL NOT NULL ,

origin VARCHAR (255) NOT NULL ,

destination VARCHAR (255) NOT NULL , is _ arrived B00LEAN NOT NULL

 ALTER SEQUENCE public . shipnents _ shipment _ id _ seq RESTART WITH 1001; ALTER TABLE public . shipments REPLICA IDENTITY FULL ;

 INSERT INTO shipments

 VALUES ( default ,10001,"Be11ing", Shanghai ", false ),

( default ,10002," Hangzhou ',' Shanghai ', false ),

( default ,10003," Shanghai ',' Hangzhou ', false );

 

接下来开始去构建这些表,首先在PolarDB - X里面创建业务的db叫做mydb,mydb创建好以后首先在PolarDB - X里面创建商品这张表,商品表创建以后,向里面插入几条初始的商品

NINSERT INTO products

 VALUES

( default ," scoater "," Small 2-vheelsco0ter"),

( default ," car battery ","12V car battery "),

( default ,"12-packdril1 bits ","12-pack of drill bits with sizes ranging ( default ," hammer ","120z carpenter ' s hamer '),

( default ,“ hammer "“140z carpenter ' s hammer "'),( default ," hammer ","160z carpenter ' s hammer ''),( default ," rocks "," box of assorted rocks "),

( default ," jacket "," water resistent black w1nd breaker "),( default ," spare tire ",“24 inch spare tire ";

 

 f rom #40 to #3"》,

看一下

这张表已经存在了,看一下这张表里面的数据

里面有九条商品的记录,第二步,创建订单表,创建以后,里面会有几条初始的数据,也需要创建一下

INSERT INTO orders

 VALUES

 S ( default ,‘2020-07-3010:08:22',‘ Jark ',50.50,102, false ),( default ,2020-07-3010:11:09'," Sally ',15,00,105, false ),( default ,‘2020-07-3012:00:30',‘ Edward ',25.25,106, false );

第三个是物流的表,同样需要创建。

创建好以后可以看到现在业务库里面已经有三张表,商品,订单以及物流,有了初始信息以后,,接下来开始启动flink,Flink中有几个包需要下载,一个是他本身,第二个是它里面的一些connect,连接mySQL的connect以及连接ddc的connect,这些比较大所以已经提前下好放在这里了,接下来需要启动flink,flink本身有dashboard的web界面,为了方便将dashboard端口转化到本地,稍后可以通过浏览器进行观看状态,将端口转化之后

可以看到这就是flink本身dashboard的页面,目就可以了前本身flink是没有启动的,现在将flink启动起来,启动比较简单,调用bin目录下有个start cluster

可以看到有一个任务叫stots,这个启动好以后就启动flink cdc客户端,C口client,下面进行配置,将PolarDB - X里面的三张表在flink里面分别建立一个对应关系,因为今天只关心订单这张表,所以在flink中只建一张orders,其他两张表不进行建立。

首先改一下flink参数,在flink中也创建一下订单表

大家可以看一下建表的语句,创建一张表叫做orders,里面有多少个列,分别叫什么以及列的类型,与前面的PolarDB - X是对应起来的,在这里会进行一个数据源的配置,第一个是connector,用的是mySQL cdc,这里大家要注意,这边使用的是mySQLcdc,也就是说flink cdc会直接将PolarDB - X当成mySQL来对待,第二个是一些连接的信息,例如IP是什么?用户名是什么?端口是什么?密码是什么?然后让你连接库,表,是mydb库,orders表,建好以后看一下flink是否与PolarDB - X能正常的通信,执行select*from orders语句,将PolarDB - X 里面order这张表的数据拉到flink中,看一下能不能正常的获取。

可以看到flink已经可以正常拿到PolarDB - X里面的三条orders数据,说明链路已经打通了,现在flink  cdc已经完全把PolarDB - X当成mySQL来对待,也正确的拿到了里面的数据,接下来开始处理有计算的部分,有了交易表,交易大屏里面我们最关心的有两个值,第一个值叫做当前总的交易额是多少,第二个值是当前总订单的数量有多少,可以简单想象一下这两个数据是容易从orders里面获取的,第一个是创的新的orders里面有多少记录,就是订单数量,第二个可以sum一下price,把所有订单里面的price加起来,就是总的交易额,所以这是一个非常简单的场景,在真实的阿里巴巴双十一交易大屏里面会有非常多的丰富的数据进行展示,后台获取数据的源比较多,计算也非常的复杂,这里仅仅是为了演示链路,所以把这个场景做的简单一些,仅从orders这张表去获取最初的原始的数据,并且进行简单的调用计算,一个是count*,一个是sum,最后将结果存到PolarDB - X里面,现在在回到PolarDB - X里面,将储存结果的db和表先建立,Flink计算结果的库叫做gmv,建好之后存储两个结果,一个是交易总额以及订单总数量,这张表也叫做gmv,首先在PolarDB - X里面建这张表。

 

可以看到gmv这张表有ID,gmv是交易总额,用decimalI表答案,还有一个订单叫做orders,PolarDB - X这边已经建立好了,在flink这边有个概念就think,就是将计算结果存储到什么地方?,下面建立一下,会将结果存到PolarDB - X建的gmv库里面,刚才db忘了写,所以稍微改一下,可以看到在flink建的表connect用的是jdbc,库叫做gmv表也叫作gmv

这样就建好了,首先看链路是否是正常打通的

可以的,现在还是空的还没有数据,这样链路就打通了,最后首先看一下交易的大屏是怎么样的

这就是刚才做的交易大屏,比较寒酸,但是会把最关键的信息,一个是总交易额,一个是总订单量这两个数据会展示出来,首先将交易大屏这个应用启动,它分成两个部分,第一部分是后端,也就是用spring boot开发的访问PolarDB - X去获取gmv那张表里面的数据这样的应用,先将它启动起来,然后需要做一下端口转化,连接大家可以忽略,先把前端应用启动起来

现在vue已经将前端的应用起来了,前端应用是在网上找的阿里比较有名的展示数字大屏的应用,有的是用vue做的类似的框架,现在直接把别人的demo拿过来做了一个修改,改完之后就是上面的一个效果

现在前端部分已经启动好了,接下来将后端的也就是数据的部分进行启动。

后端部分已经启动好了,在将后端的端口进行转发,后端监听的是8888端口

这样就转发过来了,首新疆前端的页面加载过来,之后前端页面也会做一个周期性的HTTP查询,这个查询查的是8888端口,也就是用spring boot写的后台提供数据的接口,Spring boot写的应用会去PolarDB - X里面将gmv那张表的数据获取过来,现在刷新一下交易大屏的页面,目前还是空的,接下来做个最关键的部分,也就是在flink里面让流计算跑起来,跑起来的意思是将orders那张表所有数据给查下来,然后计算里面的数据给sum,然后将结果写到gmv这张表里面,这样交易的大屏就可以看到了,可以来看一下c口

用了一个insert into select语句,select是从orders这张表里面你把所有的数据查出来,然后count一下order,然后sum一下price,把这条数据的主件定为一,然后再把这条数据insert回gmv,如果这条语句执行正常的话,PolarDB - X里面的gmv这张表执行完以后是空的,所以现在来看一下回到PolarDB - X这边

可以看到它里面已经有一条数据了,当前总交易额是90.75,订单有三条,说明云计算已经正式的在跑了,再来看一下交易大屏,并没有出来查看一下是什么原因,是spring boot的库表写的不太对,这里稍微改一下,Spring boot连接的库的名字是不对的,这边应该连接的是叫GMV的库,里面会有对应的GMV的表

改完之后重启客户端,再来看一下交易大屏的数据是否能够正确的出来

可以看到交易额已经变成了90元,订单数量是三个,这时交易大屏已经正常了,现在的业务交易库是PolarDB - X里面有订单这张表,通过flink将订单里面数据拉过来后,做了一个计算,计算得到了两个值,一个是总的订单量,一个是总的交易额,然后将这个结果写到PolarDB - X另一个库里,就一大瓶这个应用就会将里面的计算结果拿出来进行展示,这是目前已经做好的工作,接下来是最关键的一步,模拟双十一0点大量的订单进来了,这个交易大屏数据实时的有一个增加的过程,来看一下今天的效果能不能出来,为了演示简单的写了一个去买东西的产品的脚本,其实就是向订单表里面无脑的插入一些订单数据,现在启动另一个终端连接上ECS

可以看到里面有个脚本叫做buy.sh,他是一个shell脚本,简单的打开看一下

#!/ bin / bash

echo “ start buying .….“

ySqL -0eTgULtS- etrg -1LLe mySqL -Cont1g◇ Crt Dmydb e1nsertLnt OrderSVgLuesCdefout , noNO ◇fee6om1024,10Z0)

f !( C count %10); then

Let “ batCh

Count /10

echo Sbatch ": got 10 products , gave 1024¥'

sleep 0.05

这个脚本做的事情特别简单,每循环一次都连接上原端的PolarDB - X往里面insert了一条订单,现在来启动脚本,启动的一瞬间可以想象是0点双十一,按下回车键之后理论上交易大屏会在不停的滚动

 

可以看到这边每隔一段时间都会打印出现在已经买了十个东西,产生了十个订单,花了1024的钱,交易大屏的数字也在进行一个实时的滚动,交易额在增加,总的订单量也在增加,这个就是完成了,双十一0点时优衣库的交易额,现在因为知道原端比较小,所以交一个饭馆起来不如双十一交易额,不过,有效果,现在这个链路已经完全打通了,最源端是一个交易的系统,里面是用PolarDB - X创建的数据库做数据的存储,其中最关键的一张表就做订单表,用flink去拉取这张表增量的数据并进行实时计算,将总的订单数量,总交易额进行了计算,之后再写回PolarDB - X的另外一个库里面,之后交易大屏这个应用去PolarDB - X的库里面去获取实时的交易额以及订单量,呈现在了网页上面,这就是今天主要所讲内容。

 

所要讲解的重点是flink cdc里面用了他的mySQL cdc这样一个ID,也就是把原端的PolarDB - X当成一个mySQL去调用,这样也能够获取原端总量的数据,这样就证明了PolarDB - X全局Binlog以及mySQL Binlog一些参数上面的兼容性,这就是今天做的第二个demo,今天的demo大家可以看到其实依赖的重要特性是全局Binlog。

在即将结束的时候做一个预告,PolarDB - X是从去年开源的也就是10月20号,之后在1月份的时候做了一个小版本的更新,现在有三个月过去了,按照更新迭代的速度是时候应该再发布一个版本,只不过这次发布的版本会比较重量级,首先有了一个统一的产品的版本号叫做PolarDB - X2.1.0,里面会包含非常多,非常多的特性,其中有一项就是大家特别关心的三副本能力,还有其他n多的能力,这个发布会在近期非常短的时间。