假设我的应用程序设置成在某个远程机器上运行 NodeJS 服务器,在另一台远程机器上运行数据库。假设我想设置一个 Redis 服务器用于缓存,那么将 Redis 服务器托管在与 NodeJS 服务器不同的另一台机器上是否会增加不必要的开销?
据我所知,Redis 非常快,因为它是一个内存数据库。但是,如果 Redis 服务器与我的 NodeJS 服务器位于另一台机器上,我必须从我的 NodeJS 服务器向 Redis 服务器发出网络请求,如果发生缓存未命中,我必须向我的数据库服务器发出另一个网络请求(总共 2 个网络请求)。如果不使用 Redis 服务器缓存,速度会不会更快,因为我可以确保只向数据库服务器发出 1 个网络请求?在生产环境中设置 Redis 服务器的典型方法是什么?
答案1
在拥有一台 Web 应用服务器、一台数据库服务器和一台 Redis 实例的情况下,我同意:将 Redis 实例与 Web 服务放在同一台机器上。正确配置后,这也消除了在 Redis 流量周围放置额外安全层的需要。
但是,一旦您开始讨论负载平衡和/或集群,事情就会变得更加复杂:在某些情况下,为所有 Web 服务器保留一个公共缓存可能会更快,即使这意味着额外的网络跳数,甚至在 Redis 集群的情况下,尽管 Redis 主机之间有额外的流量。这当然是系统设计和实际测试的问题。