Популярность контейнеров и вычислительной модели без сервера выросла, как и количество доступных «облачных» контейнеров и соответствующих решений. В распоряжении потребителя весьма широкий выбор различных служб от разных поставщиков общедоступных «облачных» служб для развертывания контейнеров или функций без сервера. Выбрать среди них наиболее подходящую для конкретного применения непросто.
Однако решить эту задачу необходимо, если вы хотите воспользоваться контейнерами или вычислительной моделью без сервера в «облаке». В этой статье мы рассмотрим различные современные «облачные» контейнеры и платформы без сервера.
Контейнеры и функции без сервера
Для непосвященных кратко поясню, что делают контейнеры и функции без сервера. Контейнеры позволяют размещать приложения (или части приложений, в зависимости от того, какую архитектуру вы выбрали для своего приложения) в переносимой, изолированной среде. Они похожи на виртуальные машины, но без недостатков, связанных с производительностью.
Функции без сервера (также известные как вычисления без сервера) позволяют выполнять программный код по требованию. Пользователям приходится оплачивать размещение только во время выполнения кода. Таким образом, главное преимущество функций без сервера заключается в том, что сервер не должен работать постоянно, если он обслуживает приложения лишь часть времени.
Контейнеры и функции без сервера не универсальны для всех случаев, но они хороши для многих рабочих нагрузок. Функции без сервера помогут сэкономить деньги (по крайней мере, при определенных обстоятельствах), хотя при этом возникают новые проблемы безопасности. Благодаря контейнерам становится проще быстро развертывать приложения и масштабировать службы, не управляя при этом несколькими экземплярами серверов.
Стоит также отметить, что технологии контейнеров и вычислительной модели без сервера внутренне не взаимосвязаны. Одну можно использовать без другой. Однако, поскольку обе технологии успешно масштабируются и способствуют снижению стоимости вычислений, их обычно применяют вместе. И если вы ищете «облачную» службу для одной из этих технологий, то, скорее всего, постараетесь разместить в «облаке» и другую.
Контейнер AWS и варианты вычислений без сервера
Обзор «облачных» контейнеров и служб вычислений без сервера мы начнем с предоставляемых на Amazon Web Services, или AWS.
Самый простой (и вместе с тем трудоемкий) способ запуска контейнеров на AWS — подготовить экземпляры виртуальных машин с использованием EC2, установить на них Docker и разместить контейнеры. Однако для этого требуется выполнить много работы вручную, и решение сложно масштабировать.
Поэтому AWS предоставляет службу Elastic Container Service (https://aws.amazon.com/ecs/), или ECS. ECS автоматизирует большинство задач подготовки инфраструктуры и развертывания контейнеров, необходимых для использования контейнеров Docker. EC2 по-прежнему остается базовой инфраструктурой, но это обстоятельство не имеет особого значения для ИТ-специалистов.
В ECS используется собственный инструмент оркестровки для управления кластерами контейнеров. Если вы предпочитаете Kubernetes, открытую платформу оркестровки, то можно задействовать EKS (https://aws. amazon. com/eks/). EKS похожа на ECS, но в ней решением оркестровки является Kubernetes.
И ECS, и EKS устраняют значительную часть ручных операций при использовании контейнеров, но управлять собственно инструментарием оркестровки традиционно приходится вручную. Другими словами, диспетчером контейнеров необходимо управлять, и вам придется выполнять значительную часть работы вручную, хотя службы автоматизируют многие действия при развертывании контейнеров.
Поэтому в 2017 году AWS представила Fargate (https://aws.amazon.com/fargate/), специальный «вычислительный механизм» для инфраструктуры контейнеров на AWS. Fargate не является отдельной службой контейнеров. Его можно рассматривать как особый режим развертывания для ECS и EKS, в котором автоматизировано управление оркестровщиком, наряду с большинством других компонентов контейнеризованной среды. При использовании Fargate в качестве типа экземпляра достаточно настроить несколько простых параметров, например указать, сколько ресурсов процессора и памяти вы хотите выделить для контейнеризованного приложения. Остальное сделает Fargate.
В отношении вычислений без сервера AWS отличается меньшей сложностью. Предоставляется только одно решение без сервера, именуемое Lambda. Хотя Lambda не был первым продуктом для вычислений без сервера на рынке (технологии, которые в той или иной степени обходились без сервера, разрабатывались примерно за десять лет до выпуска Lambda в 2014 году), это было первое широко рекламируемое решение без сервера, и оно сыграло важную роль в повсеместном распространении вычислений без сервера.
Контейнеры и вычисления без сервера на Azure
Сложность служб контейнеров в «облаке» Microsoft Azure довольно высока. В прошлом Azure предоставляла службу контейнеров Azure Container Service. После того как была добавлена полная поддержка оркестровщика Kubernetes, название изменили на Azure Kubernetes Engine (https://azure.microsoft.com/en-us/services/kubernetes-service/).
Ситуация становится более запутанной, если учесть, что Kubernetes — не единственный оркестровщик, который можно использовать на Azure, он также поддерживает оркестровщики контейнеров DC/OS и Docker Swarm.
Это означает, что, размещая контейнеры на Azure, можно задействовать почти любой оркестровщик, хотя представители Microsoft сегодня говорят только о Kubernetes.
В решении без сервера Azure разобраться проще. Оно называется Azure Functions (https://azure.microsoft.com/en-us/services/functions/) и делает, в сущности, то же самое, что AWS Lambda, хотя между этими двумя службами есть небольшие различия в поддерживаемых языках программирования, времени выполнения функций и других деталях, выходящих за рамки этой статьи.
Контейнер и решение без сервера Google Cloud
Третье и последнее широко распространенное общедоступное «облако» для контейнеров и вычислений без сервера — Google Cloud.
В отличие от AWS и Azure, Google с первых шагов сделала ставку на Kubernetes, и «облачная» служба контейнеров компании всегда называлась Google Kubernetes Engine (https://cloud.google.com/kubernetes-engine/), или GKE. Чтобы использовать иной оркестровщик контейнеров в Google Cloud, вам придется подготовить собственные виртуальные машины и управлять кластером контейнеров вручную.
Google Cloud Functions (https://cloud.google.com/functions/) — служба вычислений без сервера от Google. Cloud Functions безупречно работает как решение без сервера, но основное внимание Google обращено на контекст Firebase (https://firebase.google.com/), мобильную инфраструктуру разработки, интегрированную с Cloud Functions. Словом, если вы хотите разрабатывать мобильные приложения и использовать в них функции без сервера, то Firebase и Google Cloud Functions — превосходный выбор. Но если вам нужны исключительно вычисления без сервера, то предпочтительны Lambda или Azure Functions, которые не проектировались в первую очередь в расчете на мобильную среду.