小数据量用户场景使用KunlunBase的价值
前言
在一个公司或者部门的新业务发展的起步阶段,其用户的数据量通常并不大,比如只有数十GB以内,一个MySQL主备复制集群就可以轻松搞定。那么这种情况下,使用 KunlunBase 有什么价值呢?其实仍然有巨大的价值,本文就全面地回答这个问题。
高可用性
Kunlun-storage Fullsync的高性能强同步功能,确保了每个kunlun-storage shard的高可用能力。
同时, KunlunBase 的cluster_mgr模块会自动完成主节点探活,自动&手动选主,自动切换到新主节点等工作,使得昆仑数据库的具备完善的自动高可用能力,无需用户干预。
相比于MySQL Group Replication或者semisync replication, KunlunBase 具有更高的性能和更短的延时,并且对计算资源消耗更低。
原因如下:
MGR需要在Flush事务的binlog之前持锁等待备机确认(ACK)收到事务的binlog,这样就会长时间阻塞所有与这些正在等待ack的事务有事务锁冲突的所有活跃事务,从而降低了系统并发处理能力,并且延长了那些被阻塞的事务的运行时间,影响了业务系统的响应速度。而Kunlun-storage Fullsync做after-commit等待,等待备机收到binlog的确认之前,已经释放了它持有的事务锁,所以不会因为等待备机应答而阻塞那些与之冲突的事务。
同时,fullsync在等待备机ACK期间不需要占用工作线程,而semisync和MGR都需要占用工作线程,这就导致MySQL需要启动更多的工作线程应对业务负载。每一个工作线程都会消耗CPU时间片,内存以及需要OS管理它们的状态,这些都是对计算资源的消耗。
由于这些技术优势,kunlun-storage fullsync在sysbench等性能测试中比MGR有多达到5倍的性能优势。
高性能
不仅kunlun-storage比MySQL有更好的replication性能,而且KunlunBase在数据分析,查询处理等方面具备一系列高性能和可扩展能力,具体如下。
- 读写分离
计算节点执行只读查询语句(即select语句)时,可以自动向存储集群的备机节点发送select查询获取数据,来执行select查询语句。
这个行为不需要用户干预,这样用户程序就不需要修改即可使用该功能。当然,用户也可以在一个连接中或者全局层面关闭此功能。通过在备机执行只读查询可以降低主节点的负载。
不过需要注意的是,有些只读查询并不能发送到备机,比如更新了一个表之后在同一个事务中查询这个表的数据,此时为了确保查询到新的数据,避免产生不一致的查询结果,这个select语句默认就不能发送到备机去执行,除非用户降低了一致性级别强制读取备机的可能旧的数据。
也就是说读写分离技术并不总是能分摊主节点的负载,这对于任何分布式数据库或者分库分表中间价都是这样。
KunlunBase支持并行select查询,包括计算节点内的并行查询处理,计算节点与存储节点之间的并行查询和存储节点内部的并行查询。
- 并行select查询
这三个层面的并行处理能力大大提升了 KunlunBase 的查询性能,特别是对数据分析类的复杂查询性能提升巨大。
计算节点内的并行是指多个线程执行查询计划的特定节点。在kunlun-server的一部分查询处理功能具备并行查询能力,包括NestedLoopJoin,HashJoin,MergeJoin,Append,Aggregate等节点;这部分并行能力是继承自PostgreSQL。
计算节点与存储节点之间的并行:是指计算节点可以异步发送SQL语句读写存储节点的目标数据,这样含有目标数据的所有存储节点就会并行执行收到的SQL语句;这是 KunlunBase 从初公开发布的0.6版本就具备的能力,也是我们自研的技术。
存储节点内的并行:当计算节点有多条只读select语句发送到同一个存储集群时,计算节点会开启多个连接到这个目标存储节点,在每个连接中执行一个select语句,这些select语句在这个存储节点中是并行执行的。
这样,计算节点就可以利用到存储节点的更多的计算资源同时服务同一个查询请求。这个功能在昆仑数据库1.0版本中会发布,也是我们自研的技术。
- 数据分析功能
无论一个 KunlunBase 集群有几个storageshard,用户都可以部署若干个计算节点专门用于数据分析类查询的处理,这些计算节点使用读写分离技术从这些storage shard的备机节点获取数据来执行分析语句,因而不会影响OLTP 负载的性能。
KunlunBase的计算节点支持完备的数据分析功能,通过了所有TPC-H, TPC-DS的性能测试,这是MySQL不具备的能力。具体来说,kunlun-server支持所有的window function,grouping sets, cube,rollup等功能,而MySQL只支持rollup和一部分window function功能。
KunlunBase的全集群多级并行查询处理能力,带来数据分析类查询的性能飞跃。
- 充分利用硬件资源
使用简单的一个MySQL一主两备的集群,需要3台机器,但是这3台机器中只有主节点可以承担写入负载,其CPU和IO负载通常比备机较高。
而使用 KunlunBase 后,在3台机器使用对等部署模式部署一个 KunlunBase 集群,这个集群有3个存储shard,每个机器都有其中一个shard的主节点和另外两个shard的一个备节点(如下图),这样就把计算和写入负载以及应用发起的连接总数平均分摊到3台机器中,充分利用每一台机器的计算资源,实现集群整体更高的吞吐能力和性能。
全面而灵活的集群管理功能
KunlunBase支持完备的集群管理功能,包括自动的集群备份和全局一致性的恢复,水平弹性扩容,增删启停计算节点,增删存储集群和存储节点,重做备机,自动或者手动的主备切换,业务无感知的Online DDL等等。
- 可编程的基础集群管理API
并且所有这些功能都有对应的API接口,因此外部软件系统可以可编程的方式操作和使用 KunlunBase 的集群管理功能,例如可以非常方便地集成到用户的数据库集群管理界面中。
- 预留水平扩容能力
随着用户业务规模的增长,一个 KunlunBase 集群即使当前使用一个存储shard,以后也可以自动的应用无感知的方式水平弹性扩容到多个存储shard,只要用户给集群分配了更多的服务器节点即可,不需要DBA的其他干预。这样用户就不需要担心如何应对数据规模在未来不断的增长。
自动的水平弹性扩容期间,昆仑数据库集群并不会锁表,不影响应用程序运行。
KunlunBase各模块的运行日志,慢查询日志和其他日志文件中包含集群各模块丰富的运行时信息,这些日志被昆仑数据库用于图形化的半自动的故障诊断,帮助DBA迅速准确地定位问题。
- 图形化的运行监控和故障诊断及告警
同时,借助prometheus+grafana的流行的监控系统组合,实现了集群节点监控。还可以以短信、电话等多种形式做告警,通知DBA及时处理问题。
数据库迁移工作量
从其他数据库系统迁移到 KunlunBase ,灌入数据这部分使用第三方工具即可完成。
通常难度和工作量比较大的是对应用系统的改造,在这方面我们做了大量工作帮助用户轻松地从MySQL和Oracle Server迁移到 KunlunBase 。
KunlunBase支持PostgreSQL和MySQL两种连接协议,在每一种协议中都可以发送KunlunDB支持的任何SQL语句。
- MySQL兼容性
这样,就可以利用到比MySQL更加广泛的数据存储管理和利用能力,例如 KunlunBase 的OLAP分析能力,性能远远优于MySQL。
同时, KunlunBase 支持MySQL的私有DML语法,详见这篇文章( KunlunBase 对MySQL私有DML语法的支持)。
对于MySQL 特有的(也就是没有定义在SQL标准中的)SQL函数,我们会按需增加支持,这包括除了GIS函数和JSON函数之外的所有MySQL特有函数。增加一个这样的函数难度很小,我们后续也可能会抽调资源统一把所有此类函数在昆仑数据库计算节点中实现出来。
这样,原本使用MySQL的应用软件不需要任何代码修改或者重新编译,可以直接连接到 KunlunBase 。
KunlunBase继承了PostgreSQL对Oracle数据库的兼容性,包括支持PL/SQL和SQL-2003的绝大多数功能。
- Oracle兼容性
其他Oracle特有功能,用户需要完成应用侧代码修改(通常需要修改少量存储过程和SQL查询语句),并且可以借助一些第三方工具简化和提速这些工作。
如果应用程序原本使用ODBC或者JDBC连接Oracle数据库,那么不需要任何代码修改就可以连接到 KunlunBase ;否则还需要修改应用侧代码,使用相应的编程语言针对PostgreSQL的客户端库来连接到 KunlunBase 。
点击阅读原文
推荐阅读
KunlunBase架构介绍
KunlunBase技术优势介绍
KunlunBase技术特点介绍
KunlunBase集群基本概念介绍-END-
昆仑数据库是一个HTAP NewSQL分布式数据库管理系统,可以满足用户对海量关系数据的存储管理和利用的全方位需求。
应用开发者和DBA的使用昆仑数据库的体验与单机MySQL和单机PostgreSQL几乎完全相同,因为首先昆仑数据库支持PostgreSQL和MySQL双协议,支持标准SQL:2011的 DML 语法和功能以及PostgreSQL和MySQL对标准 SQL的扩展。同时,昆仑数据库集群支持水平弹性扩容,数据自动拆分,分布式事务处理和分布式查询处理,健壮的容错容灾能力,完善直观的监测分析告警能力,集群数据备份和恢复等 常用的DBA 数据管理和操作。所有这些功能无需任何应用系统侧的编码工作,也无需DBA人工介入,不停服不影响业务正常运行。
昆仑数据库具备全面的OLAP 数据分析能力,通过了TPC-H和TPC-DS标准测试集,可以实时分析新的业务数据,帮助用户发掘出数据的价值。昆仑数据库支持公有云和私有云环境的部署,可以与docker,k8s等云基础设施无缝协作,可以轻松搭建云数据库服务。
请访问 http://www.kunlunbase.com/ 获取更多信息并且下载昆仑数据库软件、文档和资料。
KunlunBase 项目已开源
【GitHub:】
https://github.com/zettadb
【Gitee:】
https://gitee.com/zettadb
相关文章