Обработка запросов к базе данных, которые завершаются сбоем из-за переключения сервера
-
19-09-2019 - |
Вопрос
Как вы предпочитаете обрабатывать ошибки в среде с отказоустойчивым кластером или зеркалом SQL Server?Кажется, есть два варианта:
- Отклонить весь текущий запрос клиента и позволить пользователю повторить попытку.
- Найдите ошибку в своем DAL и повторите попытку.
У каждого подхода есть свои плюсы и минусы.Большинство магазинов, с которыми я работал, делают #1, но многие из них также не следуют строгим границам транзакций и, как мне кажется, подвергают себя неприятностям в случае неудачи.Несмотря на это, у меня возникли проблемы с обсуждением их пункта 2, что также должно привести к улучшению пользовательского опыта (одна из проблем — потенциально длительная задержка во время переключения при сбое).
Любые аргументы в ту или иную сторону будут оценены по достоинству.Если вы используете второй подход, есть ли у вас стандартная оболочка, помогающая упростить реализацию?В любом случае, как структурировать свой код, чтобы избежать проблем, например, связанных с отсутствием идемпотентности в неудачной команде?
Решение
Номер 2 может быть бесконечным циклом.Что, если это связано с сетью, или требуется перезагрузка локального компьютера, или что-то в этом роде?
Номер 1, конечно, раздражает пользователей.
Если вы разрешаете доступ только через веб-сайт, вы все равно никогда не увидите ошибку, если только аварийное переключение не произойдет в середине вызова.Для нас это маловероятно, и мы потерпели неудачу без ведома конечных пользователей.
В реальной жизни у вас может не быть хорошего чистого DAL на веб-сервере.У вас может быть подключенный лист Excel (большинство финансовых показателей) или WinForms, где соединение остается открытым, поэтому у вас есть только один вариант.
В любом случае восстановление после отказа должно занять всего несколько секунд.Если восстановление БД займет больше времени, у вас все равно возникнут более серьезные проблемы.И если это случается достаточно часто, и приходится думать о том, как с этим справиться, что ж...
Таким образом, это случается так редко, что вы хотите знать, и номер 1 будет лучше.ИМХО.