透明分布式,这是PolarDB-X即将推出的能力,可以让应用像使用单机数据库一样使用PolarDB-X所以-所以经验。相对于传统的中间件类型的“分布式数据库”,具有透明分布式能力的PolarDB-X不再需要考虑partitionkey的概念。应用可以完全使用建表语句和应用代码直接迁移到PolarDB-X上运行。本文将为您介绍PolarDB-X透传分发新体验。在PolarDB-X上安装WordPressWordPress是一个使用MySQL作为数据库的开源博客软件。操作是在PolarDB-X上安装一个WordPress,体验PolarDB-X的透明分布式能力。我们将遵循一个简单的三步流程:不修改DDL,不修改应用直接建表,直接运行压测和下调。建表、数据初始化等工作在PolarDB-X上完成,使用标准的MySQL语法。进行了WordPress压测,PolarDB-X的监控数据显示各节点的负载和数据量处于均衡状态。借助PolarDB-X提供的SQL分析、DAS等工具,可以轻松发现系统中的热点SQL。DBA可以通过创建索引、修改数据分布等DDL语句直接优化系统性能,无需修改应用程序。PolarDB-X实现透明分布式的利器下面跟大家分享下PolarDB-X是如何实现透明分布式的。数据透明分区PolarDB-X是一个典型的ShareNothing分布式数据库。其简化架构如下:核心组件为无状态计算节点CN和有状态存储节点DN。要了解PolarDB-X的透明分布式能力,首先要了解数据在PolarDB-X上是如何分布的。在PolarDB-X中,一张表由多个索引组成,包括主键、二级索引等。PolarDB-X会对每个索引进行独立分区,其分区键就是索引的key。例如,在一个典型的电子商务场景中,订单表有一个主键(id)和两个索引(seller_id和buyer_id):createtableorders(idbigint,buyer_idvarcharcomment'buyer',seller_idvarcharcomment'seller',primarykey(id),indexsdx(seller_id),indexbdx(buyer_id))对于主键索引,会根据id进行分区对于索引sdx,会根据seller_id进行分区对于索引bdx,会根据buyer_id进行分区As如下图所示:索引分片后,PolarDB-X会将这些分片分散到不同的存储节点中,并根据数据量等信息进行负载均衡,如下图所示:在PolarDB-X中,在建表语句中可以忽略partitionkey,同时PolarDB-X也可以自动对表进行分片和负载均衡。因此,当应用迁移到PolarDB-X时,可以导出单机MySQL中的建表语句,无需修改直接在PolarDB-X中执行。透明的分布式事务分布式事务是PolarDB-X最重要的基础能力。广泛应用于业务中,避免了业务对事务代码的改造。同时,PolarDB-X内部也使用事务来实现索引。PolarDB-X的分布式事务有如下特点:和Spanner一样,满足外部一致性,最强级别的一致性。语法完全兼容MySQL,无需修改应用程序。该行为支持与MySQL兼容的RC和RR级别。在线DDLPolarDB-X支持多种在线DDL。下面介绍一些有代表性的DDL类型。索引维护不同于单机MySQL。PolarDB-X的索引都是全局索引,包括以下几种类型:普通索引、唯一索引、聚集索引,聚集索引是PolarDB-X相对于MySQL的一种新型索引。索引,它将包含表中的所有列,从而避免了返回表的成本。PolarDB-X中索引的创建是通过DDL来完成的,并且都是在线的,不会阻塞业务。例如:创建普通索引:CREATEINDEXidx1ONt1(name)创建聚簇索引:CREATECLUSTEREDINDEXidx1ONt1(name)INSTANTADDCOLUMN添加列操作是业务中最常见的DDL类型。在MySQL中,添加列的时间消耗与数据量有关(在MySQL8.0中,表尾添加列是INSTANT)。在PolarDB-X中,在任意位置添加一列都是INSTANT,即添加一列耗时恒定秒级,与数据量无关,不会对业务造成任何影响。分区调整PolarDB-X支持四种表分布策略,Hash、Range、List、Broadcast。由于Hash可以避免连续写入的热点,PolarDB-X默认使用Hash策略。在大多数情况下,这种策略可以很好地满足系统的性能需求。但是,在业务运行过程中,如果想选择合适的分区策略来提升系统性能,可以通过PolarDB-X中的DDL语句轻松调整,PolarDB-X会根据新的分区策略对表中的数据进行重组。例如:修改表的分区策略为Hash:ALTERTABLEt1PARTITIONBYHASH(name)修改表的分片数为32:ALTERTABLEt1PARTITIONBYHASH(name)PARTITIONS32将表改为广播table:ALTERTABLEt1BROADCAST修改表的分区策略为RANGE:ALTERTABLEt1PARTITIONBYRANGE(id)任意两种分区策略都可以通过DDL语句进行转换:回填速度自适应很多同学肯定有过这样的经历:超大表DDL操作,由于数据量比较大,本次DDL操作一天内完成不了。为了避免对业务造成影响,人肉在白天业务高峰期到来时调整参数,降低DDL回填速度,在业务高峰期结束后的晚上,提高DDL的回填速度。PolarDB-X中的backfill会根据当前系统负载自动调整速度。例如:在这个例子中,有四个阶段:开始没有业务负载,DDL回填速度上升到25W线/s,业务负载开始上升,DDL回填速度迅速下降到13W线/s,业务TPS稳定在1W5,DDL回填速度稳定在13W线/sDDL端,业务TPS稳定在1W6。从这个例子可以看出,PolarDB-XDDL的回填速度会根据业务负载自动调整,在DDL期间,对业务的TPS影响不大。MakeOnlineMoreOnline为了进一步降低DDL期间对业务的影响,PolarDB-X还使用了多项技术,例如:元数据多版本,参见:https://zhuanlan.zhihu.com/p/347885003可以挂起,可以取消MDL死锁检测,总结PolarDB-X的透明分布式能力,将大大降低应用从单机数据库迁移到分布式数据库的成本。同时,我们将在未来使其更加透明。我们正在做的一些事情包括:更精细的调度策略、热点数据的可视化展示、智能诊断与SQL审计分析联动、支持在有全局索引时进行分区Leveltruncatedatascrolling、cleaning等。
