Сегодня различные поставщики общедоступных сетевых служб выпускают на рынок множество «облачных» служб для развертывания контейнеров или функций без сервера. Разобраться в них и выбрать лучшую — непростая задача. Однако ее необходимо решить, если вы хотите воспользоваться преимуществами контейнеров и модели вычислений без сервера в «облаке». Рассмотрим существующие в настоящее время «облачные» контейнеры и платформы без сервера.
Что такое контейнеры и функции без сервера
Начнем с краткого обзора возможностей контейнеров и функций без сервера. С помощью контейнеров можно разместить приложения (или их части, в зависимости от архитектуры приложения) в переносимой изолированной среде. Они похожи на виртуальные машины, но не снижают производительность.
Функции без сервера (также известные как вычисления без сервера) позволяют выполнять программный код по требованию. При этом затраты на размещение существуют лишь в то время, когда выполняется программный код. Таким образом, главное достоинство вычислений без сервера состоит в том, что компаниям не нужно содержать постоянно работающий сервер, если он предоставляет приложениям лишь часть времени.
Контейнеры и функции без сервера удобны не во всех случаях, но все же полезны для многих рабочих нагрузок. Вычисления без сервера при удачных обстоятельствах помогут сэкономить, хотя при этом могут возникать проблемы с безопасностью. Кроме того, с помощью контейнеров проще быстро развертывать приложения и масштабировать службы без необходимости управлять несколькими экземплярами серверов.
Следует также отметить, что между технологиями контейнеров и вычислений без сервера нет внутренней связи, вы можете использовать что-то одно. Впрочем, поскольку обе технологии способствуют масштабируемым, экономичным вычислениям, их часто применяют вместе. Если вам нужна «облачная» служба для одной из этих технологий, то с большой долей вероятности вы постараетесь разместить в «облаке» и другую.
Контейнер AWS и варианты вычислений без сервера
Обзор «облачных» служб контейнеров и вычислений без сервера мы начнем с предоставляемых на Amazon Web Services, или AWS.
Самый простой способ запускать контейнеры на AWS — настроить экземпляры виртуальной машины с использованием EC2, установить на них Docker и разместить контейнеры. Однако этот процесс предусматривает большой объем ручной работы и его нелегко масштабировать.
Поэтому AWS предоставляет службу Elastic Container Service (https://aws.amazon.com/ecs/), или ECS, которая автоматизирует большинство задач по подготовке инфраструктуры и развертыванию контейнеров, необходимых для использования контейнеров Docker. Базовая инфраструктура по-прежнему остается EC2, но это в действительности, с точки зрения ИТ-специалиста, не имеет значения.
ECS использует собственный инструмент оркестровки для управления кластерами контейнеров. Если вы предпочитаете Kubernetes, открытую платформу оркестровки, то можете воспользоваться EKS (https://aws.amazon.com/eks/). EKS похож на ECS, но в случае с EKS решением оркестровки является Kubernetes.
И ECS, и EKS устраняют необходимость в большей части операций с контейнерами, выполняемых вручную, но при этом традиционно требуется ручное управление самими инструментами оркестровки. Другими словами, вам придется управлять своим диспетчером контейнеров, поэтому объем работы по-прежнему велик, несмотря на автоматизацию многих этапов развертывания контейнеров.
В 2017 году AWS представила Fargate (https://aws.amazon.com/fargate/), специальный «вычислительный механизм» для инфраструктуры контейнеров на платформе AWS. Fargate не является отдельной службой контейнеров. Его следует рассматривать как специальный режим развертывания для ECS и EKS, в котором автоматизированы управление оркестровщиком и большинством других компонентов контейнеризованной среды. При использовании Fargate в качестве типа экземпляра пользователю нужно лишь настроить несколько основных параметров, например сколько ресурсов процессора и памяти вы хотите назначить контейнеризованному приложению. Остальное сделает Fargate.
Вычисления без сервера в AWS отличаются меньшей сложностью. Имеется лишь одно решение без сервера, Lambda. Оно не было самым первым вычислительным решением без сервера на рынке (технологии, в большей или меньшей степени соответствующие определению «без сервера» существовали в течение десяти лет до появления Lambda в 2014 году), но первым широко рекламируемым решением без сервера. Lambda содействовала массовому внедрению вычислений без сервера.
Контейнеры и вычисления без сервера на Azure
Службы контейнеров в «облаке» Microsoft Azure довольно сложны. Раньше Azure предоставляла одну службу контейнеров, именуемую просто Azure Container Service, но впоследствии, после добавления полноценной поддержки оркестровщика Kubernetes, название было изменено на Azure Kubernetes Engine (https://azure.microsoft.com/en-us/services/kubernetes-service/).
Ситуация еще более запутывается, поскольку Kubernetes не единственный оркестровщик, который можно использовать с Azure. 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, которые не предназначались в первую очередь для мобильных решений.