特性管理-两个应用程序之间的内部缓存



我最近一直在研究IConfigurationRefresher的功能,以及它提供的SetDirty()RefreshAsync()方法。

这是我正在使用的主要代码,当某个API端点被调用时,它当前正在刷新FeatureManagement包的缓存:

Log.Logger.Information($"Refreshing app config.");
_refresher.SetDirty(TimeSpan.FromSeconds(0));
await _refresher.RefreshAsync();

这在服务/应用程序的单个托管实例中工作得很好,但是当web farm中有多个应用程序通过负载均衡器可用时,或者在具有多个pod的Kubernetes集群中,该功能如何工作?

我的另一个问题是,如果缓存保存在本地内存中的消费服务或它是分布式和缓存在应用程序配置本身?

场景:

如果出现对Application1的请求,并且内部缓存被刷新。如果通过SDK从Azure应用程序配置中检索任何配置/功能标志会发生什么?由于缓存刷新,某些调用是否具有更新的值,而对第二个应用程序的调用是否包含过期的值?

首先,我将讨论负载平衡器背后的多个应用程序的关注点。这必须通过使用允许将事件发布到所有后端应用程序的事件模型来解决。这可以通过服务总线完成,请查看Azure应用程序配置的配置刷新推送模型文档。

第二,关注缓存。"cache"在这里,您正在使用SetDirty调用使其无效,仅在内存中。

我相信只有内存缓存的问题的答案也解决了最后一个问题。每个应用程序的值都对应于它们上次调用SetDirty并执行刷新时的值。每次执行该动作序列时,调用者将从应用配置中获得最新的值。

如果有什么不清楚的地方请告诉我。

最新更新