большой, мех и безобразный

bolshoj meh i bezobraznyj?v=1656610450

Пьер Бовер

0*P7XjBh6QtYZ5z7wJ

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

Несколько месяцев спустя было объявлено о Firebase Cloud Functions. Служба все еще находится в бета-версии, но я с удовольствием пользуюсь ею уже несколько месяцев в производстве.

Давайте посмотрим, как это делается.

Что такое облачные функции Firebase?

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

Во многих случаях эта новая парадигма может упростить написание, поддержку и исполнение бэкенд-кода.

Облачные функции Firebase, в частности, похожи на блоки Lego, которые можно подключить к любой службе Firebase. Например, функция может быть запущена, когда изображение загружается в Firebase Storage, чтобы создать миниатюру или, возможно, очистить некоторые пользовательские данные, когда узел удален в базе данных реального времени. Практически все интересное, что происходит в Firebase может вызвать функцию.

Если этого недостаточно, вы можете использовать HTTP для запуска функций из GET, POST и т.д. Просмотрите это удивительное видео о том, как объединить Firebase Hosting с Cloud Functions, чтобы создать полноценное приложение Express:

Большой

Инфраструктура не становится легче

Инфраструктура полностью отстранена от вас, как и все остальные Firebase. Каждый раз, когда функция запускается, новый виртуальный сервер оживает, выполняет свою работу и возвращается во взвешенное состояние. Магия Google Cloud автоматически запускает ваши функции и масштабирует инфраструктуру в соответствии с рабочей нагрузкой.

Ценообразование

Облачные функции в целом очень рентабельны. Сложно сравнивать цены облачных провайдеров, но я могу сказать, что, опираясь на свой опыт, Firebase Cloud Functions были смешно недорого. Сложно поверить, что Google зарабатывает на этом деньги.

Прост в использовании

Как обычно у Firebase и Google, документы отличные, и вы не будете заниматься умственной акробатикой, чтобы получить это. В Github также есть множество образцов, которые помогут вам начать. Аутентификацию развертывания обрабатывает Firebase CLI, поэтому запуск и запуск радушного мира – это буквально:

firebase init functionsfirebase deploy

Я думаю, что простота использования Firebase и Google Cloud в общем-то просто потрясающая, особенно по сравнению с конкурентами.

Гибкий

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

Вот некоторые проблемы, которые мы решили с помощью облачных функций Firebase:

  • Создавайте PDF-файлы для онлайн-сервиса выставления счетов с помощью Phantom.js и подписывайте эти счета-фактуры в государственной службе
  • Подключите службу Go к стороннему поставщику SOAP (тьфу)
  • Отправляйте электронные письма через HTTP из любой точки нашего стека

Мех

Холодные старты

Масштабируемость отличная, но время выполнения может сильно колебаться. Простая функция hello world может занять 3 мс, чтобы выполнить свою работу или 100 мс.

functions.https.onRequest((request, response) => {    response.send(“Hello from Firebase!”);});
1*7oLzO7vAtNeEChBQrYMpiA

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

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

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

Нет планировщика (cron)

Облачные функции идеально подходят для выполнения задач с низким трафиком, например создание отчетов или периодического резервного копирования в 2 часа ночи, но с Firebase или Google Cloud нет простого способа активировать свои функции по расписанию.

Команда Firebase рекомендует создать проект App Engine, чтобы организовать эти триггеры. Сервис действительно требует что-то вроде планировщика Heroku.

Только JavaScript

О, я в порядке с JavaScript, но и Azure, и AWS поддерживают многие другие языки. Иронично, что Google не поддерживает Go в своем облачном сервисе, но поддерживает AWS.

Узел 6

Опять же конкуренция улучшается. Функции AWS Lambda и Azure уже работают на Node 8. Наибольшим недостатком здесь является возвращение к обещаниям без асинхронности/ожидания или необходимости настраивать Babel в вашем проекте.

Уродливый

Рабочий процесс разработчика

За исключением функций, запускаемых HTTP, вы не можете запускать свои функции локально. Функции, запускаемые службой Firebase, должны быть развернуты в облаке.

Это имеет много уродливых последствий:

  • Маленькие ошибки в конечном счете стоят много времени, поскольку новые функции начинают работать за несколько минут.
  • Развернутые функции не имеют очевидных версий. Похоже, что все журналы одной функции относятся к одной версии. Никогда не понятно, когда новые функции действительно работают, так что ваш единственный выбор — вручную запустить функции и увидеть, что произойдет™.
  • Никаких откатов

Среды

Кроме предыдущих пунктов, управлять средой сложно.

Вы можете добавлять переменные среды к своим проектам функций с помощью Firebase CLI, но, как и другие аспекты Firebase, это плохо масштабируемый наивный подход.

Вам понадобятся учетные данные, чтобы получить доступ почти ко всему за пределами песочницы Firebase. Для других служб Google Cloud эти аккаунты имеют форму .json файлы. Умножьте это на каждую среду (разработчик, производство, постановка), и вы можете получить королевский беспорядок.

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

Я бы хотел увидеть Окружающая среда вкладку в консоли Firebase, где я мог бы легко управлять этими настройками для всего проекта Firebase. Переключение между средами должно быть столь же простым, как firebase use production.

Вывод

Кроме некоторых трений во время фазы разработки мой опыт работы с Firebase Cloud Functions был положительным. После развертывания эти элементы надежны и не требуют обслуживания, как было обещано. Да, Firebase наконец полностью бессерверен. Ура!

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

Не считая того, справедливо сказать, что у конкурентов есть более зрелый продукт. Если вы не инвестируете в Firebase или Google Cloud, а рассматриваете возможность использования облачных функций в своем стеке, вам наверняка стоит обратить внимание на то, что могут предложить AWS или Azure.

Честно говоря, я немного озабочен тем, что служба все еще находится в бета-версии. Прошло больше года с момента объявления и прогресс чувствуется очень медленно. Кажется, что конкуренция гораздо больше отдана своим облачным продуктам, даже если, по словам Дайаны Грин, генерального директора облачного бизнеса Google, Google Cloud является «облаком с наибольшей скоростью роста».

Это все.

Примечание: В предыдущей версии этой статьи я утверждал, что невозможно писать тесты для функций, не являющихся HTTP. Это неправильно и вот документы, как это сделать.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *