在分布式微服务应用程序中,对每个节点使用分离的本地缓存是否被认为是错误的做法?我听说在单块应用程序中使用本地EHCache作为Hibernate的二级缓存提供者是可以的,但是在分布式环境中使用分布式缓存是常见的做法,例如Memcached、Redis或Hazelcast。对每个节点使用分离的缓存会带来什么后果?
发布于 2017-01-26 21:06:26
“计算机科学中只有两个难题:缓存失效和命名问题”--菲尔·卡尔顿
应用服务器中本地缓存的主要问题是,它使得缓存失效变得比以前更加困难。
每次资源更改时,它都必须在所有本地缓存上失效(并更新)。这需要一个知道在任何时间点运行的所有缓存服务器的系统。这个系统必须被告知所有的更新,这样它才能协调所有服务器上的数据失效。它还必须处理重试、处理失败的服务器等。
如果您的应用程序服务器有自己的本地缓存,则必须使用单独的系统或在应用程序代码中自己解决这些问题。分布式缓存系统可以为您解决这些问题。您可以进行更新调用,并在成功时保证数据的一致性(或最终的一致性)。
这是关注点的分离。使用单独的缓存集群,缓存逻辑和相关问题将在一个地方处理。对于多个应用程序,可以很容易地重用相同的群集,而不是对开发的每个应用程序重新使用相同的群集。
另一个小缺点是,如果不希望性能下降,则每次生成新服务器时都必须预热缓存。这将导致产生服务器的时间更长。
发布于 2019-02-01 07:58:37
在这里,我们还可以做一件事,就是使用message进行缓存失效。
使用kafka或任何其他队列来捕获数据包并使其失效。
https://stackoverflow.com/questions/41880524
复制相似问题