Использование Firebase Serverless — мобильные и веб-приложения стали проще

Опубликовано: 2022-03-11

Для мобильных и веб-приложений обычно требуется внутренний сервер. Веб-приложениям требуется веб-сервер для доставки контента. Приложения также должны хранить профили пользователей и мультимедиа, такие как изображения и видео. Связь между приложением и сервером часто осуществляется с помощью API, которым обычно является REST.

Приложения написаны на разных языках. Приложение iOS написано на Swift или Objective-C. Приложения для Android пишутся на Java или Kotlin. Веб-приложения пишутся на HTML, CSS, JavaScript и часто на сложных фреймворках, таких как Angular или React. Front-end разработчики должны знать соответствующие языки и связанные с ними инструменты разработки.

Внутренние серверы написаны на разных языках, включая Go, Java, PHP и Python. Каждый из этих языков имеет собственный набор библиотек для облегчения написания сложных приложений.

Большинство разработчиков считают себя front-end или back-end разработчиками. Разработчики с полным стеком, которые владеют обеими ролями, относительно редки.

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

Что такое Firebase?

Firebase начиналась как архитектура мобильного обмена сообщениями, которая была приобретена Google. С тех пор он превратился в набор из более чем 25 компонентов, которые взаимодействуют с облачной платформой Google.

Firebase состоит из комплектов для разработки программного обеспечения (SDK), которые позволяют мобильным и веб-разработчикам просто, безопасно и надежно получать доступ к облачным функциям. Они автоматически компенсируют плохое подключение к сети. Существует веб-консоль Firebase для включения, администрирования и защиты компонентов. Существуют также инструменты командной строки и REST API для более глубокого использования.

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

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

Цены и тарифные планы Firebase

Базовый тарифный план Firebase, называемый Spark, бесплатен. Существуют ограничения на использование облачных ресурсов, но они довольно велики. Можно запустить приложение разумного размера без каких-либо затрат.

Веб-сайт с объемом контента до 1 ГБ и передачей менее 10 ГБ в месяц может быть размещен в рамках плана Spark. Firestore разрешает до 1 ГБ данных и до 10 ГБ сетевого трафика в месяц. Пределы облачного хранилища: до 5 ГБ данных и загрузка до 1 ГБ в день.

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

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

Как настроить Firebase

Для аутентификации требуется учетная запись электронной почты. Предпочтительна учетная запись почты Google. Их можно создать на странице https://mail.google.com.

Также требуется учетная запись Google Cloud Platform (GCP). Бесплатная пробная версия доступна здесь. Это дает вам кредит в размере 300 долларов США, который доступен в течение года. Кредитная карта требуется в качестве удостоверения личности. Google может взимать 1 доллар США, а затем возвращать его. Средства с кредитной карты будут списываться ежемесячно, если включено выставление счетов и используются оплачиваемые ресурсы. Есть также компании-поставщики Google, которые выступают в качестве посредников для выставления счетов. Вы платите провайдеру за использование облака, а он платит Google. У них есть свои тарифные планы, и они могут предложить бесплатную пробную версию.

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

Проекты Firebase также являются проектами GCP. Вы можете создать проект GCP и импортировать его в Firebase или создать проект Firebase, который также создаст проект GCP. Консоль Firebase находится здесь.

Для разных типов приложений требуется разная настройка. Основные из них — Android, iOS и веб-приложения. Инструкции по установке можно найти в официальных руководствах Firebase.

Для некоторых операций требуются инструменты Firebase Command Line Interface (CLI). Для этого необходимо установить Node.js и инструмент npm . При работе в macOS или Linux команду npm нужно будет запускать с sudo .

sudo npm install -g firebase-tools

Аутентификация и авторизация

Аутентификация Firebase, пожалуй, наиболее широко используемый компонент Firebase. Пользователи могут выбрать один или несколько механизмов аутентификации. Это адрес электронной почты и пароль, номера телефонов и поставщики федеративных удостоверений Google, Facebook, Twitter и GitHub. Может быть включено любое количество механизмов аутентификации.

Пользовательский интерфейс Firebase предлагает пользователю использовать механизм:

Аутентификация Firebase

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

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

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

Большинство мобильных и веб-приложений требуют, чтобы большое количество пользователей входило в их приложения. Например, любой, у кого есть учетная запись Google Mail, может пройти аутентификацию в любом приложении, поддерживающем аутентификацию Google. Для ограничения доступа к приложению определенным пользователям требуется форма авторизации. Это можно легко сделать, сохранив ассоциации между адресами электронной почты и ролями доступа в хранилище данных. При успешной аутентификации адрес электронной почты ищется в хранилище данных. Если пользователь существует с правильными ролями, доступ предоставляется; в противном случае пользователь принудительно выходит из системы.

