Рейтинг
0.00

Selectel дата-центры

17 читателей, 532 топика

IPMI ― обзор технологии



Чтобы удаленно управлять состоянием серверной платформы, системные администраторы и инженеры пользуются технологией IPMI, которая значительно упрощает им жизнь. Теперь не надо каждый раз бежать к серверу, чтобы нажать на кнопку перезагрузки ― своевременно реагировать на критические неполадки можно сидя дома в уютном кресле. В этой статье рассмотрим основные компоненты IPMI и детали работы технологии.

Что такое IPMI
Аббревиатура IPMI расшифровывается как Intelligent Platform Management Interface (интеллектуальный интерфейс управления платформой). Через IPMI можно удаленно подключиться к серверу и управлять его работой:
  • Проводить мониторинг физического состояния оборудования, например, проверять температуру отдельных составляющих системы, уровни напряжения, скорость вращения вентиляторов
  • Восстанавливать работоспособность сервера в автоматическом или ручном режиме (удаленная перезагрузка системы, включение/выключение питания, загрузка ISO-образов и обновление программного обеспечения)
  • Управлять периферийными устройствами
  • Вести журнал событий
  • Хранить информацию об используемом оборудовании

Допустим, инженер перенастраивает сеть на сервере, допускает ошибку в конфигурации и теряет доступ по SSH. Как теперь «достучаться» до сервера? Можно подключиться по IPMI и поменять настройки.

IPMI хорош тем, что перечисленные выше функции доступны вне зависимости от работы процессора, BIOS или операционной системы (ОС) управляемой платформы. Например, можно удаленно перезагрузить сервер, если зависла ОС, или поискать причину выхода из строя CPU в журнале системных событий. Управлять можно даже выключенным сервером ― достаточно того, что сервер подключен к электрической сети.

После того как сервер смонтировали и подключили к сети, инженеры Selectel настраивают BIOS и IPMI. Дальше можно выйти из шумной серверной и продолжить настраивать оборудование удаленно. Как только первоначальная настройка закончена, клиенты Selectel могут управлять работой выделенных серверов и серверов произвольной конфигурации через IPMI.
Историческая справка
Первую версию спецификации IPMI v1.0 разработали совместно компании Intel, Dell, NEC и Hewlett-Packard в 1998 году. На практике обнаружились уязвимости и недостатки, которые исправили в последующих версиях IPMI v1.5 и v2.0.

Спецификация IPMI стандартизирует интерфейс общения, а не конкретную реализацию в «железе», поэтому IPMI не требует использования специальных запатентованных устройств и определенных микроконтроллеров. Производители, придерживаясь спецификаций, разрабатывают собственное оборудование IPMI, встроенное в серверные платформы:


Компании устанавливают свои цены на предоставляемую технологию. Если стоимость реализации IPMI увеличивается, цена аренды сервера растет, так как напрямую зависит от стоимости расходников.

Решения производителей отличаются между собой:
  • Наглядностью информации о состоянии оборудования
  • Уникальным набором приложений для восстановления работоспособности сервера, если отказали какие-либо комплектующие
  • Возможностью собирать статистику по всем комплектующим сервера, в том числе подключенным через карты расширения PCI, NVM и т.д.
  • Использование технологии не только в серверном оборудовании, но и с обычными компьютерами через платы расширения PCI-Express

На деле для комфортной работы с удаленной консолью и своевременного оповещения о проблемах достаточно базового функционала IPMI.

Хотя производители предоставляют измененный и доработанный IPMI, реализация его архитектуры остается схожей. Разберемся, из чего состоит технология, опираясь на официальную спецификацию компании Intel.

Базовые компоненты любого IPMI
Контроллеры управления
В центре архитектуры — «мозг» IPMI, микроконтроллер BMC (Baseboard Management Controller). Через него как раз и происходит удаленное управление сервером. По сути, BMC ― это отдельный компьютер со своим программным обеспечением и сетевым интерфейсом, который распаивают на материнской плате или подключают как плату расширения по шине PCI management bus.


BMC питается от дежурного напряжения материнской платы, то есть работает всегда, вне зависимости от состояния сервера.

