我有一个高性能的应用程序,我正在考虑分发(使用rabbitMQ作为MQ)。该应用程序使用数据库(当前是SQLServer,但我仍然可以切换到其他东西)并将大部分数据库缓存在RAM中以提高性能。 这会导致问题,因为当其中一个应用程序写入数据库时,其他应用程序的缓存数据库会变得过时。
我认为在高可用性社区中发生了很多事情,但是我找不到任何有用的东西。我想我不是在寻找合适的东西。 是否有开箱即用的解决方案?
PS:如果这属于serverfault,我很抱歉 - 由于这是一个开发问题,我认为它属于这里
编辑: 应用程序读取和写入数据库。因为我正在更改要分发的应用程序 - 现在有多个应用程序读取和写入数据库。缓存在每个分布式应用程序中完成,这些应用程序不知道来自另一个应用程序的DB更改。 我的意思是 - 如果他不是更新数据库,怎么能知道数据库是否更新了?
答案 0 :(得分:2)
因此,您在各种服务器上拥有一个数据库和许多应用程序。每个应用程序都有自己的缓存,所有应用程序都在读取和写入数据库。
查看分布式缓存而不是本地缓存。查看memcached或AppFabric。我已成功使用AppFabric来缓存Microsoft堆栈中的内容。您只需向AppFabric添加新节点,它就会自动分发对象以实现高可用性。
如果移动到共享缓存,则可以在缓存中的对象上放置到期时间。试着抵制在事情发生变化时主动驱逐物品的诱惑。这成为一个非常困难的问题。
我建议隔离您的关键项目,只缓存一次。例如,在拍卖网站上工作时,我们非常积极地进行缓存。我们只缓存了一次拍卖列表的价格。这样,当其他人竞标时,我们只需要进行一次驱逐。我们没有必要通过整个缓存并询问“价格出现在哪里?改变它!”
对于95%的数据,读取将自行过期,写入不会立即影响它们。当新的写入进入时,需要驱逐5%的数据。这就是我所说的“关键项目”。总是需要更新的东西。
希望能给你一些想法!