Cassandra Amazon EC2,阅读性能实验

Asi*_*sim 6 amazon-ec2 iowait cassandra

我需要一些帮助来改善Cassandra的读取性能.随着列族的大小增加,我担心读取性能的下降.我们在单节点Cassandra上有以下统计数据.

操作系统: Linux - CentOS版本5.4(最终
)Cassandra版本: apache-cassandra-1.1.0
Java版本: "1.6.0_14"Java(TM)SE运行时环境(版本1.6.0_14-b08)Java HotSpot(TM)64 -Bit Server VM(build 14.0-b16,混合模式)

Cassandra配置:(cassandra.yaml)

  • rpc_server_type:hsha
  • disk_access_mode:mmap
  • concurrent_reads:64
  • concurrent_writes:32

平台: Amazon-ec2/Rightscale m1.Xlarge实例,带有4个临时磁盘和raid0.(15 GB总内存,4个虚拟内核,2个ECU,总ECU = 8)


实验配置: 我尝试用GC做一些实验

Cassandra配置:
10 GB RAM分配给Cassandra Heap,3500MB是堆新大小.

JVM配置:
JVM_OPTS ="$ JVM_OPTS -XX:+ UseParNewGC"
JVM_OPTS ="$ JVM_OPTS -XX:+ UseConcMarkSweepGC"
JVM_OPTS ="$ JVM_OPTS -XX:+ CMSParallelRemarkEnabled"
JVM_OPTS ="$ JVM_OPTS -XX:SurvivorRatio = 1000"
JVM_OPTS = "$ JVM_OPTS -XX:MaxTenuringThreshold = 0"
JVM_OPTS ="$ JVM_OPTS -XX:CMSInitiatingOccupancyFraction = 40"
JVM_OPTS ="$ JVM_OPTS -XX:+ UseCMSInitiatingOccupancyOnly -XX:+ UseCompressedOops"



OpsCenter社区2.0的结果统计信息:

读取请求每秒208到240
写入请求每秒18到28个
操作系统负载24.5到25.85
写入请求延迟127到160微处理器
读取请求延迟82202到94612微控制器
发送网络流量44646 KB平均每秒
操作系统接收网络流量4338 KB平均每个第二个
OS磁盘队列大小13到15请求
读取请求待定25到32

操作系统磁盘延迟48至56 ms
操作系统磁盘读取吞吐量
每秒4.6 Mb 磁盘IOP读取每秒420次

Iowait 80%CPU平均值

空闲13%的CPU平均值

Rowcache已禁用.



列系列我只读取的列系列之一是通过CLI创建的

create column family XColFam 
with column_type='Standard'  
and  comparator = CompositeType(BytesType,IntegerType)';"
Run Code Online (Sandbox Code Playgroud)

列族SSTable Size = 7.10 GB,SSTable Count = 2

XColFam专栏家族有59499904没有.估计的行键(大多数是具有不同长度的utf8文字,通过mx4jtools估计),其中列类似于自然界中的薄,值为0字节.....现在.

大多数行应该有非常少的列数,可能是1到10,所以列名称的第一个组件大约20到30个字节,第二个是8个字节整数....复合列的第二个组件是动态的可以重复但概率很低.......第一个成分在品种上重复,但行中的列数可能不同.

我试图SnappyCompression压缩列族,但大小没有变化.

我有一个计划的服务,运行了20个线程几个小时,并为这个列系列提供多个密钥的随机读取请求(现在每个请求有2个密钥)并读取完整行,没有列切片等.

我认为它现在表现不佳,因为它每分钟处理的请求太少.当柱子系列不那么大时,它的工作效果更好.它大约是3到4 GB.

我担心随着列族大小的增加,读取性能会降低得太快.

我还试图调整一些GC和内存的东西,因为在此之前我有很多GC和CPU使用.当数据量较小且波形非常小的时候.


我怎样才能提高Cassandra的性能.您的建议将不胜感激.

aho*_*ich 0

看起来 cassandra 是相对 I/O 依赖的。EC 实例在设计上有“不足”的 I/O(Xen 虚拟化),我的第一个建议是在真实的硬件上使用 Cassandra,您可以在其中进行控制。例如,您可以使用 SSD 磁盘来存储 CommitLog。查看Cassandra 硬件建议

然而,切换到自己的硬件是一个有点激进的选择。要继续使用 Amazon,请尝试EBS

Amazon Elastic Block Store (EBS) 提供块级存储卷以与 Amazon EC2 实例一起使用。Amazon EBS 卷是网络连接的,并且独立于实例的生命周期持续存在。Amazon EBS 提供高度可用、高度可靠、可预测的存储卷,这些存储卷可以附加到正在运行的 Amazon EC2 实例并作为实例内的设备公开。Amazon EBS 特别适合需要数据库、文件系统或访问原始块级存储的应用程序。

Amazon EBS 允许您创建 1 GB 到 1 TB 的存储卷,这些存储卷可以由 Amazon EC2 实例作为设备安装。多个卷可以安装到同一个实例。Amazon EBS 使您能够根据需要通过选择预配置 IOPS 卷来预配置特定级别的 I/O 性能。这使您可以按预测将每个 Amazon EC2 实例扩展到数千个 IOPS。

另请查看EC2 上的 Cassandra 性能测试