К BMC можно подключить дополнительные контроллеры управления (Management Controllers, MCs), чтобы расширить возможности базового управления. Например, в то время как основная система управляется функциями BMC, MCs подключаются для мониторинга различных подсистем: резервных источников питания, RAID-накопителей, периферийных устройств.

MCs поставляются самостоятельными платами, отдельными от центрального BMC, поэтому их также называют Satellite Controllers. Дополнительных контроллеров может быть несколько, а вот центральный BMC — один.

К BMC контроллеры подключаются через интерфейс IPMB (Intelligent Platform Management Bus ― шина интеллектуального управления платформой). IPMB ― это шина на основе I2C (Inter-Integrated Circuit), по которой BMC перенаправляет команды управления к различным частям архитектуры:
  • Общается с дополнительными контроллерами (MCs)
  • Считывает данные сенсоров (Sensors)
  • Обращается к энергонезависимому хранилищу (Non-Volatile Storage)
Архитектура IPMI реализована так, что удаленный администратор не имеет прямого доступа к компонентам системы. Например, чтобы получить данные с сенсоров, удаленный администратор посылает команду на BMC, а BMC в свою очередь обращается к сенсорам.

Кроме передачи команд на BMC можно настроить автоматическое выполнение действий контроллером с помощью следующих механизмов:



Энергонезависимое хранилище
Энергонезависимое хранилище остается доступным даже при сбое CPU сервера, например, через локальную сеть; состоит из трех областей:
  • System Event Log (SEL) ― журнал системных событий
  • Sensor Data Record (SDR) Repository ― репозиторий, хранящий данные о сенсорах
  • Field Replaceable Units (FRUs) Info ― инвентарная информация о модулях системы
Модули системы генерируют (Event Generator) или получают (Event receiver) события. MCs выступают в качестве генераторов событий, а BMC в архитектуре может выполнять обе роли. BMC получает сообщения о событиях по системному интерфейсу и IPMB, затем регистрирует их в System Event Log (SEL).

К реализации SEL есть обязательные требования:
  • SEL хранит в памяти не меньше 16 событий
  • К информации, хранящейся в SEL, можно получить доступ вне зависимости от доступа к BMC и состояния управляемой платформы
Команды IPMI допускают чтение и удаление SEL. Поскольку память SEL ограничена, периодически журнал надо проверять и очищать, чтобы записывались новые события. В настройках BMC можно сконфигурировать автоочистку SEL. Автоочистка на различных платформах происходит по-разному — стирая старые записи, чтобы заполнить новые, или очищая всю историю.

Сообщение о событии несет в себе информацию из областей SDR Repository и FRU Info.

Записи SDR — это данные о типах и количестве сенсоров, их возможности генерировать события, типы показаний. SDR также содержат записи о количестве и типах устройств, подключенных к IPMB. Записи SDR хранятся в области памяти, которая называется SDR Repository (Sensor Data Records Repository).

Записи FRU содержат информацию о серийных номерах и моделях деталей различных модулей системы — процессора, платы памяти, платы ввода-вывода, контроллерах управления.

Информация FRU может предоставляться через MC (командами IPMI) либо через доступ к чипам энергонезависимой памяти SEEPROM (Serial Electrically Erasable Programmable Read Only Memory), подключенным по шине Private Management Bus. По этой шине контроллеры общаются через низкоуровневые I2C-команды с устройствами, которые не поддерживают IPMI-команды.

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

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

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

Сообщения IPMI содержат базовый набор полей, единый для всех команд:
  • Network Function (NetFn) присваивает команде значение кластера, к которому команда относится (команды шасси, событий, хранилища и т. д.)
  • Поле Request/Response Identifier нужно, чтобы различать запросы и ответы
  • Requester’s ID — информация об источнике сообщения. Например, для IPMB эта информация содержит LUN (Logical Unit Number) устройства
  • Responder’s ID адресует запрос к желаемому ответчику
  • Command — уникальные в рамках Network Function команды
  • Data — дополнительные параметры (например, данные, возвращаемые в ответе)
Кроме того, в ответе всегда передается Completion Code, который сообщает результат выполнения команды. Если в ходе выполнения запроса произошла ошибка, будет отправлен ненулевой код, соответствующий событию.

