Я пытаюсь разработать систему, которая сообщает о событиях активности в базу данных через веб-сервис. Веб-служба и база данных уже созданы (программное обеспечение COTS) - все, что мне нужно сделать, это предоставить источник события.
Суть в том, что источник события должен быть отказоустойчивым. У нас есть несколько реплицированных баз данных, с которыми я могу общаться, поэтому, если веб-служба или база данных, с которой я говорю, выходит из строя, программное обеспечение может быстро переключиться на другую, которая работает.
Однако мне нужна помощь, когда все базы данных не работают. Я уже спроектировал очередь, которая будет удерживать события по мере их накопления (и разрывать их после восстановления соединения), но очередь представляет собой структуру в памяти: если мое приложение вылетает в этом состоянии или если потеря питания и т. д., тогда все события в очереди будут потеряны. Это неприемлемо. Что мне нужно, так это способ сохранить события, чтобы при возврате базы данных в оперативный режим я мог отправлять серию событий в очереди даже в случае потери питания или сбоя.
Я знаю, что не хочу повторно реализовывать саму очередь, чтобы использовать файловую систему в качестве резервного хранилища. Это будет работать (и я пробовал это), но этот метод резко замедляет работу системы, поскольку жесткий диск становится узким местом. Однако, кроме этого, я не могу придумать единственного способа спроектировать эту систему так, чтобы все события безопасно сохранялись на жестком диске, только когда доступ к базе данных недоступен.
У кого-нибудь есть идеи? =)