高性能代理服务器应用程序的持久性策略

时间:2016-05-06 18:56:15

标签: .net performance caching persistence

我正在使用Microsoft .Net设计类似代理的服务器应用程序。 它处理以非常高的频率到达的消息。 每条消息都引用一个内存中实体,该实体需要持久保存到磁盘才能从崩溃中恢复。

Persist(State state) {
  AddToBlockingCollection(state)
}
void BackGroundThread() {
   state = ReadFromBlockingCollection()
   DoActualPersistence(state)
}

我需要尽量减少在持久(状态)中花费的时间。

如果崩溃恢复,我会容忍一个不那么快的服务器启动。

什么是最好的持久性策略?

  • IPC:MongoDB,Redis,SQLServer + ADO.Net,其他?
  • ...或非IPC:BerkleyDb,原始二进制文件,其他?
  • 持久(状态):同步还是异步?

我正在考虑将实际的持久性工作委托给后台线程,如下所示:

BasePageEdit

但是,如果 DoActualPersistence()花费的时间太长,系统可能会在队列耗尽之前崩溃,从而在持久状态下产生不一致。

有什么想法吗?

0 个答案:

没有答案