Взаимодействие на основе удаленного вызова процедур (RPI)¶
Рассмотрим шаблон удаленный вызов процедур. Существует много протоколов RPI. Рассмотрим REST и gRPC.
Оба представляют собой синхронные коммуникационные механизмы и, как следствие, страдают из-за проблем с частичным отказом. Например, сервис может быть недоступен вследствие сбоя, или находиться в процессе обслуживания. Кроме того, сервис может быть перегруженным и отвечать медленно, или отклонять некоторые запросы.
Работа в условиях частичного отказа¶
Поскольку клиент блокируется в ожидании ответа, существует опасность того, что его собстевнные клиенты тоже окажутся заблокированными по цепочке.
Каждый раз, когда один сервис вызывает другой, он должен защитить себя при помощи комбинации следующих подходов:
- Конечное время ожидания. Никогда не блокируйтесь бессрочно.
- Ограничение количества неудачных запросов от клиента к сервису. Установите лимит неудачных запросов к сервису. Если лимит превышен, скорее всего, дальнейшие запросы будут бессмысленны, поэтому сразу же должны завершаться с ошибкой.
- Шаблон “Предохранитель”.
Также, помимо защиты от блокирования, должны быть предусмотрены стратегии поведения при ошибке. Например
- Вернуть ошибку
- Вернуть закэшированное ранее значение
- Вернуть значение по умолчанию/значение-заглушку
Очевидно, что каждая из стратегий должна использоваться там, где она возможна и предпочтительна.
Обнаружение сервисов¶
Дата создания : 25 июля 2022 г.