前言
在一个公司或者部门的新业务倒退的起步阶段,其用户的数据量通常并不大,比方只有数十GB以内,一个MySQL主备复制集群就能够轻松搞定。那么这种状况下,应用KunlunDB有什么价值呢?其实依然有微小的价值,本文就全面地答复这个问题。
高可用性
Kunlun-storage Fullsync的高性能强同步性能,确保了每个kunlun-storage shard的高可用能力。
同时,KunlunDB的cluster_mgr模块会主动实现主节点探活,主动&手动选主,主动切换到新主节点等工作,使得昆仑数据库的具备欠缺的主动高可用能力,无需用户干涉。
相比于MySQL Group Replication或者semisync replication,KunlunDB具备更高的性能和更短的延时,并且对计算资源耗费更低。
起因如下:
- 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性能,而且KunlunDB在数据分析,查询处理等方面具备一系列高性能和可扩大能力,具体如下。
- 读写拆散
计算节点执行只读查问语句(即select语句)时,能够主动向存储集群的备机节点发送select查问获取数据,来执行select查问语句。
这个行为不须要用户干涉,这样用户程序就不须要批改即可应用该性能。当然,用户也能够在一个连贯中或者全局层面敞开此性能。通过在备机执行只读查问能够升高主节点的负载。
不过须要留神的是,有些只读查问并不能发送到备机,比方更新了一个表之后在同一个事务中查问这个表的数据,此时为了确保查问到最新的数据,防止产生不统一的查问后果,这个select语句默认就不能发送到备机去执行,除非用户升高了一致性级别强制读取备机的可能旧的数据。
也就是说读写拆散技术并不总是能分摊主节点的负载,这对于任何分布式数据库或者分库分表中间价都是这样。
- 并行select查问
KunlunDB反对并行select查问,包含计算节点内的并行查询处理,计算节点与存储节点之间的并行查问和存储节点外部的并行查问。
这三个层面的并行处理能力大大晋升了KunlunDB的查问性能,特地是对数据分析类的简单查问性能晋升微小。
计算节点内的并行是指多个线程执行查问打算的特定节点。在kunlun-server的一部分查询处理性能具备并行查问能力,包含NestedLoopJoin,HashJoin,MergeJoin,Append,Aggregate等节点;这部分并行能力是继承自PostgreSQL。
计算节点与存储节点之间的并行:是指计算节点能够异步发送SQL语句读写存储节点的指标数据,这样含有指标数据的所有存储节点就会并行执行收到的SQL语句;这是KunlunDB从最后公开公布的0.6版本就具备的能力,也是咱们自研的技术。
存储节点内的并行:当计算节点有多条只读select语句发送到同一个存储集群时,计算节点会开启多个连贯到这个指标存储节点,在每个连贯中执行一个select语句,这些select语句在这个存储节点中是并行执行的。
这样,计算节点就能够利用到存储节点的更多的计算资源同时服务同一个查问申请。这个性能在昆仑数据库1.0版本中会公布,也是咱们自研的技术。
- 数据分析性能
无论一个KunlunDB集群有几个storageshard,用户都能够部署若干个计算节点专门用于数据分析类查问的解决,这些计算节点应用读写拆散技术从这些storage shard的备机节点获取数据来执行剖析语句,因此不会影响OLTP 负载的性能。
KunlunDB的计算节点反对齐备的数据分析性能,通过了所有TPC-H, TPC-DS的性能测试,这是MySQL不具备的能力。
具体来说,kunlun-server反对所有的window function,grouping sets, cube,rollup等性能,而MySQL只反对rollup和一部分window function性能。
KunlunDB的全集群多级并行查询处理能力,带来数据分析类查问的性能飞跃。
- 充分利用硬件资源
应用最简略的一个MySQL一主两备的集群,须要3台机器,然而这3台机器中只有主节点能够承当写入负载,其CPU和IO负载通常比备机较高。
而应用KunlunDB后,在3台机器应用对等部署模式部署一个KunlunDB集群,这个集群有3个存储shard,每个机器都有其中一个shard的主节点和另外两个shard的一个备节点(如下图),这样就把计算和写入负载以及利用发动的连贯总数均匀摊派到3台机器中,充分利用每一台机器的计算资源,实现集群整体更高的吞吐能力和性能。
全面而灵便的集群治理性能
- 可编程的根底集群治理API
KunlunDB反对齐备的集群治理性能,包含主动的集群备份和全局一致性的复原,程度弹性扩容,增删启停计算节点,增删存储集群和存储节点,重做备机,主动或者手动的主备切换,业务无感知的Online DDL等等。
并且所有这些性能都有对应的API接口,因而内部软件系统能够可编程的形式操作和应用KunlunDB的集群治理性能,例如能够十分不便地集成到用户的数据库集群治理界面中。
- 预留程度扩容能力
随着用户业务规模的增长,一个KunlunDB集群即便以后应用一个存储shard,当前也能够主动的利用无感知的形式程度弹性扩容到多个存储shard,只有用户给集群调配了更多的服务器节点即可,不须要DBA的其余干涉。这样用户就不须要放心如何应答数据规模在将来一直的增长。
主动的程度弹性扩容期间,昆仑数据库集群并不会锁表,不影响利用程序运行。
- 图形化的运行监控和故障诊断及告警
KunlunDB各模块的运行日志,慢查问日志和其余日志文件中蕴含集群各模块丰盛的运行时信息,这些日志被昆仑数据库用于图形化的半自动的故障诊断,帮忙DBA迅速精确地定位问题。
同时,借助prometheus+grafana的风行的监控零碎组合,实现了集群节点监控。还能够以短信、电话等多种形式做告警,告诉DBA及时处理问题。
数据库迁徙工作量
从其余数据库系统迁徙到KunlunDB,灌入数据这部分应用第三方工具即可实现。
通常难度和工作量比拟大的是对利用零碎的革新,在这方面咱们做了大量工作帮忙用户轻松地从MySQL和Oracle Server迁徙到KunlunDB。
- MySQL兼容性
KunlunDB反对PostgreSQL和MySQL两种连贯协定,在每一种协定中都能够发送KunlunDB反对的任何SQL语句。
这样,就能够利用到比MySQL更加宽泛的数据存储管理和利用能力,例如KunlunDB的OLAP剖析能力,性能远远优于MySQL。
同时,KunlunDB反对MySQL的公有DML语法,详见这篇文章(KunlunDB对MySQL公有DML语法的反对)。
对于MySQL 特有的(也就是没有定义在SQL规范中的)SQL函数,咱们会按需减少反对,这包含除了GIS函数和JSON函数之外的所有MySQL特有函数。减少一个这样的函数难度很小,咱们后续也可能会抽调资源对立把所有此类函数在昆仑数据库计算节点中实现进去。
这样,本来应用MySQL的应用软件不须要任何代码批改或者从新编译,能够间接连贯到KunlunDB。
- Oracle兼容性
KunlunDB继承了PostgreSQL对Oracle数据库的兼容性,包含反对PL/SQL和SQL-2003的绝大多数性能。
其余Oracle特有性能,用户须要实现利用侧代码批改(通常须要批改大量存储过程和SQL查问语句),并且能够借助一些第三方工具简化和提速这些工作。
如果应用程序本来应用ODBC或者JDBC连贯Oracle数据库,那么不须要任何代码批改就能够连贯到KunlunDB;否则还须要批改利用侧代码,应用相应的编程语言针对PostgreSQL的客户端库来连贯到KunlunDB。
-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.zettadb.com/ 获取更多信息并且下载昆仑数据库软件、文档和材料。
KunlunDB我的项目已开源
【GitHub:】
https://github.com/zettadb
【Gitee:】
https://gitee.com/zettadb