Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon ec2 redis服务器的最佳EC2设置_Amazon Ec2_Redis - Fatal编程技术网

Amazon ec2 redis服务器的最佳EC2设置

Amazon ec2 redis服务器的最佳EC2设置,amazon-ec2,redis,Amazon Ec2,Redis,我们正在部署一个只使用redis作为数据存储的大规模web应用程序。我注意到,在EC2上,我们的redis主机的基准大约是每秒8000个事务,远远低于专用硬件上的基准 我知道在像EC2这样的虚拟机上运行Redis会带来性能损失,但我希望在EC2上的生产环境中部署Redis的人能给我一些建议,告诉我什么样的EC2设置最能让Redis发挥更大的作用 谢谢。EC2可能不是在虚拟化硬件上运行Redis的最佳环境,但它是一种流行的环境,要在这个平台上从Redis中获得最佳效果,有很多要点需要了解 我是本书

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

我知道在像EC2这样的虚拟机上运行Redis会带来性能损失,但我希望在EC2上的生产环境中部署Redis的人能给我一些建议,告诉我什么样的EC2设置最能让Redis发挥更大的作用


谢谢。

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

我是本书的作者之一,本书涵盖了我在下面介绍的大部分主题。这只是要点的总结

虚拟化收费

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

当然,这也取决于虚拟机监控程序的质量。对于EC2,使用Xen

良好条件下的基准测试

基准测试可能很棘手,尤其是在EC2这样的平台上。有一点经常被忘记,那就是确保对基准客户机和服务器进行正确的配置。例如,在针对您的redis服务器时,不要在CPU不足的微实例(可能会被Amazon限制)上运行redis基准测试。这两台机器对于获得良好的最大吞吐量同样重要

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

  • 在本地运行redis benchmark(与服务器在同一台机器上),假设您有多个vCPU核心

  • 在QoS配置相当于服务器机器的机器上远程运行redis benchmark(从不同的VM)

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

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

分叉问题

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

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

在EC2上,确保使用支持HVM的实例(M3、高内存、集群),这将缓解问题

那么,如果内存要求很高,并且应用程序可以容忍它,请考虑在同一台机器上运行几个较小的ReDIS实例,并将数据碎片化。它可以将fork操作导致的延迟降低到可接受的水平

持久性配置

这是从Redis(在虚拟机和裸机上)获得良好性能的一个关键点。所以请花时间仔细阅读

如果您使用RDB,请记住,一旦退出保存后台进程,写时内存复制机制将开始复制页面。所以你需要确保Redis本身有足够的内存,再加上一些余量来应对COW。额外内存的大小取决于您的工作负载。在实例中写的越多,需要的额外内存就越多

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

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

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

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

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

临时存储通常更快,并且您可能会遇到比EBS更少的问题,但在磁盘故障或主机重新启动等情况下,您可以轻松地释放数据。。。您可以想象将RDB快照放在临时存储上,然后将生成的文件复制到EBS目录,作为性能和健壮性之间的权衡

EBS是远程存储:它可能消耗分配给VM的标准网络带宽,并影响Redis的最大吞吐量。如果您计划使用EBS,考虑选择“EBS优化”选项来在标准网络和存储链路之间建立QoS。 最后,EC2对性能要求很高的实例的一种常见设置是在主实例上停用持久性,而只在从实例上激活持久性。数据可能不太安全,但可能