Резервное хранилище Какие у меня варианты? - PullRequest
0 голосов
/ 04 февраля 2009

У меня есть служба, которая принимает обратные вызовы от провайдера. Мотивация : я не хочу НИКОГДА терять любые обратные вызовы (если, конечно, моя сеть не станет недоступной).

Давайте предположим, что невозможное случается, и мой сервер MySQL становится недоступным в течение некоторого времени, Я хочу вернуться к вторичному хранилищу персистентности после нескольких попыток и неудачи.

Какие у меня варианты? Очереди, кэш в памяти?

Ответы [ 4 ]

1 голос
/ 04 февраля 2009

Вы говорите, что получаете «Обратные вызовы» - вы не ясно дали понять, что это такое. Какой протокол? Это по сети.

Если бы это был HTTP, то я бы сказал, что наилучшим способом является то, что если ваше приложение не может записать данные в постоянное хранилище, оно должно вернуть ошибку («Попробуйте позже», если она существует в протоколе) абонент, который должен повторить попытку позже.

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

Я работал с платежным провайдером, где это имело место (Paypal). Если вы не можете полностью обработать запрос, просто отправьте сообщение об ошибке вызывающей стороне.

0 голосов
/ 04 февраля 2009

Для этого я поставил очередь в SQLite. Хотя, в моем случае, это было для защиты от потери сетевого соединения с сервером MySQL - данные были сгенерированы локально.

0 голосов
/ 04 февраля 2009

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

0 голосов
/ 04 февраля 2009

Я рекомендую какой-нибудь сервер очереди заданий. Я лично использую Starling и добился отличных результатов. Он говорит по протоколу memcache, поэтому его легко использовать в качестве постоянной очереди. Скворец на Github

...