如何跨多个dynos实现缓存

How to implement cache across multiple dynos

假设我在 Heroku 上托管了 Node/express 应用程序。我通过将服务器跨越多个测功机来使用水平扩展实现了可扩展性。

我有 CMS 面板来控制应用程序的内容,它会更改数据库以添加内容,然后将内容呈现给整个服务器的最终用户 API。

我想要的是在后端添加缓存机制API以减少访问数据库的次数,因为我白天的应用程序用户流量很大。

解决方案最初可以通过使用在每个服务器实例 (dyno) 中设置的节点缓存包来设置一个简单的缓存来完成。但是如何通过CMS刷新缓存。

如果我发送刷新缓存的请求,它每次只会触发一个测功机。所以所有测功机的数据都不一致。

如何在所有测功机上触发刷新缓存或者是否有更好的方法来处理缓存?

您可以完全使用测功机之外的东西,而不是每个测功机缓存。 Heroku offers several add-ons for common products. I've never used node-cache, but it is described 像这样:

A simple caching module that has set, get and delete methods and works a little bit like memcached.

这表明 Memcached might be a good choice. The Memcached Cloud addon has a free 30MB tier and the MemCachier addon 有一个免费的 25MB 层。

在任何一种情况下,或者如果您选择在其他地方托管您的缓存,或者即使您完全选择另一个工具,您也会将每个测功机连接到同一个缓存。这有几个好处:

  • 过期项目将影响所有测功机
  • 一旦通过一个测功机缓存了一个项目,它就已经在其他测功机的缓存中了
  • 缓存内容在 dyno 重启后仍然存在,这至少每天发生一次,因此您会减少失误
  • 等等