Хостинг Firebase

Хостинг Firebase позволяет размещать статический веб-контент, включающий JavaScript, в облаке без необходимости использования веб-сервера. Контент кэшируется на границах глобальной сети доставки контента (CDN). Это обеспечивает быстрый доступ к контенту из любой точки мира.

Один или несколько веб-сайтов можно разместить, добавив их в раздел «Хостинг» проекта Firebase в консоли Firebase. Контент доставляется через SSL и получает два URL-адреса в форме [https://имя-сайта.web.app] и https://имя-сайта.firebaseapp.com, где site-name это либо имя проекта, либо указанное пользователем имя сайта.

Очень легко разместить сайт на собственном доменном имени, если вы можете изменить записи DNS для домена. Вы добавляете свое доменное имя на сайт в консоли Firebase. Затем вам будет предоставлена ​​запись DNS TXT, которую вы должны добавить в DNS вашего домена, чтобы доказать Google, что вы владеете доменом. Как только запись TXT станет видимой, вы сможете получить записи DNS A для сайта. Сертификат SSL автоматически предоставляется для сайта. После предоставления сертификата сайт доступен по всему миру. В принципе, обновление DNS и подготовка сертификата может занять несколько часов. На практике процесс можно завершить за 20 минут.

Чтобы добавить контент на хостинг, в первую очередь создайте каталог для сайта и cd в него из командной строки. Затем войдите в Firebase и инициализируйте каталог проекта.

 firebase login firebase init

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

Создайте файл с именем firebase.json , который определяет корневой каталог веб-сайта и исключаемые файлы. Вам также понадобится файл .gitignore , чтобы исключить файлы из системы контроля версий.

 { "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] } }

Затем скопируйте статическое содержимое в общий каталог. Наконец, разверните сайт в облаке.

 firebase deploy

Чтобы изменить веб-контент, просто измените файлы контента и введите команду развертывания. Каждое развертывание отображается как версия в консоли Firebase. Вы можете вернуться к предыдущей версии одним щелчком мыши.

Хостинг Firebase также может переписывать URI для файлов, облачных функций и Cloud Run. Это значительно упрощает работу, так как для этих сервисов не нужно назначать домен. Перезаписи определяются путем добавления раздела перезаписи в раздел хостинга файла firebase.json. Развертывание хостинга завершится ошибкой, если служба не существует.

 { "hosting": { "public": "public", "rewrites": [ { "source": "/xxx", "destination": "/profile.html" }, { "source": "/yyy", "function": "profile" }, { "source": "/api{,/**}", "run": { "serviceId": "cloud-api", "region": "europe-west1" } } ] } }

Хранилище данных

Firebase предоставляет клиентские API для доступа к облачному хранилищу данных. Существует три типа хранения:

  • База данных реального времени
  • Облако Firestore
  • Облачное хранилище

Это позволяет мобильным и веб-клиентам хранить и извлекать данные без необходимости использования сервера.

База данных реального времени

База данных реального времени — это облачная база данных NoSQL. Данные в базе данных реального времени автоматически синхронизируются в режиме реального времени со всеми подключенными устройствами. Он работает кроссплатформенно для Android, iOS и Интернета. Данные хранятся в виде древовидной структуры JSON. Правила безопасности могут быть установлены для управления доступом к данным для чтения и записи.

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

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

Правила безопасности по умолчанию запрещают доступ к данным. Правила можно добавлять глобально или к отдельным узлам объекта JSON. Правила безопасности контролируют доступ для чтения и записи к данным и могут выполнять проверку.

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

Облако Firestore

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

Cloud Firestore скоро заменит Cloud Datastore. Его можно запустить в режиме хранилища данных или в собственном режиме. Все приложения хранилища данных будут автоматически перенесены в Cloud Firestore.

Cloud Firestore лучше всего подходит для относительно небольших фрагментов данных. Он может иметь глубоко вложенную структуру данных. Бесплатный лимит составляет 1 ГБ данных.

Облачное хранилище

Облачное хранилище предназначено для хранения файлов, таких как изображения и видеоклипы. Мобильные и веб-клиенты могут использовать Firebase для загрузки и скачивания файлов напрямую в облако и из него без необходимости использования внутреннего сервера. Бесплатный лимит составляет 5 ГБ данных.

Облачные функции

Облачные функции — важная технология для создания бессерверных приложений. Облачная функция может быть написана на JavaScript, TypeScript, Python или Go и развернута непосредственно в облаке Google. Функция запускается HTTP-запросом или событием в облаке, например записью в облачное хранилище.

Облачная функция может обрабатывать только один запрос за раз, но облако автоматически масштабирует функцию, реплицируя ее. Облачная функция, написанная на Python, использует библиотеку Flask для обработки HTTP-запросов. Функция принимает объект запроса в качестве параметра и возвращает тело ответа.

Для простой облачной функции Python требуется рабочий каталог, а точка входа находится в файле main.py

 def simple_cloud_function(request): return "It worked"

Зависимости управляются pip и сохраняются в файле requirements.txt .

 Flask==1.0.2

Функция развертывается с помощью инструмента командной строки gcloud . Он определяет имя функции, язык и триггер.

 gcloud functions deploy simple_cloud_function --runtime python37 \ --trigger-http

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

 gcloud functions describe simple_cloud_function Url: https://europe-west1-project-id.cloudfunctions.net/simplecloud_function

Облачные функции могут вызывать API Google Cloud и Firebase для обеспечения внутренних функций. Они предоставляют информацию журнала о запуске выполнения и времени выполнения. Дополнительное ведение журнала может быть легко добавлено. Журналы можно просматривать в пользовательском интерфейсе ведения журнала Stackdriver и с помощью инструмента командной строки gcloud .

 gcloud functions logs read simple_cloud_function

Функции можно просматривать и удалять в Google Cloud Console.

Облачная консоль Google: функции

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

Облачный бег

Cloud Run — это недавно добавленная функциональность, которая значительно упрощает работу с бессерверными приложениями. Он позволяет запускать контейнеры Docker в облаке без сложной настройки инфраструктуры. Он может работать в управляемом режиме, в котором используется среда выполнения Knative, построенная на Kubernetes. Он также может работать на Anthos, который также построен на Kubernetes, но позволяет запускать контейнеры в облаках и даже в вашем собственном центре обработки данных. Нет необходимости настраивать и управлять кластером Kubernetes, поскольку все это делается автоматически.

Cloud Run может управлять любым приложением, которое можно встроить в образы Docker. Он автоматически масштабирует количество контейнеров в зависимости от спроса. Он также масштабируется до нуля, когда служба не используется. Плата за неиспользованные услуги не взимается.

Контейнеры Docker должны запускать веб-сервер, если они должны отвечать на HTTP-запросы. Сервис Python будет использовать Flask. Точка входа будет в app.py

 from flask import Flask, request app = Flask(__name__) @app.route('/api/profile') def profile(): page = ''' Page content ''' return page

Приложению требуется Dockerfile для создания образа.

 FROM python ENV APP_HOME /app WORKDIR $APP_HOME COPY . . ENV PORT 8080 RUN pip install Flask gunicorn firebase-admin CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app

Контейнеры Cloud Run развертываются непосредственно в облаке.

 gcloud run deploy --image=image_name --platform=managed \ --region=europe-west1 --allow-unauthenticated

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

 gcloud run services list SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT cloud-api europe-west1 https://cloud-api-h42ifbxkyq-ew.a.run.app [email protected] 2020-02-05T10:53:30.006Z

URL-адрес содержит случайное число, которым трудно управлять. Именно здесь правила перезаписи Firebase Hosting становятся наиболее полезными.

Сервисы можно просматривать и удалять в Google Cloud Console.

Облачная консоль Google: службы

Cloud Run идеально подходит для размещения REST API. Ежемесячные бесплатные лимиты составляют 180 000 секунд ЦП, 360 000 ГБ секунд памяти, 2 миллиона запросов и 1 ГБ исходящего сетевого трафика. Ограничение бесплатного сетевого исходящего трафика применяется только в том случае, если служба развернута в регионе Северной Америки.

Аутентификация

По умолчанию контейнеры Cloud Functions и Cloud Run являются общедоступными, и к ним может получить доступ любой пользователь в Интернете. Используя правила IAM в Cloud Console, службы могут быть ограничены участниками проекта, группами Google и отдельными адресами электронной почты.

При наличии ограничений несанкционированный доступ запрещен. Чтобы разрешить доступ, в заголовки запроса необходимо добавить токен идентификации. Токен идентификации можно получить с помощью команды gcloud или в процессе аутентификации Firebase.

 gcloud auth print-identity-token

Требуется заголовок авторизации.

 Authorization: Bearer id-token

Резюме

Google Cloud Platform и Firebase предоставляют ряд продуктов, которые значительно облегчают разработку мобильных и веб-приложений. Необходимость во внутреннем сервере можно полностью исключить, предоставив клиентам доступ к облачным функциям напрямую или развернув внутренний код в облаке с помощью Cloud Functions или Cloud Run.

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