首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >redis服务器的最佳EC2设置

redis服务器的最佳EC2设置
EN

Stack Overflow用户
提问于 2012-08-02 02:41:58
回答 1查看 13.6K关注 0票数 19

我们正在部署一个只使用redis作为数据存储的大型web应用程序。我注意到我们的redis主机在EC2上的基准测试大约是每秒8000个事务,远远低于专用硬件上的基准测试。

我知道在像EC2这样的虚拟机上运行redis会有性能上的损失,但我希望在EC2的生产环境中部署Redis的人能给出一些你认为最有效的EC2设置来让Redis发挥更大的作用。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-07 02:55:26

EC2可能不是在虚拟化硬件上运行Redis的最佳环境,但它是一个流行的环境,要在这个平台上从Redis获得最好的性能,有许多要点需要了解。

我是http://redis.io/topics/benchmarkshttp://redis.io/topics/latency的作者之一,这两本书涵盖了下面介绍的大部分主题。这只是主要观点的总结。

虚拟化收费

它不是特定于EC2的,但是在VM上运行时,Redis的速度要慢得多(就支持的最大吞吐量而言)。这是因为对于基本操作,Redis不会给处理客户端连接(如memcached或其他高效的键/值存储)所需的epoll/读/写系统调用增加太多开销。在VM上,系统调用通常更昂贵,并且它们代表了Redis活动的重要部分(尤其是在基准测试中)。在这种情况下,与裸机相比,最大吞吐量下降50%并不少见。

当然,这还取决于虚拟机管理程序的质量。对于EC2,使用Xen。

状态良好的基准测试

基准测试可能很棘手,特别是在EC2这样的平台上。经常忘记的一点是确保基准客户端和服务器的正确配置。例如,当目标是Redis服务器时,不要在CPU耗尽的微实例上运行redis-benchmark (这很可能会被Amazon限制)。为了获得良好的最大吞吐量,这两台机器同样重要。

实际上,要评估Redis的性能,您需要:

假设您有多个vCPU核心,

  • 在本地(与服务器在同一台计算机上)运行redis-benchmark。
  • 在其QoS配置与服务器计算机

相同的计算机上远程(从不同的VM)运行redis-benchmark

因此,您可以评估和比较机器和网络的性能。

在EC2上,您将使用第二代M3实例(或高内存或集群计算实例)获得最佳结果,因此您可以受益于HVM (硬件虚拟化),而不是依赖于速度较慢的半虚拟化。

fork issue

这并不是EC2所特有的,而是Xen所特有的:在Xen上派生大型进程会非常慢(使用kvm看起来会更好)。对于Redis来说,如果您计划使用持久性,这将是一个大问题:两种持久性选项(RDB或AOF)都需要主线程来派生和启动后台保存或重写进程。

在某些情况下,fork延迟可能会冻结Redis事件循环几秒钟。Redis实例管理的内存越多,延迟越大。

在EC2上,请确保使用启用了HVM的实例(M3、高内存、集群),这将缓解该问题。

然后,如果您有很大的内存需求,并且您的应用程序可以容忍,那么可以考虑在同一台机器上运行几个较小的Redis实例,并对您的数据进行分片。它可以将由于fork操作而导致的延迟降低到可接受的水平。

持久性配置

这是从Redis获得良好性能的关键点(无论是在VM上还是在裸机上)。因此,请花时间仔细阅读http://redis.io/topics/persistence

如果您使用RDB,请记住,一旦保存后台进程被分叉,内存写入时复制机制将开始复制页面。因此,您需要确保有足够的内存供Redis本身使用,另外还要留出一些空间来处理COW。额外的内存量取决于您的工作负载。你在实例中写的越多,你需要的额外内存就越多。

请注意,写入文件也可能会消耗一些内存(因为文件系统缓存),因此在Redis后台保存期间,您需要考虑Redis内存、COW开销和转储文件的大小。

运行Redis服务器的机器决不能交换。如果是这样的话,后果将是灾难性的。与其他一些商店相反,Redis并不是虚拟内存友好的。

对于Linux,请确保设置合理的系统参数: vm.overcommit_memory=1和vm.swappiness=0 (或者设置一个非常小的值)。不要使用旧的内核版本:它们在强制低交换性方面相当糟糕(在写入大文件时导致交换)。

如果使用AOF,请查看fsync选项。这是写操作的原始性能和持久性之间的折衷。您需要做出选择并定义策略。

您还需要熟悉EC2存储选项。在某些VM上,您可以在临时存储和EBS之间进行选择。在其他一些平台上,你只有EBS。

临时存储通常更快,您可能会比EBS遇到的问题更少,但在磁盘故障或主机重新启动等情况下,您可以很容易地丢失数据。您可以想象将RDB快照放在临时存储上,然后将结果文件复制到EBS目录,作为性能和健壮性之间的折衷。

EBS是远程存储:它可能会占用分配给虚拟机的标准网络带宽,并影响Redis的最大吞吐量。如果您计划使用EBS,请考虑选择EBS优化选项,以便在标准网络和存储链路之间建立QoS。

最后,对于使用EC2的高性能实例,一种非常常见的设置是在主实例上停用持久性,并仅在从实例上激活它。它对数据的安全性可能较低,但它可以防止主服务器上的许多潜在延迟问题。

票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11765502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档