Перейти к содержанию

Навыки Алисы/Кэширование в навыках

Материал из Викиверситета

Что такое кеширование

[править]

Кеш - это промежуточный буфер, содержащий информацию, которая может быть запрошена с наибольшей вероятностью. Самый яркий пример необходимости кеширования — это случай, когда ваш навык обращается к какому-то веб-сервису с одинаковыми запросами и получает, соответственно, одинаковые ответы.


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

=Пример кеширования

[править]

Давайте рассмотрим применение кэширования на примере:

🤖: — Добрый день. Едете в командировку?

🧑: — Да.

🤖: — Я могу помочь вам найти билеты или подобрать отель. С чего начнем?

🧑: — Билет на самолёт.

🤖: — Куда едем? "Москва", "Санкт-Петербург", "Казань".

🧑: — В Питер.

🤖: — Из какого города выезжаете? "Москва", "Санкт-Петербург", "Казань".

🧑: — Москва.

🤖: — Когда надо поехать?

🧑: — Через неделю.

🤖: — Вам нужен обратный билет?

🧑: — Нет.

🤖: — Итак, Москва - Санкт-Петербург, 28 мая, все верно?

🧑: — Да.

🤖: — Начинаю поиск... Результаты можете увидеть в приложении Booking. Хотите найти что-то ещё?

Как вы могли заметить, навык обрабатывает такие пользовательские фразы, как «Питер» и «Через неделю». Это происходит благодаря взаимодействию с Dialogflow Получив полное название города от Dialogflow, навык отправляет его в IP нашей компании, откуда получает идентификатор, необходимый для поиска.

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

Сервис Redis

[править]

Преимущества:

  • Бесплатный
  • Открытый исходный код
  • Сетевое хранилище
  • Доступ к данным по ключу
  • Быстрый отклик
  • Легко подключить к проекту
  • Множество библиотек

Он представляет собой сетевое хранилище, в котором доступ к данным осуществляется по ключу. Сам Redis хранит информацию в памяти, что позволяет отвечать ему достаточно быстро. Также он дублирует её на диск, и при сбое сервера часть данных не потеряется. Redis легко подключить к навыку, потому что для него есть множество клиентских библиотек для разных языков программирования. А также, для него есть приложение, в котором можно увидеть записи кэша, отредактировать их и удалить.

Используя внешний сервис кэша, навык легче масштабировать, потому что в случае, если его экземпляры будут работать на разных серверах, все они будут обращаться к одному внешнему сервису.

Как получить бесплатный экземпляр Redis

[править]

Его можно развернуть на [Heroku]. Heroku — это облачная платформа или платформа как сервис, которая позволяет собирать, запускать и управлять приложениями непосредственно в облаке.

Для начала надо зарегистрироваться или авторизоваться. После этого вы увидите свою панель управления.

Чтобы создать приложение нужно нажать на кнопки "new", "create new app". Необходимо дать ему имя и выбрать регион.

После создания приложения, ему необходимо добавить расширение. Для этого нужно перейти в вкладку "Overview" и нажать на "Configure Add-ons". В поиске наберём Redis и выберем Redis Cloud.

Теперь необходимо перейти в панель управления Redis Cloud. Здесь видна информация о расширении. Для подключения к сервису кэша нам нужна такая информация, как адрес и пароль.

Проверить подключение к сервису можно при помощи приложения Redisk Desktop Manager. Для начала надо создать подключение к сервису. Дадим ему имя. Ставим скопированный адрес с той разницей, что порт необходимо указать в отдельном поле. И вставим пароль.

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

Ссылки

[править]