我正在尝试设计一个通过 Web 服务向数据库报告活动事件的系统。Web 服务和数据库已经构建(COTS 软件)——我所要做的就是提供事件源。
但是,问题是事件源需要容错。我们有多个可以与之通信的复制数据库,因此如果我正在与之通信的 Web 服务或数据库出现故障,该软件可以快速切换到另一个启动的数据库。
我需要帮助的是所有数据库都关闭的情况。我已经设计了一个队列,它将在事件堆积时保留它们(并在连接恢复后将它们爆发),但队列是一个内存结构:如果我的应用程序在这种状态下崩溃,或者如果断电等,则队列中的所有事件都丢失。这是无法接受的。我需要的是一种持久化事件的方法,以便当数据库重新联机时,我可以发送一连串排队的事件,即使在断电或崩溃的情况下也是如此。
我知道我不想重新实现队列本身以将文件系统用作后备存储。这会起作用(我已经尝试过了)-但是随着硬盘驱动器成为瓶颈,这种方法会大大降低系统速度。但除此之外,我想不出一种方法来设计这个系统,使所有事件仅在无法访问数据库时安全地存储在硬盘上。
有没有人有任何想法?=)