Компания Twilio представила новый сервис под названием Functions. Подобно AWS Lambda или Azure Functions, это бессерверный хост для исполнения кода JavaScript, работающий с API-интерфейсами Twilio. Его пользователям нет необходимости заказывать виртуализованные серверы для небольшого числа вызовов или управлять масштабированием перегруженного сервиса: все что вам надо, это написать нужный код, и все остальное сделает Functions.
Functions уже не первая облачная среда Twilio для запуска кода, которая использует ее API. В 2011 г. компания обзавелась сервисом TwiMLbin, являющимся хостом статического языка разметки Twilio для целей тестирования и создания опытных образцов.
Twilio расширила свой сервис, так что TwiMLbin можно использовать как конечную точку для действия вызова, а также для работы с вебхуками из других приложений (webhook — автоматическое уведомление приложения о событиях в системе или другом приложении в реальном времени). В сочетании с возможностью держать ресурсы в сервисе Twilio это вам позволит быстро экспериментировать с добавлением в ваши приложения функций голоса и SMS или управлять сравнительно простыми приложениями с небольшим трафиком.
TwiMLbin был одним из способов начать работать с решениями Twilio, но имел один крупный недостаток: сервис был ограничен хостингом и исполнением статической разметки. Для более сложных приложений вам по-прежнему требовалось развернуть веб-сервер или перенести код в облачный PaaS-сервис типа Heroku или Azure. Такой подход работает, когда функционал Twilio является дополнением к другому приложению, но поскольку платформа добавляет лишние инструменты и сервисы, это не так практично, особенно когда вы сцепляете API-интерфейсы Twilio для создания, например, облачного контактного центра.
Запуск Functions является интересным шагом Twilio, но он имеет смысл в рамках общего перехода индустрии от IaaS к PaaS. Почему вы должны конфигурировать веб-сервер и управлять им, когда все, что вам надо, это подключить вебхук к небольшой логике, а потом задействовать Twilio API (или наоборот!)?
Построенный на существующих облачных сервисах, Twilio Functions является средством для формирования в облаке кода node.js, обрабатывающего вызовы Twilio API. После официального представления Functions я побеседовал с главным управляющим подразделения Twilio Messaging Патриком Малатаком о соображениях, лежащих в основе нового сервиса, и о том, как он вписывается в общий опыт разработчиков.
«Нам видна общая картина, — сказал он. — Пользователям нужны API для используемых ими сервисов». С Functions эти API остаются в сердцевине сервиса, но что добавляется, так это независимая среда программирования для обеспечения их работы. Функция играет роль триггера, она вызывает API или даже их последовательность.
Малатак считает, что Functions улучшит темпы разработок, так здесь нет необходимости думать о масштабировании.
Как и большинство других бессерверных сред, Functions использует вебхуки как триггеры. Вы можете задать тип используемого вебхука, и редактор кода Functions поможет вам извлечь полезную нагрузку, которая сможет потом передаваться Twilio API. В настоящее время это относительно простая среда, предоставляющая для вашего кода функциональность node.js. В этом есть смысл, так как node.js лучше всего работает в роли переключателя в среде, управляемой сообщениями. Сообщения для Functions поступают через вебхуки, затем обрабатываются и результат доставляется через API-интерфейсы передачи сообщений Twilio.
Малатак рассматривает бессерверную модель как стиль программирования, где вам приходится по минимуму думать обо все другом, кроме вашего кода. «Для разработчиков это прогресс, так как происходит абстрагирование. Абстракции важны, так как с ними легче сконцентрироваться на результате». Разработчики получают дополнительный рычаг, поскольку им не нужно думать о сложных вещах типа масштабирования.
Конечно, чисто облачная среда разработки является только началом, и Twilio, замечает Малатак, думает о том, как снабдить разработчиков продуктивным инструментарием. В любом случае желательна интеграция с существующими средами для разработчиков, и потребуется работа внутри большинства существующих пакетов инструментальных средств.
Для начала достаточно встраиваемого инструментария. Шаблоны помогают быстро писать код, и тому же помогает интерактивная документация. Встроенный отладчик упрощает процесс приведения кода в работающее состояние, и в ходе экспериментов вам не надо испещрять ваш код консольными дописками.
Как и большинство бессерверных платформ, Functions не запоминает свое состояние. Это подходит для большинства операций, где вас интересуют только вход и выход и не требуется ничего, кроме рабочего процесса внутри Functions. Если же вам все-таки надо запоминать состояние между действиями, вы можете воспользоваться сервисом Twilio Sync для сохранения небольших объемов информации в виде JSON-объектов (примером может служить URI-идентификатор, указывающий на контент, хранимый в Amazon S3 или подобных местах). Это подход, который вам позволяет делать с Functions гораздо больше, чем кажется на первый взгляд.
Twilio делает очень разумные вещи. Компания использует плюсы существующих моделей бессерверных вычислений для сокращения собственных операционных затрат и одновременно предоставляет вам средства, чтобы вы получали то же самое. Это модель, которая для всех снижает планку, облегчая создание и масштабное развертывание телекоммуникационного кода.