3

我有一个高性能应用程序,我正在考虑制作分布式(使用 rabbitMQ 作为 MQ)。该应用程序使用一个数据库(目前是 SQLServer,但我仍然可以切换到其他东西)并将其大部分缓存在 RAM 中以提高性能。这会导致问题,因为当其中一个应用程序写入数据库时​​,其他应用程序的缓存数据库变得过时。

我认为这是在 High-Availability 社区中经常发生的事情,但是我找不到任何有用的东西。我想我不是在寻找正确的东西。有开箱即用的解决方案吗?

PS:如果这属于服务器故障,我很抱歉 - 因为这是一个开发问题,我认为它属于这里

编辑:应用程序读取和写入数据库。由于我正在更改要分发的应用程序 - 现在不止一个应用程序读取和写入数据库。缓存在每个分布式应用程序中完成,它们不知道来自另一个应用程序的数据库更改。我的意思是 - 如果他不是更新数据库的人,如何知道数据库是否已更新?

4

1 回答 1

2

因此,您在不同的服务器上拥有一个数据库和许多应用程序。每个应用程序都有自己的缓存,所有应用程序都在读取和写入数据库。

查看分布式缓存而不是本地缓存。查看 memcached 或 AppFabric。我已经成功使用 AppFabric 将内容缓存在 Microsoft 堆栈中。您可以简单地将新节点添加到 AppFabric,它会自动分发对象以实现高可用性。

如果您移动到共享缓存,那么您可以将过期时间放在缓存中的对象上。当事情发生变化时,尽量抵制主动驱逐物品的诱惑。这成为一个非常困难的问题。

我建议隔离您的关键项目,并且只缓存一次。例如,在拍卖网站上工作时,我们非常积极地缓存。我们只缓存了一次拍卖列表的价格。这样,当其他人竞标时,我们只需进行一次驱逐。我们不必遍历整个缓存并询问“价格出现在哪里?更改它!”

对于 95% 的数据,读取将自行过期,写入不会立即影响它们。当新的写入进入时,需要驱逐 5% 的数据。这就是我所说的“关键项目”。总是需要更新的东西。

希望能给你一些想法!

于 2013-01-16T18:24:07.440 回答