Господа, подскажите, пожалуйста, какие подходы практикуются для обеспечения устойчивости микросервисов, когда один из сервисов отвалился?
Пробовать ретратить зарпосы на него, либо ждать, либо возвращать 500 на все реквесты?
И вообще стоит ли при запуске сервиса пинговать зависимые на предмет их доступности, и ждать, пока раздуплятся, или уже в момент обработки запроса?
Как вы делаете? Может есть толковые выступления про это?
Привет, я когда-то юзал вот такое
https://github.com/streadway/handy/tree/master/retryЭто было с сервисом по спецификой того, что он бывает временно недоступен.
Для пула сервисов писал отдельную обёртку, когда у меня код вызова сервиса запускался в лямбда функции, результат которой отслеживался снаружи. И пул сервисов выстраивал рейтинг из сервисов в зависимости от того, что вернула лямбда. Вернулась ошибка - ставим сервис в конец. В случае ошибки вызываем лямбду для всех сервисов из списка пока не получим успешный результат. Ну это тоже очень специфичный сервис был, так что реализация зависит от вашего сервиса, от его возможной недоступности и бизнес требований. В обычной ситуации думаю можно просто вернуть ошибку и закончить процессинг (если ничего иного логично не вытекает из поведения сервиса или бизнес требований)