我们正在部署一个仅使用redis作为数据存储的大型Web应用程序.我注意到我们的redis主机的基准测试在EC2上大约是每秒8000个事务,远低于专用硬件上的规定基准.
我知道在像EC2这样的虚拟机上运行Redis会有性能损失,但是我想知道在EC2上的生产环境中部署Redis的人的一些指示,你发现哪些EC2设置对于从redis中获取更多信息是最有效的.
谢谢.
Did*_*zia 41
EC2可能不是在虚拟化硬件上运行Redis的最佳环境,但它是一个很受欢迎的环境,在这个平台上有很多要知道可以从Redis中获得最佳效果.
我是http://redis.io/topics/benchmarks和http://redis.io/topics/latency的作者之一, 其中涵盖了我在下面提到的大部分主题.这只是要点的总结.
虚拟化收费
它不是特定于EC2,但Redis在VM上运行时显着较慢(在支持的最大吞吐量方面).这是由于基本操作的事实,Redis不会为处理客户端连接所需的epoll /读/写系统调用增加太多开销(如memcached或其他有效的键/值存储).系统调用在VM上通常更昂贵,并且它们代表Redis活动的重要部分(特别是在基准测试中).在这种情况下,与裸金属相比,最大吞吐量减少50%并不少见.
当然,它还取决于管理程序的质量.对于EC2,使用Xen.
在良好的条件下进行基准测试
基准测试可能很棘手,尤其是在像EC2这样的平台上.经常被遗忘的一点是确保基准客户端和服务器的正确配置.例如,在针对您的Redis服务器时,不要在CPU缺乏的微实例(可能被亚马逊限制)上运行redis-benchmark.两台机器对于获得良好的最大吞吐量同样重要.
实际上,要评估Redis性能,您需要:
假设你有多个vCPU核心,在本地运行redis-benchmark(在与服务器相同的机器上).
远程(从不同的VM)运行redis-benchmark,其QoS配置等同于服务器机器
因此,您可以评估和比较机器和网络的性能.
在EC2上,您将获得第二代M3实例(或高内存或集群计算实例)的最佳结果,因此您可以从HVM(硬件虚拟化)中受益,而不是依赖于较慢的半虚拟化.
分叉问题
这不是特定于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(或者无论如何都是非常低的值).不要使用旧的内核版本:它们在执行低swappiness时非常糟糕(导致在写入大文件时进行交换).
如果您使用AOF,请查看fsync选项.它是写操作的原始性能和持久性之间的权衡.您需要做出选择并定义策略.
您还需要熟悉EC2存储选项.在某些VM上,您可以选择临时存储和EBS.在其他一些人,你只有EBS.
短暂存储通常更快,并且您可能会获得比使用EBS更少的问题,但是如果磁盘发生故障或重新启动主机等,您可以轻松地丢失数据......您可以想象将RDB快照放在临时存储上,以及然后将结果文件复制到EBS目录,作为性能和稳健性之间的权衡.
EBS是远程存储:它可能占用分配给VM的标准网络带宽,并影响Redis的最大吞吐量.如果您计划使用EBS,请考虑选择"EBS优化"选项以在标准网络和存储链路之间建立QoS.
最后,使用EC2的性能要求实例的一个非常常见的设置是停用主服务器上的持久性,并且仅在从属实例上激活它.它可能不太安全,但它可以防止主机上的许多潜在延迟问题.
| 归档时间: |
|
| 查看次数: |
12014 次 |
| 最近记录: |