我正在使用Microsoft .Net设计类似代理的服务器应用程序。 它处理以非常高的频率到达的消息。 每条消息都引用一个内存中实体,该实体需要持久保存到磁盘才能从崩溃中恢复。
Persist(State state) {
AddToBlockingCollection(state)
}
void BackGroundThread() {
state = ReadFromBlockingCollection()
DoActualPersistence(state)
}
我需要尽量减少在持久(状态)中花费的时间。
如果崩溃恢复,我会容忍一个不那么快的服务器启动。
什么是最好的持久性策略?
我正在考虑将实际的持久性工作委托给后台线程,如下所示:
BasePageEdit
但是,如果 DoActualPersistence()花费的时间太长,系统可能会在队列耗尽之前崩溃,从而在持久状态下产生不一致。
有什么想法吗?