Asp.net 会话或分布式缓存 - 这是可行的解决方案

Asp.net Session or Distributed Cache - which is viable solution

提问人:HereToLearn 提问时间:1/6/2021 最后编辑:Martin DevillersHereToLearn 更新时间:12/2/2021 访问量:232

问:

我们有 MVC 4 应用程序,它与后端 D365 实体进行通信。 该应用程序会进行大量CRM调用来获取数据,因此它非常慢,用户体验非常差

为了提高其性能,添加了缓存层,每当应用程序从 CRM 获取数据时,它都会将其放入 Session 变量中。

当然,这有助于提高性能,因为在用户的会话中,它可以防止前往服务器,并且所有内容都由会话数据提供。但是,现在该应用程序存在很多数据同步问题。(一个用户保存的数据在注销并重新登录之前不会反映给其他用户)

我的问题是:这真的是处理应用程序性能问题的好方法吗?在我看来,不是解决性能问题,而是添加了一种解决方法,该解决方法成为其他问题的原因。

第二个问题:是否有更好的架构/设计可以提高性能并解决应用程序遇到的数据同步问题?我正在考虑添加一个分布式缓存层(可能是 Azure Redis)来替换就地会话层,并选择性地(如果这有意义)在 Redis 中实施直写策略,以便前端应用程序仅与缓存通信并让缓存保持数据存储最新。

任何指导或指针都非常感谢!

asp.net asp.net-mvc-4 redis distributed-cache

评论


答:

0赞 Martin Devillers 12/2/2021 #1

我认为你走在正确的道路上。正如您已经经历过的那样,向应用程序添加缓存会带来新的挑战:处理过时的数据。在您的例子中,数据是在用户级别缓存的,这意味着每个用户都有自己的缓存。如果每个用户都使用自己的数据,则效果很好。例如:一个银行应用程序,每个用户只看到自己的银行对账单(而看不到其他人的银行对账单)。但是,在您的应用程序中并非如此。多个用户对相同的数据进行操作,现在您遇到了同步问题。快速解决方法可能是将缓存替换为与所有用户共享的应用程序缓存。Session

外部化缓存(例如 Redis 或 Memcached)是另一种解决方案,它提供了许多优势(例如分发、扩展、同步等),但也增加了应用程序的复杂性。现在,您的应用程序依赖于另一部分具有其自身行为的基础结构。