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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Ruby on rails 如何使用Rails进行缩放_Ruby On Rails_Redis_Memcached_Scalability_Sidekiq - Fatal编程技术网

Ruby on rails 如何使用Rails进行缩放

Ruby on rails 如何使用Rails进行缩放,ruby-on-rails,redis,memcached,scalability,sidekiq,Ruby On Rails,Redis,Memcached,Scalability,Sidekiq,我想准备一个可伸缩的rails应用程序。这个应用程序的一些功能是连接到一些API和发送电子邮件,另外我正在使用PostgreSQL&它在Heroku上 既然代码是干净的,我想使用缓存和任何有助于应用程序扩展的技术 我应该使用Redis还是Memcached?这对我来说有点模糊,我在StackOverflow上看到过类似的问题,但在这里我想知道哪一个我应该只用于缩放目的 我还想用Sidekiq处理一些工作。它会与Memcached/Redis冲突吗?还有,万一我要用它呢 在可伸缩性方面,我还应该考

我想准备一个可伸缩的rails应用程序。这个应用程序的一些功能是连接到一些API和发送电子邮件,另外我正在使用PostgreSQL&它在Heroku上

既然代码是干净的,我想使用缓存和任何有助于应用程序扩展的技术

我应该使用Redis还是Memcached?这对我来说有点模糊,我在StackOverflow上看到过类似的问题,但在这里我想知道哪一个我应该只用于缩放目的

我还想用Sidekiq处理一些工作。它会与Memcached/Redis冲突吗?还有,万一我要用它呢

在可伸缩性方面,我还应该考虑其他事情吗


非常感谢

Sidekiq需要Redis作为其消息存储。因此,如果您想使用Sidekiq,您需要一个Redis实例或使用Redis服务。顺便说一句,Sidekiq很棒

您可以使用Memcached或Redis作为缓存存储。对于缓存,我可能会使用Memcached,因为缓存清理行为更好。一般来说,在Rails中,特别是在Rails4应用程序中,很少会显式地使缓存中的项过期或设置显式过期时间。取而代之的是依赖于对cache_键的更新,这意味着缓存的项目实际上没有从存储中删除。Memcached可以很好地处理这个问题,当它达到内存限制时,会逐出最近使用最少的项


总而言之,缩放比挑选几个组件要多得多。你必须做大量的规划,在应用程序开发过程中找出瓶颈,并根据需要增加服务器来扩展CPU/内存/磁盘。

Redis是缓存的一个非常好的选择,它的性能与memcached类似(Redis稍微快一点),这样配置它需要几分钟时间

如果可能的话,我建议agains使用相同的redis实例来存储缓存和消息存储


如果您确实需要这样做,请确保您使用易失性lru最大内存策略配置redis,并且始终使用TTL设置缓存;这样,当redis耗尽内存时,缓存密钥将被逐出。

您必须看看redis的两个很酷的功能,它们在不久的将来还将出现

Redis群集:

Redis Sentinel:(高度可用)

此外,这些功能将极大地帮助您扩展redis,
在memcached的情况下,这些功能缺失,而且就活跃的开发而言,redis社区更加活跃。

您还必须在基础设施(服务器)中进行扩展。最好是垂直缩放。错!redis也有最大内存收回功能,它比memcached()中的功能要好得多