Я пытался выяснить, почему запрос токена доступа через OpenStack Keystone выполняется относительно медленно (наименьшее значение составляет от 400 мс до в некоторых случаях более секунды).
Чтобы понять причину, я использовал OSProfiler, и, похоже, большую часть времени я трачу на общение с базой данных. Я вижу, как Keystone делает около сотни вызовов базы данных при запросе токена. Отдельные вызовы к базе данных выполняются относительно быстро (от 2 до 6 мс), но выполнение этого раза 100 может легко привести к задержке в 500 мс только в запросах к базе данных.
Прямо сейчас доступ к базе данных осуществляется через сеть (время обращения по сети составляет около 0,3 мс). Время для каждого запроса к базе данных имеет смысл, если посмотреть на накладные расходы TCP и MySQL, так что это не так уж и безумно.
Главное, о чем я задаюсь вопросом, является ли это ожидаемым поведением, нормально ли для Keystone выполнять такое количество запросов для запроса токена. Кэширование включено, и я знаю, что кэширование работает, поскольку я вижу, как Keystone использует базу данных, и при отладке библиотеки кэширования это фактически указывает на то, что при обращении к кешу он получает попадания.
Прямо сейчас единственный вариант, который я вижу, — это полностью исключить сеть и переместить базу данных на тот же компьютер, что и Keystone API.
Обновление: это на Уссури с использованием токенов Fernet