Как стать автором
Обновить

Комментарии 3

НЛО прилетело и опубликовало эту надпись здесь

Странная статья, хистрикс, ретрай и кэш в спринге все это делают в несколько аннотаций и пару конфигов.

Не совсем. Да, то что вы предлагаете действительно подойдет многим, но не всем. Есть сценарии, когда нужен мой подход. Покрайней мере, я не нашел как сделать это просто, готовыми решениями.

Объясню на примере: вы разрабатываете сервис, который получает из другого целевого сервиса информацию о погоде и возвращает пользователям, добавляя к ней веселые картинки. Например, зонтики, если дождь.

Вот сценарий: пользователь, например, в 10:00 запрашивает с вашего сервиса погоду, вы за ней идете в целевой сервис. Получаете, например +15, кладете в кеш и возвращаете пользователю. В документации к целевому сервису сказано, что погода может измениться каждые 10 минут. Соответственно, вы ставите TTL в кеше 10 минут, желая отдавать пользователям актуальную информацию.

Пользователь, приходит в 10:11. Ваш кеш протух, и предположим что целевой сервис не отвечает. Вы его пушите retry`ем, но он все равно не отвечает. Hystrix «размыкает цепь» и отдает вам значение по умолчанию, то что я описывал в DisasterStrategy. Какое значение по умолчанию вы можете отдать?..

Я же предлагал поставить TTL кеша, например, на 2-3 часа. А так называемый CRP = 10 минут. Тогда если пользователь пришел бы в 10:11 и целевой сервис был бы недоступен, я бы вернул ему значение из кеша +15 градусов. Да, возможно на улице было бы +16 или +14, но ведь это лучше, чем что то типа «погода уточняется, зайдите позже»?..

При этом, если бы в 10:11 целевой сервис ответил, я бы обновил CRT на значение CRP ((CRT)10:10 + (CRP)10 минут) и обновил бы значение в кеше. Поставив, например, +16.

Такая, собственно, у меня была идея, которой я хотел поделиться.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории