程序员人生 网站导航

120万操作/秒Redis Cloud 集群单一服务器非基准测试程序

栏目:互联网时间:2014-09-18 23:20:57

【编者按】日前,来自Aerospike公司的Anshu和Rajkumar在High Scalability网站上发表文章宣称其能 以1.68美元/小时的成本获取百万TPS,受此影响,Redis Labs的Itamar Haber 利用非基准测试程序,在作者看来基准测试程序往往是一个陷阱,那么Redis的测试结果到底如何呢?

以下为原文:

前不久有一天,我看到 来自Aerospike公司的Anshu和Rajkumar写的文章。非常喜欢这篇文章,给我印象特别深刻的是他们对EC2实例的重度调整继而突破100万大关,但我一直在想――Redis怎么做?

我本来可以做一个成熟的基准测试程序,但一个成熟的基准测试程序既耗时又耗资源。而且这还不考虑开始的意想不到的困难。 真正的基准测试无疑是个圈套,它只是积累在特定优化和步骤上的作秀而已。但是我想要一个答案,我想要更快,所以我愿意做出一些牺牲。这就是近乎完美的――非基准测试程序。

我自己给非基准测试程序下的定义就是一点也不像基准测试程序(因此得名)。在这里,你可以轻装上阵。依托我们实验室同事们的专业知识,我们在没有进一步优化的前提下测量了Redis Cloud软件的性能。我们使用以下设置运行我们的非基准测试程序:

  • 单分片Redis Cloud内存NoSQL数据库服务器运行在一个Amazon实例上。
  • 300万对象,每个对象大小在100字节。
  • 运行在非服务器端实例上memtier_benchmark工具客户端,使用下面的命令行参数: `--ratio=1:1 -n 1000000 -d 100 -t 1 -c 50 --pipeline=75 --key-pattern=S:S`.
  • 按相同比例混合读写工作负载(我们没有特别偏向其中一种操作类型,感觉这种混合更好地反映现实)。
  • 一个按需c3.8xlarge实例。

我们没有时间去建立一个VPC以及调整Placement Groups到最佳性能,因此我们在自己的标准服务环境运行所有东西――即在嘈杂、拥挤的EC2网络。当然,我们也没有为这个试验调整CPU行为或线程数量以及分片的配置,只让Redis Cloud使用其默认值。我们没有测试多重网络配置或添加额外的弹性网络接口(ENI),只是简单的在HVM 上提供全新的预分配Redis Cloud 服务器以及为它做了非基准测试程序……

在这个要点上,你可以从我们的运行上获得原始输出,但结果是略高于120万TPS(确切地说是1228432)。当然,这令人惊异的结果着实刺激到我,我立即要求一个成熟的、包括全面的优化的、彻底的、面面俱到的基准测试程序来真正测试Redis可以达到的极限,你猜怎么着?

分片和Redis Cloud 集群

通过设计,Redis服务器(大部分)是一个单线程的进程。既然如此,分片通常用来部署超过单核或独立服务器RAM性能的Redis数据库。这里有被普遍接受的三种方法实现分片:客户端、代理或集群。 因为针对分片Redis的客户端和基于代理解决方案,相对容易独立于实际的底层数据库引擎实现,这些(如Redis-rb和nutcracker)已经深入人心。然而,如今只有很少Redis集群解决方案。

一个分片Redis集群意味着Redis服务器(流程)要部署在网络中一个或多个计算节点。集群运行Redis数据库,每个可能跨许多节点和多核,超过RAM总数。一个产品级别的集群不仅要确保数据库的性能和基础设施的管理以及数据库资源,也要确保其可用性。

最著名的Redis集群实现当然应该是开源的,当然,Redis cluster(v3)已经进入beta版后期,并且预计将在数月内正式公布。这个即将推出的版本将为当下诸多的挑战提供优秀的答案。在其许多新特性中,新OSS版本还包括能够创建分片集群。就整个Redis社区来讲(如果冒犯某些人,抱歉),我们认为Redis版本3在各个方面都是一个重要的版本。

除了开源v3,还有其他一些Redis集群。有些人走在前面并且构建了自己的集群,每个人都有自己的原因。我不想借任何人抬高自己(像Twitter、Weibo或Pinterest),但有一家公司,已经建立了一个集群,那就是Redis Labs。我们Redis Cloud服务是由自己实现的Redis 集群提供技术支持的,并且过去两年中,已经在自己的大部分产品种使用。在此期间,我们一直在跨多重云和数据域上构建和运营我们的集群。

Redis Labs是Redis项目的开源贡献者――我们的大部分员工都很棒并且和公司同呼吸共命运――但我们用户需要的解决方案并不是都在开源的范围。为了满足这些业务挑战,我们开发的解决方案允许我们在系统运行时扩展Redis数据库从MB到TB。我们在四个不同的IaaS提供商和 20数据中心上部署、扩展和管理集群。用户们构建了数以万计的数据库,我们不仅要维护每个数据库的可用性和性能,同时也要兼顾运营和管理任务。

下面是关于Redis Labs集群鲜为人知的事实:你无需在你应用程序中做任何改变就可以开始使用它们。是的,你可以使用现有的代码和客户端库,并且仍然会获得集群提供的所有可扩展性、可用性以及运营方面的好处。用户只需要创建数据库和配置选项(可用性、数据持久性、分片、安全等诸如此类),他们只需要在Redis Cluster中使用单一Redis URL(主机名和端口)。当然,在这上面你可以做诸如调整、最佳实践、优化等,但(正如在非基准测试程序所示),即使没有它们,我们的集群也是一个了不起的执行者。

原文链接: The 1.2M Ops/Sec Redis Cloud Cluster Single Server Unbenchmark (编译/魏伟 审校/仲浩)

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

最新技术推荐