Каналы, по которым передаются сообщения, можно разделить на три категории с соответствующими интерфейсами:
  • BMC ― MCs, Sensors, Storage (IPMB)
  • BMC ― управляемая платформа (System Interface)
  • BMC ― удаленный администратор (LAN, Serial Interface)
В этой модели BMC можно воспринимать как коммутатор, который связывает между собой интерфейсы системы (в терминологии спецификации ― Bridging):
  • Serial ↔ IPMB
  • Serial ↔ System Interface
  • LAN ↔ IPMB
  • LAN ↔ System Interface
  • Serial ↔ PCI Management Bus
  • LAN ↔ PCI Management Bus
  • Другие комбинации, в том числе Serial ↔ LAN
При доставке через разные интерфейсы архитектуры базовый набор полей дополняется номерами каналов и фреймами. Например, протокол IPMB добавляет адресные поля и поля для проверки целостности передаваемых данных, а LAN инкапсулирует команды IPMI в UDP/IP пакеты.

Интерфейсы удаленного доступа
В начальной версии IPMI удаленная консоль подключалась к модулю BMC через последовательный интерфейс (Serial Interface). Спецификация IPMI v2.0 базируется на использовании сетевого интерфейса (LAN Interface).

Интерфейс LAN предоставляется через выделенный сетевой порт BMC со своим IP-адресом. При передаче через LAN сообщения IPMI проходят несколько этапов инкапсуляции:
  • Сообщения IPMI формируются в пакеты IPMI Session (позже в статье мы подробнее рассмотрим формирование IPMI Session)
  • Пакеты IPMI Session инкапсулируются по протоколу RMCP (Remote Management Control Protocol)
  • RMCP-пакеты формируются в UDP datagrams
  • Добавляются фреймы Ethernet


Последовательный интерфейс для подключения удаленной консоли к BMC уже не используется, однако он нужен для реализации двух функций:
  • Serial Port Sharing
  • Serial-over-LAN (SoL)
Serial Port Sharing ― это возможность использовать общий последовательный коннектор между последовательными контроллерами BMC и управляемой системы. Обычно Serial Port Sharing используется для реализации BIOS Console Redirection, то есть перенаправления BIOS-консоли на модуль BMC.

Serial-over-LAN нужен для взаимодействия с компонентами системы, которые понимают только последовательный интерфейс общения. Еще можно из консоли сервера посылать команды напрямую к устройствам сервера (чипам, картам, дискам и так далее). SoL реализован так, чтобы работать совместно с функцией Serial Port Sharing.

Сеанс и аутентификация
Для LAN и последовательного интерфейса началу передачи IPMI-сообщений предшествует установление сеанса, в ходе которого формируются пакеты данных IPMI Session.

Установление сеанса ― это аутентификация конкретного пользователя. Сеанс должен быть активирован перед началом передачи IPMI-сообщений по следующему алгоритму:


  1. Удаленная консоль запрашивает данные по аутентификации у BMC
  2. BMC посылает ответ о поддерживаемых типах аутентификации (none, password, алгоритмы MD2 и MD5 и т.д.)
  3. Удаленная консоль посылает команду о выбранном типе аутентификации и отправляет логин пользователя
  4. Если пользователь имеет привилегии доступа к каналу, BMC посылает ответ, содержащий ID сеанса. Благодаря назначению ID, несколько сеансов могут работать одновременно на одном канале (согласно требованиям спецификации ― не менее четырех одновременных сессий)
  5. Удаленная консоль посылает запрос активации сеанса. Запрос содержит ID сеанса и аутентификационную информацию (имя пользователя, пароль, ключи ― зависит от выбранного типа аутентификации)
  6. BMC верифицирует информацию о пользователе, утверждает ID сеанса и посылает ответ об активации

Сеансы автоматически прерываются, если в течение заданного интервала не выполняется никаких действий или если соединение разорвано.

Доступ к BMC можно заблокировать, отправив одновременно множество запросов об активации сеанса, тогда все ресурсы будут использоваться для отслеживания сессий, требующих активации. Чтобы предотвратить возможную атаку, в реализации BMC рекомендуется применять алгоритм LRU (Last Recently Used). Алгоритм утверждает ID сеанса для наиболее раннего запроса активации сеанса. Например, удаленная консоль запускается через браузер в noVNC-сессии. Если открыть несколько вкладок с запущенными сессиями, текстовый ввод будет доступен в наиболее ранней открытой вкладке.

