目前我在Amazon beanstalk上有两个负载均衡的单进程nodeJS实例。它们每个只使用一个简单的内存中对象作为缓存。因为它们位于不同的服务器上,所以它们的缓存不会被共享。
这就是Redis的用武之地。我想利用Redis创建一个共享缓存,但只能填充NodeJ的内部内存。
你看,目前我正在缓存4KB-10KB的对象,如果我完全依赖Redis,那么我不仅有Redis延迟来检索obejct而且还有网络延迟。我宁愿使用Redis作为持久缓存,它将在启动时启动我的nodeJS实例,并同时保持两个内部缓存同步(每隔x分钟)
一个非常基本的nodeJs内存缓存是https://github.com/tcs-de/nodecache
为了使事情复杂化,我希望开始使用nodeJS集群功能在同一服务器下分叉应用程序的多个进程。因此,所有群集共享1个内存中本地服务器缓存非常重要。
前面提到的nodejs lib有一个包装器,有助于在集群环境中使用:https://github.com/lvx3/cluster-cache
回顾一下,
我将使服务器A和服务器B均匀负载均衡。每个服务器(A& B)都会说4个nodeJs进程只需要共享1个缓存(也就是说,4个服务器的nodeJs进程都应该使用服务器A缓存,对B来说都是相同的)
然后我希望服务器A和服务器B缓存定期同步并且"持续"到Redis。在发生崩溃或重新部署的情况下,服务器缓存将使用Redis中的内容进行准备。
我有什么选择?有没有完善的解决方案或适合的解决方案组合?比如像nodecache(simple)这样的插件有一个Redis插件?我也使用快递,所以也许有明确的中间件,非常适合这个。
使用Redis来填充本地服务器内存缓存是否值得复杂,还是仅仅依靠Redis来控制网络延迟?
让我回到10KB对象的可接受但有点令人失望的时间是20毫秒。我更喜欢大约1ms。 Redis和nodeJs服务器将在亚马逊上,因此将非常接近。
据我所知,如果我有一个50MB的redis缓存,那么服务器A和服务器B上将存在相同的50MB。我非常愿意花钱购买硬件/内存以获得速度。