Ускоряем Laravel Sanctum | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Разработчик чат-ботов и приложений для виртуальных ассистентов
-15%
PHP Developer. Professional Алгоритмы и структуры данных Scala-разработчик PHP Developer. Basic C# Developer. Professional
-23%
C# ASP.NET Core разработчик Python Developer. Basic Python Developer. Professional Cloud Solution Architecture Специализация iOS
-25%
HTML/CSS Android Developer. Professional React.js Developer Unity Game Developer. Professional NoSQL Java Developer. Professional Highload Architect C++ Developer. Basic Web-разработчик на Python Unity Game Developer. Basic Интенсив «Оптимизация в Java» Супер-практикум по использованию и настройке GIT Symfony Framework Java Developer. Basic Супер-интенсив "Tarantool"
Инфраструктура
MongoDB
-30%
Разработчик чат-ботов и приложений для виртуальных ассистентов
-15%
Administrator Linux. Professional
-26%
Network engineer Administrator Linux. Advanced Специализация Administrator Linux
-25%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-27%
NoSQL Инфраструктурная платформа на основе Kubernetes Highload Architect Мониторинг и логирование: Zabbix, Prometheus, ELK Супер-практикум по использованию и настройке GIT Administrator Linux.Basic Экспресс-курс «IaC Ansible» Экспресс-курс по управлению миграциями (DBVC) Экспресс-курс "Версионирование и командная работа с помощью Git" Network engineer. Basic Основы Windows Server
Корпоративные курсы
Безопасность веб-приложений MongoDB
-30%
Разработчик чат-ботов и приложений для виртуальных ассистентов
-15%
Agile Project Manager Руководитель поддержки пользователей в IT
-10%
Промышленный ML на больших данных Cloud Solution Architecture Внедрение и работа в DevSecOps Spark Developer Reverse-Engineering IT-Recruiter Machine Learning. Professional Интенсив «Оптимизация в Java» Супер-практикум по использованию и настройке GIT Экcпресс-курс «ELK» Enterprise Architect Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» Экспресс-курс «Введение в непрерывную поставку на базе Docker» Вебинар CERTIPORT
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Ускоряем Laravel Sanctum

Если использовать персональные токены доступа Sanctum для API-аутентификации, можно заметить, что некоторые входящие запросы выполняются в 5-10 раз дольше, чем остальные. Всё дело в том, что при каждом запросе Sanctum выполняет обновление поля last_used_at в таблице personal_access_tokens. Большая часть запросов, в принципе, выполняется достаточно быстро, однако при увеличении их объёма, некоторые начинают тормозить. Заметили эту проблему уже не в первый раз, при этом, к сожалению, простого способа отключить это пока не найдено.

Вариант решения

Если в вашем проекте информация о последнем применении токена не нужна, вы можете убрать её путём создания модели, к примеру, PersonalAccessToken с методом save(), проверяющим, изменено ли только поле last_used_at.

Поначалу, посредством artisan-команды была создана новая модель:

php artisan make:model PersonalAccessToken

Далее внутри модели был задействован следующий код:

1-1801-cf9c2a.png

Эта наша кастомная модель расширяет модель из Sanctum, плюс имеет всего один метод save(). При этом она получает все изменённые значения, а также осуществляет проверку, станет ли сохраняться что-либо кроме last_used_at. Если ответ — да, то из Sanctum вызывается родительский метод save() . Если нет, то просто возвращается false, указывающий, что сохранения не было.

После создания этой кастомной модели следует задать её применение вместо дефолтной. Выполнить мы это можем с помощью метода boot() класса Providers/AppServiceProvider.php. При этом в Sanctum предусмотрен статический метод usePersonalAccessTokenModel(), который вы можете применить для задания модели для токенов.

Как это примерно будет выглядеть, можете посмотреть ниже:

2-1801-dafad7.png

В результате вышеописанных действий был сразу замечен прирост производительности, ведь запись в базе данных — дорогая операция, особенно если применять репликацию и разделение чтения/записи.

По материалам статьи Improving Laravel Sanctum Personal Access Token Performance.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
🔥 Выгодные предложения
Подборка курсов, которые можно приобрести по выгодной цене только до конца июля!