Когда IPMI становится недоступен
IPMI помогает восстановить работоспособность сервера при его сбое. Однако может случиться так, что становится недоступна система удаленного управления. Сбои в работе IPMI можно разделить на четыре категории:
  • На уровне сети. «Битые» порты, нерабочее оборудование, дефект кабеля, плохо обжатая витая пара
  • На уровне ПО. Баг системы, зависание модуля BMC, необходимость обновить прошивку модуля
  • На уровне «железа». Перегрев, выход из строя критичных комплектующих (память, процессор), дефекты архитектуры системы
  • На уровне питания. Отключение питания BMC или проблемы с блоком питания сервера
Перечисленные факторы влияют как на работу IPMI, так и на сам сервер. Модуль BMC ― это независимый от сервера чип, и отказ данного микроконтроллера говорит об отказе сервера в 90% случаев.

IPMI на практике
Управлять сервером по IPMI можно через веб-браузер, утилиты, предоставляемые производителями, и утилиты с открытым исходным кодом.

Веб-интерфейс у каждой реализации IPMI свой, но принцип доступа остается одинаковым:
  • Ввести в адресную строку IP-адрес порта BMC
  • Ввести логин и пароль. Иногда эта информация указана непосредственно на оборудовании
В Selectel мы работаем с IPMI-модулями компаний Intel, Asus и Supermicro. В качестве примера посмотрим на веб-интерфейс Supermicro:


Возможности веб-интерфейса также реализованы в графической утилите Supermicro IPMIView:


Чтобы управлять оборудованием через Linux-консоль, устанавливается соответствующая утилита (например, Ipmitool для локального и удаленного управления или IPMICFG для локального). Далее при помощи консольных команд добавляется IPMI-устройство и конфигурируется BMC.

linux.die.net/man/1/ipmitool
www.supermicro.com/en/solutions/management-software/ipmi-utilities

Клиентам Selectel доступен IPMI для выделенных серверов и серверов произвольной конфигурации. IPMI реализован в виде KVM-консоли, которая запускается в noVNC-сессии через панель управления. Для этого в карточке с информацией о сервере надо нажать на значок консоли в правом верхнем углу:


Консоль открывается в браузере и подстраивается под размер экрана. При желании консоль можно использовать даже через телефон или планшет.

Сессия прерывается, если выйти из панели.


Заключение
IPMI ― это полностью автономный компонент серверной платформы, который не зависит ни от операционной системы, ни от BIOS, ни от CPU сервера.

Благодаря IPMI, затраты на обслуживание серверных систем сокращаются, а жизнь системных администраторов становится проще. Нет необходимости постоянного присутствия рядом с оборудованием ― его работа контролируется удаленно по сети.

В этой статье мы рассмотрели основные компоненты IPMI. Однако детали технологии обширны. Талантливые разработчики, опираясь на спецификацию, могут создавать свое IPMI-оборудование и open-source инструменты, попутно устраняя недостатки текущей спецификации и открывая новые возможности удаленного управления.

Как защитить веб-приложения от атак и уязвимостей?



Хотите защитить веб-приложения от атак и снизить риски, связанные с уязвимостями сервисов, — воспользуйтесь нашей новой услугой «Средства WAF». Ее основная задача — выявлять подозрительный трафик и блокировать его. В рамках услуги доступно на выбор 2 типа защиты.

WAF Валарм
  • Подойдет для e-commerce, платежных систем, электронных СМИ, кредитных и страховых компаний, у которых есть нагруженные или часто обновляющиеся веб-приложения.
  • Обрабатывает и отбирает запросы на фильтрующих узлах в подходящей для клиента инфраструктуре
  • Постоянно ищет риски уязвимостей в сетевом периметре и веб-приложении, а также создает рекомендации по их устранению
  • Автоматически блокирует неизвестные атаки до момента их устранения

WAF Imperva Incapsula
  • Средство защиты приложений от лидера мирового рынка по версии Gartner. Услуга подойдет крупным компаниям, которым критически важна доступность и целостность СУБД, веб-сайтов и приложений.
  • Защищает сайт от всех угроз, описанных в проекте Open Web Application Security Project (OWASP топ-10)
  • Позволяет устанавливать собственные правила защиты с использованием скриптов IncapRules на некоторых тарифах
  • Дает возможность настраивать фильтрацию для борьбы с целевыми атаками
  • Выявляет подозрительную активность благодаря автоматическому обучению

