Amazon ec2 Cassandra Amazon EC2,阅读性能实验

Amazon ec2 Cassandra Amazon EC2,阅读性能实验,amazon-ec2,cassandra,iowait,Amazon Ec2,Cassandra,Iowait,我需要一些帮助来提高卡桑德拉的阅读能力。我担心随着列族的增大,读取性能会下降。我们对单节点Cassandra有以下统计信息 操作系统:Linux-CentOS 5.4版(最终版) Cassandra版本:apache-Cassandra-1.1.0 Java版本:“1.6.0\u 14” Java(TM)SE运行时环境(build 1.6.0_14-b08) Java HotSpot(TM)64位服务器虚拟机(构建14.0-b16,混合模式) 卡桑德拉配置:(Cassandra.yaml) r

我需要一些帮助来提高卡桑德拉的阅读能力。我担心随着列族的增大,读取性能会下降。我们对单节点Cassandra有以下统计信息

操作系统:Linux-CentOS 5.4版(最终版)
Cassandra版本:apache-Cassandra-1.1.0
Java版本:“1.6.0\u 14” Java(TM)SE运行时环境(build 1.6.0_14-b08) Java HotSpot(TM)64位服务器虚拟机(构建14.0-b16,混合模式)

卡桑德拉配置:(Cassandra.yaml)

  • rpc_服务器_类型:hsha
  • 磁盘访问模式:mmap
  • 并发读数:64
  • 并发写入:32
平台:Amazon-ec2/Rightscale m1.Xlarge实例,带有4个临时磁盘和raid0。(15 GB总内存,4个虚拟核,2个ECU,总ECU=8)


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

卡桑德拉配置:
10 GB RAM分配给Cassandra堆,3500MB是堆的新大小

JVM配置:
JVM_OPTS=“$JVM_OPTS-XX:+UseParNewGC”
JVM_OPTS=“$JVM_OPTS-XX:+UseConMarkSweepGC”
JVM_OPTS=“$JVM_OPTS-XX:+cmsparallelremarketabled”
JVM_OPTS=“$JVM_OPTS-XX:SurvivorRatio=1000”
JVM_OPTS=“$JVM_OPTS-XX:MaxTenuringThreshold=0”
JVM_OPTS=“$JVM_OPTS-XX:cmSinitiatingOccinecyFraction=40”
JVM_OPTS=“$JVM_OPTS-XX:+UseCmSinitiatingOccupancy-XX:+UseCompressedOops”


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

每秒读取请求208到240次
每秒写入18到28个请求
操作系统负载24.5到25.85
写入请求延迟127到160微秒

读取请求延迟82202到94612微秒
操作系统发送的网络流量平均每秒44646 KB
操作系统平均每秒接收到4338 KB的网络流量
操作系统磁盘队列大小13到15个请求
读取挂起的请求25到32个

操作系统磁盘延迟48到56毫秒
操作系统磁盘读取吞吐量每秒4.6 Mb
磁盘IOPs每秒读取420次

IOWait 80%CPU平均值

平均13%CPU空闲

行缓存已禁用


柱族
我仅从中读取的一个列族是通过CLI创建的

创建柱族XColFam
带列\u type='Standard'
和comparator=CompositeType(ByTestType,IntegerType)';"
列族SSTable Size=7.10 GB,SSTable Count=2

XColFam
column系列现在有59499904个估计行键(大多数是长度不同的utf8文本,通过mx4jtools估计),列的性质类似于thin,值为0字节

大多数行的列数应该非常少,可能是1到10,因此列名称的第一个部分大约有20到30个字节,第二个部分是8个字节的整数……复合列的第二个部分是动态的,可以重复,但概率很低……第一个部分在不同的地方重复,但行中的列数可能不同

我尝试了
SnappyCompression
来压缩列族,但大小没有变化

我有一个定时服务,它运行了20个线程数小时,并对该列族的多个键(现在每个请求2个键)发出随机读取请求,并读取整行、无列切片等

我认为它现在的性能不好,因为它每分钟处理的请求太少了。以前,当列族的大小不是那么大时,它工作得更好。它大约是3到4 GB

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

我也尝试过调整一些GC和内存的东西,因为在那之前我有很多GC和CPU的使用率,当数据量更小,波形中有非常小的iowait时



如何提高Cassandra的性能。您的建议将不胜感激。

看,Cassandra是相对依赖于I/O的。EC实例在设计上有“不足”的I/O(Xen虚拟化) 我的第一个建议是在真正的硬件上使用Cassandra,在那里你有一个控件。例如,你可以使用SSD磁盘进行CommitLog。看

然而,切换到自己的硬件是一个有点激进的选择

Amazon弹性块存储(EBS)提供块级存储卷 用于Amazon EC2实例。Amazon EBS卷 网络连接,并独立于服务器的生命周期保持 例如,Amazon EBS提供高可用性、高可靠性、, 可连接到运行中的Amazon的可预测存储卷 EC2实例,并作为实例中的设备公开。Amazon EBS 特别适合于需要数据库、文件和 系统,或访问原始块级存储。

Amazon EBS允许您创建1 GB到1 TB的存储卷,这些存储卷可以作为设备由Amazon EC2实例装载。多个卷可以装载到同一个实例。Amazon EBS允许您通过选择已配置的IOPS卷来配置特定级别的I/O性能(如果需要)。这允许您可预测地扩展到1000个每个Amazon EC2实例的IOPS数


还可以查看

简短回答:行缓存和键缓存

如果您的数据包含像大多数系统一样经常读取的子集,请尝试使用行缓存和键缓存

行缓存是一种内存缓存,它将频繁读取的行完全存储在内存中。请记住,如果数据分散,这可能不会产生预期效果

密钥缓存通常更适合,因为它只在磁盘上存储分区密钥及其偏移量。这通常有助于跳过Cassandra的查找(无需使用分区索引和分区摘要)

尝试使用键空间和表启用键缓存,并检查您的性能。