Кеширование|Логирование|Ретраи на примере SMS
🔹 1. Кеширование
Зачем кешировать отправку SMS?
- Чтобы не дёргать внешний API слишком часто, если запросы повторяются (например, при повторном нажатии "Отправить код").
- Чтобы ускорить работу – достать данные из кеша быстрее, чем отправить HTTP-запрос.
- Чтобы избежать лишних трат – API-провайдеры SMS часто берут деньги за каждый запрос.
Как кешировать отправку SMS?
Допустим, мы не хотим отправлять одно и то же SMS чаще, чем раз в 5 минут.
✅ Создадим CacheSmsLibrary, которая оборачивает основную библиотеку и кеширует отправленные SMS:
📌 Теперь если одно и то же SMS пытаются отправить повторно в течение 5 минут – оно не будет отправлено повторно.
Применение:
🔹 2. Логирование
Зачем логировать отправку SMS?
- Для отладки – видеть, какие сообщения были отправлены.
- Для мониторинга – можно анализировать частоту отправок.
- Для обработки ошибок – фиксировать неудачные попытки.
Как логировать?
✅ Создадим LoggingSmsLibrary, которая оборачивает основную библиотеку и логирует отправку:
Теперь все отправки SMS логируются, а если что-то пошло не так – мы это увидим в storage/logs/laravel.log.
Применение:
👉 Теперь все вызовы SMS отправки будут логироваться.
🔹 3. Ретраи (повторная отправка при неудаче)
Зачем делать ретраи?
- Внешний API может временно не работать (например, проблемы с сервером провайдера).
- Интернет-соединение может прерываться – если SMS API недоступен, стоит попробовать ещё раз.
- Некоторые ошибки можно обработать повторной попыткой (например, если сервер ответил
500– можно повторить).
Как делать ретраи?
✅ Создадим RetrySmsLibrary, которая повторяет отправку SMS до 3 раз, если произошла ошибка:
📌 Теперь если первый запрос не удался, библиотека попробует ещё 2 раза с задержкой 2 секунды.
Применение:
💡 Итог: Комбинируем всё вместе!
Теперь можно объединить все улучшения в цепочку классов:
📌 Теперь у нас:
✅ Кеширование (не отправляем SMS повторно в течение 5 минут).
✅ Логирование (все попытки и ошибки фиксируются).
✅ Ретраи (если SMS не отправилось, пробуем ещё 2 раза).
Вся магия происходит без изменений в коде контроллера и сервиса! 🚀
🎯 Вывод
- Кеширование – помогает избежать повторных запросов, уменьшает нагрузку на API.
- Логирование – фиксирует отправки и ошибки, помогает при отладке.
- Ретраи – позволяют повторять запрос при временных ошибках.
Когда стоит использовать эти техники?
| Метод | Когда использовать? |
|---|---|
| Кеширование | Если есть вероятность повторных SMS за короткий период (например, OTP-коды) |
| Логирование | Всегда – полезно для мониторинга и отладки |
| Ретраи | Если API SMS-провайдера не всегда стабильно работает |
🔥 Лучший вариант – использовать все 3 техники, обернув основную библиотеку в цепочку классов! 🚀