selectel.ru/services/is/waf/

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

Аренда 1С: экономьте на оборудовании, лицензиях и обслуживании



Selectel предлагает вам новую услугу «Аренда 1С», которая сократит затраты вашей компании на оборудование, обновление ПО, приобретение лицензий и обслуживание 1С-серверов. По сравнению с покупкой, аренда оборудования и лицензий может сократить затраты на 1С в несколько раз. Ваши пользователи получат надежную систему, работоспособность которой мы гарантируем по договору.
Сейчас доступны два продукта: «1С: Бухгалтерия» и «1С: Зарплата и Управление Персоналом», но если вам нужен другой продукт — просто оставьте заявку, и мы предложим решение.

Виды услуги
Аренда сервера 1C
Вы арендуете сервер Selectel подходящей конфигурации, на котором будет работать ваша система.
  • Готовые конфигурации
  • Конфигурации под заказ
  • Решения под ключ и для опытных пользователей

1С-colocation
Перевезите оборудование с системой в наш дата-центр, где мы обеспечим оптимальные условия, а обслуживанием «железа» займутся администраторы Selectel.
  • Надежные дата-центры уровня Tier III
  • Круглосуточная техподдержка
  • Охраняемая территория
  • Стабильные шифрованные каналы связи

selectel.ru/services/1c-leasing/

[Дайджест Selectel] Первые новости 2019 года

Здравствуйте!
Это рассылка Selectel — рассказываем о первых новостях 2019 года. В сегодняшнем выпуске: акция «Сервер для программиста», администрирование кластера Kubernetes в «Виртуальном приватном облаке», подтверждение компетенции в Microsoft Azure, а также новые статьи в блоге и актуальные вакансии компании.


Продлили акцию «Сервер для программиста»
При покупке сервера CL15 за 15,000 руб. вы получаете 3 месяца размещения в дата-центре Selectel. Акция действует до 31 марта или пока серверы указанной конфигурации есть в наличии. Торопитесь, их число ограничено.


Администрирование кластера Kubernetes
В прошлом году в «Виртуальном приватном облаке» появилась возможность быстрого создания кластера Kubernetes. Это открытое ПО, которое помогает автоматизировать развертывание, масштабирование и управление контейнеризированными приложениями.
С этого года вы можете не только легко запустить кластер Kubernetes, но и передать его на администрирование в Selectel. Наши специалисты:
  • Проследят за корректной работой кластера
  • Подключат мониторинг и выведут на дашборд метрики
  • Интегрируют ваше приложение в архитектуру Kubernetes
  • Осуществят операции по созданию и развертыванию контейнеров
  • Интегрируются с вашим отделом разработки и настроят CI/CD-процесс
  • Напишите на managed@selectel.ru — мы проконсультируем и возьмем на себя управление кластером Kubernetes.

Подтвердили компетенцию в Microsoft Azure
Планируете миграцию в Azure или реализацию проектов на базе сервисов Microsoft Azure — доверьтесь профессиональной команде облачной интеграции. В январе сотрудники Selectel подтвердили компетенцию в части разработки приложений в Microsoft Azure — Application Development и теперь могут реализовывать самые смелые задачи.
Напишите на azure@selectel.ru — мы ответим на интересующие вопросы и подберем решение, учитывая баланс функциональности, производительности и стоимости.


Присоединяйтесь к нашей команде! У нас есть открытые вакансии, посмотреть полный перечень можно здесь.
selectel.ru/careers/all/

Selectel признан самым быстрорастущим облачным провайдером



Selectel, провайдер ИТ-инфраструктурных решений для бизнеса, в 2018 году развивался успешнее других игроков российского рынка IaaS. Такой вывод сделали эксперты iKS-Consulting в отчете «Облачный провайдинг 2018-2022: экономика, стратегии, бизнес-модели».

Selectel возглавил рейтинг наиболее динамично развивающихся провайдеров IaaS (Infrastructure-as-a-service, инфраструктура как услуга). Места в нем распределялись на основании темпов прироста выручки от облачных инфраструктурных сервисов в 2018 году.

