在分布式微服务应用程序中为每个节点使用分离的本地缓存是不正确的做法?我听说在单片应用程序中使用本地EHCache作为Hibernate的二级缓存提供程序是可以的,但在分布式环境中,通常的做法是使用分布式缓存,例如Memcached,Redis或Hazelcast.为每个节点使用单独的缓存有什么后果?
"计算机科学只有两个难题:缓存失效和命名事物." - Phil Karlton
app-server中本地缓存的主要问题是它使缓存失效比之前更加困难.
每次资源更改时,都必须在所有本地缓存上进行无效(和更新).这将需要一个系统知道在任何时间点运行的所有缓存服务器.必须通知该系统所有更新,以便它可以协调所有服务器上的数据失效.它还必须处理重试,处理失败的服务器等.
如果您的应用程序服务器具有自己的本地缓存,则必须使用单独的系统或应用程序代码来解决这些问题.分布式缓存系统可以为您解决这些问题.您可以进行更新呼叫,并且在成功时可以保证数据一致性(或最终的一致性).
这是关注点的分离.使用单独的缓存缓存集群,缓存逻辑和相关问题在一个地方处理.同一个集群可以轻松地重用于多个应用程序,而不是为您开发的每个应用程序重做相同的集群.
另一个小缺点是,如果您不希望性能下降,则每次生成新服务器时都必须预热缓存.这将导致产生服务器的时间更长.