Пожалуйста, помогите мне разработать эту систему отчетности о событиях - PullRequest
1 голос
/ 30 июня 2011

Я пытаюсь разработать систему, которая сообщает о событиях активности в базу данных через веб-сервис. Веб-служба и база данных уже созданы (программное обеспечение COTS) - все, что мне нужно сделать, это предоставить источник события.

Суть в том, что источник события должен быть отказоустойчивым. У нас есть несколько реплицированных баз данных, с которыми я могу общаться, поэтому, если веб-служба или база данных, с которой я говорю, выходит из строя, программное обеспечение может быстро переключиться на другую, которая работает.

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

Я знаю, что не хочу повторно реализовывать саму очередь, чтобы использовать файловую систему в качестве резервного хранилища. Это будет работать (и я пробовал это), но этот метод резко замедляет работу системы, поскольку жесткий диск становится узким местом. Однако, кроме этого, я не могу придумать единственного способа спроектировать эту систему так, чтобы все события безопасно сохранялись на жестком диске, только когда доступ к базе данных недоступен.

У кого-нибудь есть идеи? =)

Ответы [ 3 ]

0 голосов
/ 30 июня 2011

MSMQ. Я думаю, что вы также можете взглянуть на понятие Объект задания .

0 голосов
/ 30 июня 2011

Я бы согласился с парнями, что лучше использовать готовую систему, такую ​​как MSMQ, с набором шаблонов обмена сообщениями в руках.

В любом случае, если вам придется делать это самостоятельно, вы можете использовать в базе данных памятивместо того, чтобы самим сериализовывать данные, я считаю, что это должно быть достаточно быстрым.

0 голосов
/ 30 июня 2011

Когда мне нужно обмен сообщениями с отказоустойчивостью (и / или гарантированной доставкой, которая, как я полагаю, вам также нужна), я обычно обращаюсь к MSMQ. Он обеспечивает как отказоустойчивость (сообщения сохраняются на диске в случае перезапуска компьютера), так и гарантированную доставку (сообщения будут автоматически и непрерывно повторно отправляться до получения), а также отправку и получение транзакций, ведение журнала сообщений, обработку вредоносных сообщений и другие особенности.

Мне удалось достичь пропускной способности в несколько тысяч сообщений в секунду, используя MSMQ. Честно говоря, я не уверен, что вы станете намного лучше, но при этом будете отказоустойчивы.

...