Павел Алимов, генеральный директор Selectel:
Мы работаем на одном из самых высококонкурентных сегментов российской экономики. Поэтому для нас особенно приятно, что эксперты iKS отметили именно Selectel как лидера по росту. При этом, за последние 5 лет среднегодовой темп роста „облачной“ выручки Selectel превысил средний показатель по рынку в несколько раз

По оценкам iKS-Consulting, объем рынка IaaS в 2018 году составил 17.4 млрд рублей, что на 33% больше показателя 2017 года. В ТОП-5 его крупнейших игроков помимо Selectel вошли «Ростелеком», DataLine, «Сервионика» и «КРОК».

Эксперты iKS-Consulting прогнозируют, что в 2022 году объем рынка облачных услуг в России превысит 155 млрд рублей. Доля этого рынка, приходящаяся на IaaS увеличиться с 25% в 2018 году до 31% в 2022 году.

Selectel MeetUp: какие темы вам интересны?

Меня зовут Татьяна, я провожу встречи Selectel MeetUp, где мы говорим о высоконагруженных системах: делимся опытом решения реальных задач, с которыми сталкивается Selectel и наши клиенты.

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

Для всех, кто пройдет опрос, мы приготовили специальные подарки, которые можно будет получить на стойке регистрации на следующем Selectel MeetUp. Хорошего дня!

selectel.typeform.com/to/d2Ke03

Perf и flamegraphs



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

blog.selectel.ru/perf-i-flamegraphs/

Ботоводство



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

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

Разнообразие сфер применения ботов я хочу привести на примере собственной работы в компании Selectel. Мини-спойлер: начинал свою работу я в качестве технического писателя, теперь являюсь инженером отдела облачных решений. Путь внедрения виртуальных помощников начался с бота для отдела маркетинга, который отслеживает комментарии и упоминания компании в социальных сетях. Такая разработка является очень простой, но эффективно дополняет существующие решения на рынке, например, сервис IFTTT.

Следующими разработками в моей практике стали внутренний чат-бот для отдела HR и бот для общения с клиентами, представленный в качестве демо-стенда во время конференций SelectelTechDay в Санкт-Петербурге и Москве. Оба бота созданы с помощью разных сервисов и технологий. И прежде чем погружаться в технические подробности, рассмотрим верхнеуровневую схему устройства ботов.

Основные принципы ботостроительства


Деятельность чат-ботов строится вокруг 3 основных действий:
  • Получение или вывод информации происходит через определенные каналы связи, например, в Slack или диалогах Vk.com
  • Распознавание намерения — это комплексный анализ полученной информации для формирования ответа
  • Обработка действия — любая работа, проведенная на серверной стороне, необходимая для подготовки верного ответа. Например, если был запрошен прогноз погоды, то будет произведен запрос к некому API о погоде в городе N, и пользователю будут отправлены результаты этой команды
Основные действия чат-ботов объединяются в рамках задачи сохранения контекста для создания человекоподобной формы общения и поддержки диалога. Чат-бот должен «помнить» предмет разговора и адаптировать свои ответы соответствующим образом.

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

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

Ботостроительство
Изложенные выше 3 принципа работы чат-ботов (канал, анализ, действие) можно реализовать по-разному. Самый простой вариант — проводить сравнения поступающего текста и отправлять пользователю соответствующие ответы.


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

Для этого нам необходимо понимать, о чем говорит пользователь, контролировать ход диалога и в некоторых случаях выполнять определенные действия (например, бронировать переговорные комнаты). Добиться этого можно, используя следующие инструменты:
  • DialogFlow (Google)
  • Wit.ai (Facebook)
  • Azure Bot Service (Microsoft)
  • Rasa Core (Open Source)



