Apache Cassandra和Apache Ignite:对比测试,强大的内存计算
2018-04-08 15:16
691 查看
一个被频繁提出的问题就是,Apache Cassandra和Apache Ignite之间的区别是什么,这很正常,因为这两个数据库有很多的共同之处,比如水平扩展性、高可用和持久化。在本系列的前四篇文章中,已经介绍了了架构以及从开发角度上的主要区别:
Apache Cassandra和Apache Ignite: 架构简化思考
Apache Cassandra和Apache Ignite:关系并置和分布式SQL
Apache Cassandra和Apache Ignite:强一致和事务
Apache Cassandra和Apache Ignite:通过Ignite增强Apache Cassandra
在对比Ignite和Cassandra时,还有一个无法回避的问题,现在也需要揭晓答案,问题很简单,就是两者的性能差异如何?从哪里可以得到性能测试结果?
自从Ignite完整支持内存存储之后,两者之间的测试就变得不再对等,因为Ignite可以在内存中持有TB甚至PB级的数据,而Cassandra的内存选项非常有限。但是,不管怎样,测试一下性能指标然后分享出来,还是有价值的。
常规参数
硬件:
CPU:2x Xeon E5-2609 v4 1.7GHz
RAM:96Gb
SSD:3x800Gb SSD RAID0 2.4Tb
网络:10Gb/s
集群大小:3服务端节点,1客户端节点(应用)
测试框架:Yahoo! Cloud Serving Benchmark
数据大小:8000万条目/记录
Ignite参数
版本:Apache Ignite 2.4
内存配置:所有数据都同时存储在内存以及Ignite持久化中
缓存模式:ATOMIC
复制因子:1主1备
写同步模式:FULL_SYNC
WAL刷新模式:LOG_ONLY
Cassandra参数
版本:3.11.1
键空间:2副本
写一致性:ALL
读一致性:ONE
commitlog_sync:periodic(默认),10s
JVM_OPTS="-Xm48g -Xmx48g -Xmn1600M -XX:+UseG1GC"
key_cache_size_in_mb: 4096
row_cache_size_in_mb: 32768
caching = { 'rows_per_partition' : 'ALL' }
bloom_filter_fp_chance = 0.01
读测试执行两次,对缓存进行预热
Y轴表示每秒操作数,X轴表示度量的操作类型,总而言之,这一轮测试告诉我们:
对于读负载,Ignite显著优于Cassandra(快3倍),对于混合负载(读+更新,快2倍),这很正常,因为Ignite在内存中有数据的完整副本;
对于密集的写负载(插入和更新),两者差不多,因为两者都需要将变更持久化到磁盘。
接下来,会使用256个应用线程并行地增加负载:
会发现,两者都发生了明显的变化:
Ignite保持了在读负载和混合负载下的领先优势,平均快6倍;
Cassandra在更新操作中领先,这是合理的,因为Cassandra列式存储在架构上对这些操作有利,所以本次测试在预期范围内对其进行了重现,而Ignite继承了大部分关系数据库的原则,比如对一致性和索引数据的处理。
此外,作为整个系列的总结,公平地讲,虽然性能对决策有很大的影响,但是还有很多其他的因素需要考虑。比如,因为写密集型负载的性能而选择了Cassandra的,就放弃了分布式事务的强一致性、放弃了规范化架构、放弃了使用SQL进行查询的优势。同时,如果确实需要Ignite中超过Cassandra的功能(简化架构、强一致、并置处理和SQL、内存级性能),那么对于写密集负载考虑使用Ignite也是符合逻辑的,因为从测试结果来说,两者在中等规模写负载情况下,性能差不多。
最后,本文和测试完成于2018年3月15日,谁知道未来会怎么样呢?拭目以待吧。
本文译自社区Denis Magda的博客。
Apache Cassandra和Apache Ignite: 架构简化思考
Apache Cassandra和Apache Ignite:关系并置和分布式SQL
Apache Cassandra和Apache Ignite:强一致和事务
Apache Cassandra和Apache Ignite:通过Ignite增强Apache Cassandra
在对比Ignite和Cassandra时,还有一个无法回避的问题,现在也需要揭晓答案,问题很简单,就是两者的性能差异如何?从哪里可以得到性能测试结果?
自从Ignite完整支持内存存储之后,两者之间的测试就变得不再对等,因为Ignite可以在内存中持有TB甚至PB级的数据,而Cassandra的内存选项非常有限。但是,不管怎样,测试一下性能指标然后分享出来,还是有价值的。
环境和配置
下面快速浏览一下测试环境以及Ignite和Cassandra配置参数的细节,没什么特别的,这类文章都会有这样的内容。常规参数
硬件:
CPU:2x Xeon E5-2609 v4 1.7GHz
RAM:96Gb
SSD:3x800Gb SSD RAID0 2.4Tb
网络:10Gb/s
集群大小:3服务端节点,1客户端节点(应用)
测试框架:Yahoo! Cloud Serving Benchmark
数据大小:8000万条目/记录
Ignite参数
版本:Apache Ignite 2.4
内存配置:所有数据都同时存储在内存以及Ignite持久化中
缓存模式:ATOMIC
复制因子:1主1备
写同步模式:FULL_SYNC
WAL刷新模式:LOG_ONLY
Cassandra参数
版本:3.11.1
键空间:2副本
写一致性:ALL
读一致性:ONE
commitlog_sync:periodic(默认),10s
JVM_OPTS="-Xm48g -Xmx48g -Xmn1600M -XX:+UseG1GC"
key_cache_size_in_mb: 4096
row_cache_size_in_mb: 32768
caching = { 'rows_per_partition' : 'ALL' }
bloom_filter_fp_chance = 0.01
读测试执行两次,对缓存进行预热
预期结果
首先,使用32个应用线程,模拟小负载访问Ignite和Cassandra,下图是最终的测试结果:Y轴表示每秒操作数,X轴表示度量的操作类型,总而言之,这一轮测试告诉我们:
对于读负载,Ignite显著优于Cassandra(快3倍),对于混合负载(读+更新,快2倍),这很正常,因为Ignite在内存中有数据的完整副本;
对于密集的写负载(插入和更新),两者差不多,因为两者都需要将变更持久化到磁盘。
接下来,会使用256个应用线程并行地增加负载:
会发现,两者都发生了明显的变化:
Ignite保持了在读负载和混合负载下的领先优势,平均快6倍;
Cassandra在更新操作中领先,这是合理的,因为Cassandra列式存储在架构上对这些操作有利,所以本次测试在预期范围内对其进行了重现,而Ignite继承了大部分关系数据库的原则,比如对一致性和索引数据的处理。
Ignite还是Cassandra?
如果性能需求和严格的SLA影响最终决定,那么对于高负载情况下的写密集应用,Cassandra会是一个好的选择,而对于Ignite,在重度的读或者混合负载下,会有超预期的表现。此外,作为整个系列的总结,公平地讲,虽然性能对决策有很大的影响,但是还有很多其他的因素需要考虑。比如,因为写密集型负载的性能而选择了Cassandra的,就放弃了分布式事务的强一致性、放弃了规范化架构、放弃了使用SQL进行查询的优势。同时,如果确实需要Ignite中超过Cassandra的功能(简化架构、强一致、并置处理和SQL、内存级性能),那么对于写密集负载考虑使用Ignite也是符合逻辑的,因为从测试结果来说,两者在中等规模写负载情况下,性能差不多。
最后,本文和测试完成于2018年3月15日,谁知道未来会怎么样呢?拭目以待吧。
本文译自社区Denis Magda的博客。
相关文章推荐
- Ignite与Spark内存计算平台对比分析
- apache 占用内存总量与每个apache进程的平均内存占用量计算
- nginx和apache并发性能测试对比
- 云计算之路:用阿里云 vs Azure的对比测试揭开乌云的面纱
- linux上apache并发数与服务器内存关系计算!
- C# 计算时间差/运行耗时计算/时间计数器(非DateTime相减方法,Stopwatch类)及 与DateTime的对比测试
- Ignite内存计算平台与Oracle TimesTen Scaleout对比
- nginx折腾记(HTTP性能能测试,与Apache对比)
- 模拟器 真机 测试 内存消耗 资源对比
- nginx折腾记(HTTP性能能测试,与Apache对比)
- 润乾报表与集算报表的计算性能对比测试
- nginx折腾记(HTTP性能能测试,与Apache对比)
- 优化系列 | MySQL Cluster 7.2.7内存表和磁盘表对比测试
- 分布式内存组织框架Apache Ignite 资源分享
- nginx折腾记(HTTP性能能测试,与Apache对比)
- Apache Ignite——集合分布式缓存、计算、存储的分布式框架
- tcmalloc jemalloc glibc内存分配管理模块性能测试对比
- nginx折腾记(HTTP性能能测试,与Apache对比)
- nginx折腾记(HTTP性能能测试,与Apache对比)
- [置顶]C#中使用Redis不同数据结构的内存占有量的疑问和对比测试