程序员人生 网站导航

云不等于高性能 但可以拥有高性能

栏目:互联网时间:2014-09-18 19:27:20

在第一篇文章中,我们打破了“云不等于高性能”这个流言,并且概括了如何在一个EC2实例上以1.68美元/小时的开销获得百万TPS。在本篇文章中,我们将评估4个Amazon实例的性能,场景是内存中由4个Aerospike节点组成的集群,用例则是5个不同的读/写负载。在这个部分中,r3.2xlarge是最好价格性能比的获得者。

曾今有多个报告说明分布式NoSQL数据库在虚拟和实体云基础设施上的性能:

  • Altoros Systems曾公开不同NoSQL数据库在Amazon Extra Large Instances上的性能,文章的链接是:“A Vendor-independent Comparison of NoSQL Databases: Cassandra, HBase, MongoDB, Riak”(http://www.altoros.com/vendor_independent_comparison_of_nosql_databases.html)。
  • Thumbtack Technology曾经在“Ultra-High Performance NoSQL Benchmarking(http://www.aerospike.com/wp-content/uploads/2013/01/Ultra-High-Performance-NoSQL-Benchmarking.pdf)”报告中指出不同NoSQL数据库(Aerospike、MongoDB、Cassandra和Couchbase)在纯内存及固态硬盘环境下实体服务器上的性能。
  • 最近一篇,CloudSpectator发表了题为“Performance Analysis: Benchmarking a NoSQL Database on Bare-Metal and Virtualized Public Cloud(http://www.internap.com/resources/nosql-db-bare-metal-vs-public-cloud/)”的报告,对比了Aerospike在实体服务器(搭载SSD)及Amazon EC2和Rackspace云上的性能。

基于这一系列的基准测试,我们选择了一个4节点Aerospike集群,当然数据完全加载在内存中,负载则使用现实世界中5个真实用例――从100%的写入负载,50/50、80/20、95/5读写负载,再到100%的读负载。在第一篇报告中,我们使用了百万个对象,而在这个测试中我们将对象数量扩展到4000万个,4个节点的Aerospike集群将比单节点部署做更多的混合读写负载,主要原因则是同步复制和一致性保障。

我们选用了如下4个Amazon实例:

  • m1.large:Previous generation
  • m3.xlarge:Current generation,并未附加网络增强
  • r3.2xlarge: Current generation
  • r3.large:Current generation用于验证线性扩展,在2、4、6、8节点集群上运行了一个80/20负载

结果1:Amazon R3.*根据读负载的比例线性扩展Aerospike集群TPS


越高越好

在一个4节点的Aerospike集群上,Amazon R3.*实例在所有负载中交付了最高的吞吐量,其TPS随负载读的比例线性扩展。其他类型实例会在网络上出现瓶颈,因此不能支撑更多的读操作。

结果2:Amazon延时对比每实例TPS


越低越好

每个Amazon实例都有请求数量阈值,在这个阈值之下,操作可以在更低延时被处理。一旦达到这个值,即使可以获得更高的吞吐量,延时也会随着请求数量增加而恶化。

结果3:只有节点数量在一定范围之内,Amazon R3.Large才能线性扩展Aerospike的TPS


越高越好

在80/20读写负载下,r3.large实例上的Aerospike TPS可随节点数量线性扩展,2和8节点数量对应的TPS分别是2.7万和14万。

结果4:对比节点数量和跨Amazon实例的TPS


越低越好

结果5:使用Aerospike时,R3.2xlarge表现出更好的价格性能比


越低越好

取决于实例,2-67个节点被需求以提供1.5到100万的TPS,价格分别从每月252到8552美元。当然使用年预留实例时,价格会变低,这个图显示了对于Aerospike来说,最好的实例就是r3.large或r3.2xlarge。而在同等性能下3.2xlarge节点数量最少,开销最低。

下面我们将概述相关步骤,因此你可以亲自验证Amazon实例的性能并复制结果,可以看到在Amazon实例上使用Aerospike时的线性扩展、超高吞吐量和极低的延时。

按部就班的设置

  • 为服务器设置实例。Aerospike服务器配置:同一个Availability Zone中使用4个同类型Amazon实例运行Aerospike。你可以使用 AWS Marketplace来创建这些实例。当然,你也可以选择具备网络增强的实例,使用增强网络HVM的先决条件是VPC。保证security group拥有3000-3003 TCP Port用于节点间的通信,同时为了使用AMC,TCP Port 8081需要对互联网开放。
  • 设置Aerospike。配置mesh configuration来启动一个4节点Aerospike集群;运行afterburner.sh(cd /opt/aerospike/bin; sudo ./afterburner.sh)来设置每个Aerospike服务器上的最佳线程数量。
  • 设置系统。需要确定RPS为以太网卡使用。这可以通过eth0配置,命令是“echo f | sudo tee /sys/network/eth0/rx-0/rps_cpus”。
  • 为客户端设置实例。为客户端主机选用4到8个Amazon实例。
  • 在客户端实例上安装Java基准客户端,其中一台被用作运行AMC服务。
  • 在服务器实例上启动集群,并结束迁移,你可以在AMC中检测迁移处理。
  • 加载4000万条记录,每个体积都是100字节,运行Java Benchmark命令:

cd <java client>/benchmarks<br>./run_benchmarks -z 40 -n test -w I&nbsp; -o S:10 -b 10 -l 23 -k 40000000
    -latency 5,1 -h YOUR_AWS_INTERNAL_IP

开始。从多个Java基准客户端提交均匀分布负载。PS:我们在r3.8xlarge上运行了一个单客户端,因为它足够满足我们的负载需求。

自己动手测试

我们在GitHub上发布了一个基于云的脚本(https://github.com/aerospike/aws-cloudformation/blob/master/vpc.json),它打包好了一切上述设置。根据README介绍,你可以自己动手测试。它运行的速度很快,整个过程总花费大约是5.60美元。


原文链接:http://highscalability.com/blog/2014/8/20/part-2-the-cloud-does-equal-high-performance.html

如您需要了解AWS最新资讯或是技术文档可访问AWS中文技术社区;如您有更多的疑问请在AWS技术论坛提出,稍后会有专家进行答疑。 


订阅“AWS中文技术社区”微信公众号,实时掌握AWS技术及产品消息!

AWS中文技术社区为广大开发者提供了一个Amazon Web Service技术交流平台,推送AWS最新资讯、技术视频、技术文档、精彩技术博文等相关精彩内容,更有AWS社区专家与您直接沟通交流!快加入AWS中文技术社区,更快更好的了解AWS云计算技术。


                                                                                                            (责编/王玉平) 

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