При выборе продукта учитываются следующие факторы:
  • Насколько критично размещение исполняемого кода бота в рамках существующих систем
  • Например, в случае Wit.ai и Dialogflow мы не контролируем полностью весь процесс — мы отдаем этим приложениям текст и получаем готовый ответ. Используя Rasa Core или Azure BotBuilder SDK, мы можем хранить всю переписку в границах внутренних систем
  • Сколько каналов связи необходимо подключить
  • Dialogflow предоставляет возможность использования ограниченного количества коннекторов, которые подключают мессенджеры и социальные сети через указание ключей доступа. Для Wit.ai и Rasa Core можно использовать любое количество каналов, но логику подключения к ним необходимо реализовать самостоятельно (зачастую это очень тривиальная задача). Azure Bot Service имеет возможность использования коннекторов к определенным каналам, но не ограничен ими, и его можно подключать также к другим источникам самостоятельно
  • Насколько просто можно вносить изменения в базу знаний бота
При создании бота в виде программного кода без использования визуального интерфейса для взаимодействия с ним мы ограничиваем круг лиц, кто может вносить изменения в диалоги и ответы бота. Функционал добавления и редактирования фраз должен быть доступен для каждого
Для нашего внутреннего виртуального помощника чат-бота Тирекса была выбрана платформа от Google Dialogflow, которая предоставляет возможность визуального редактирования намерений, а выполнение действий осуществляется внутри частного облака в Selectel. Определяющими факторами стали скорость начала работы с ботом, безопасность при передаче сообщений и наличие канала Slack в списке поддерживаемых.


Идея создания чат-бота давно витала в воздухе компании, особенно учитывая, какие проблемы можно было решить с ним:
  • Рост числа сотрудников компании, а вместе с этим увеличивающийся поток однотипных вопросов вроде «Как пользоваться корпоративной библиотекой?» и «Где пообедать?»
  • Регулярное бронирование переговорных и оформление пропусков
  • Поиск информации и документов в корпоративной базе знаний


Создание и подключение бота в Dialogflow занимает несколько минут. В начале рассмотрим принципы работы чат-бота в системе, а затем добавим выполнение сложных действий.

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

Намерение включает в себя тренировочные фразы, параметры и ответы. Внутри тренировочной фразы мы выделяем параметры (например, время или место), которые необходимы для формирования корректного ответа.

Ответ указывается либо в намерении, либо Dialogflow отправляет запрос на наш сервер, который выполняет необходимую работу и возвращает обратно ответ на примере нашего чат-бота:
  • На простые вопросы (например, «Есть ли у нас программа страхования заграницей?») ответ закладывается в намерение
  • На более сложные задачи как «Есть ли свободные переговорные сейчас?» ответ формируется с помощью дополнительного запроса к серверу, который определяет свободное время для всех участников и комнат


Работа с намерениями
Рассмотрим работу с Dialoglow на примере бронирования переговорной. Мы создаем агент управления бронированиями и определяем следующие намерения:
  • Просмотреть существующие бронирования
  • Забронировать переговорную
Каждое из намерений вызывается тренировочными фразами. Чем больше их добавлено, тем вероятнее будет выполнено нужное действие. В нашем примере намерение «Забронировать переговорную» будем вызывать следующими фразами:
  • Забронируй на сегодня в 23.15 на 30 минут на меня
  • Привет. Прошу забронировать на 08.11.2018 переговорную с 15:00 до 16:00
  • Забронируй
  • Мне нужна переговорная


Принцип работы сбора данных в намерениях следующий:
  • Dialogflow на основе полученного ввода понимает, о каком намерении идет речь. В нашем примере — бронирование переговорных
  • Если обязательные параметры не были указаны в первом сообщении (например, время встречи), то чат-бот задаст уточняющие вопросы
  • После получения всех данных Dialogflow отправит запрос на наш сервер в VPC для бронирования нужной комнаты
Посмотрим на этот процесс в действии:


Обработка действия осуществляется отправкой запроса со всеми данными на заранее добавленный адрес сервера действий (Webhook URL):


По адресу website.ru/webhook находится сервер, который выполняет обработку сложных команд (в нашем примере возвращает строку «Привет от сервера!»). Github Gist для быстрого старта:


Создание бота с помощью RASA
Для использования чат-бота без сторонних сервисов для распознавания текста можно использовать инструменты наподобие Rasa, которые позволяют полностью управлять всем процессом работы бота. Rasa — набор программных компонентов с открытым исходным кодом, которые содержат распознавание речи и управление диалогами. Уже сейчас можно посмотреть на Boilerplate, который я подготовил для знакомства с платформой, а более подробную инструкцию мы опубликуем, если будут запросы от Habr-сообщества.

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

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