Навыки Алисы/Кэширование в навыках
Что такое кеширование
[править]Кеш - это промежуточный буфер, содержащий информацию, которая может быть запрошена с наибольшей вероятностью. Самый яркий пример необходимости кеширования — это случай, когда ваш навык обращается к какому-то веб-сервису с одинаковыми запросами и получает, соответственно, одинаковые ответы.
Если результаты этих запросов хранить в неком кэше, тогда возможно ускорить ответ навыка, потому что доступ к данным в кэше осуществляется гораздо быстрее, чем выборка исходных данных из более медленной памяти.
=Пример кеширования
[править]Давайте рассмотрим применение кэширования на примере:
🤖: — Добрый день. Едете в командировку?
🧑: — Да.
🤖: — Я могу помочь вам найти билеты или подобрать отель. С чего начнем?
🧑: — Билет на самолёт.
🤖: — Куда едем? "Москва", "Санкт-Петербург", "Казань".
🧑: — В Питер.
🤖: — Из какого города выезжаете? "Москва", "Санкт-Петербург", "Казань".
🧑: — Москва.
🤖: — Когда надо поехать?
🧑: — Через неделю.
🤖: — Вам нужен обратный билет?
🧑: — Нет.
🤖: — Итак, Москва - Санкт-Петербург, 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. Для начала надо создать подключение к сервису. Дадим ему имя. Ставим скопированный адрес с той разницей, что порт необходимо указать в отдельном поле. И вставим пароль.
Давайте посмотрим на пример записи кэша для навыка. Для локации в качестве ключа указано именно то, что сказал пользователь. При таком подходе в кэше может быть несколько записей для одного города, например, как здесь для Питера и Санкт-Петербурга.
Ссылки
[править]- Степан Гранкин. Кэширование в навыках // Школа Алисы. 2018-2019