Введение в Cloud native. Часть 1. Определение и модель облачных вычислений
Широкое распространение облачных технологий привело к появлению парадигмы в разработке, внедрения и обслуживании компьютерных систем. Наиболее закрепившееся название этой парадигмы - "Cloud native".
Основная цель облачных технологий состоит в повышении мощности облачных вычислений и возможности заставить приложения работать в облаке так, как они могут это делать на локальных машинах. Сама концепция облачного приложения предполагает собой высокораспредленную систему, которая находится в "облаке" и имеет устойчивость к изменениям (например автоматическое масштабирование при увеличении или уменьшении нагрузки).
Что такое cloud native?
25 мая 2010 года Пол Фримантл (Paul Fremantle), CTO и сооснователь WSO2, написал пост в своем блоге, под названием "Cloud Native". Он был одним из первых, кто использовал этот термин.
Ключевая концепция, по мнению Фримантла, заключается в том, что облачные приложения (cloud native applications) должны быть разработаны специально для "облака" и иметь свойства, которые используют преимущества облачной среды и модели облачных вычислений. Конечно можно переместить традиционное приложение (предназначенное для работы "на земле") в облако, подход который обычно называется "подъем и сдвиг" (lift and shift), но это не сделает приложение нативным (native) для облака.
Тут стоит определить что означает для приложения быть нативным для облака (cloud native application)". Фонд The Cloud Native Computing Foundation (CNCF) предоставляет следующее определение:
"Нативные облачные (Cloud native) технологии позволяют организациям создавать и запускать масштабируемые приложения в современных динамических средах, таких как публичные, частные и гибридные облака. Контейнеры, сервисные сита (service meshes), микросервисы, неизменяемая инфраструктура и декларативные API являются примером такого подхода."
"Эти техники позволяют слабосвязанным системам быть устойчивыми, управляемыми и под постоянным контролем. В сочетании с надежной автоматизацией они позволяют инженерам часто и предсказуемо вносить значительные изменения с минимальными усилиями."
Исходя из этого, нативное облачное приложение (cloud native application) должно обладать масштабируемостью, устойчивостью, быть управляемым и иметь возможность наблюдения. Также поддерживать практики автоматизации, непрерывной доставки (continuous delivery) и DevOps.
Модель облачных вычислений (Сloud computing model)
Облачные приложения разворачиваются и работают в окружении, представляющим собой определенную облачную инфраструктуру, которая предоставляет вычислительные ресурсы потребителям, в соответствии с некой моделью облачных вычислений (cloud computing model).
Облако как инфраструктуру можно охарактеризовать различными вычислительными моделями, предлагаемыми в качестве сервиса, различными поставщиками (рис. 1.1).
Национальный Институт Стандартов и Технологий (The National Institute of Standards and Technology) предлагает следующее определение облачных вычислений:
"Облачные вычисления - это модель для обеспечения повсеместного, удобного сетевого доступа по требованию к общему пулу настраиваемых вычислительных ресурсов (например, сети, серверы, хранилище, приложения и услуги), которые могут быть быстро подготовлены и выпущены с минимальными усилиями управления или взаимодействием с поставщиком услуг."
Поставщик услуг (облачный провайдер) управляет базовой облачной инфраструктурой. Потребителю не нужно беспокоиться о физических ресурсах, таких как машины или сети. Компании, при переходе в облако, могут получить все необходимые им вычислительные ресурсы через сети и наборы API, которые позволят им предоставлять конечным пользователям свое приложение и масштабировать его ресурсы. Обретая таким образом эластичность: вычислительные ресурсы могут предоставляться динамически, в зависимости от потребностей.
Строгих требований к облачной инфраструктуре нет. Выделяют несколько моделей развертывания для предоставления облачных сервисов:
Частное облако (Private cloud) - облачная инфраструктура, предоставляемая для использования одной организацией. Она может управляться самой организацией или третьей стороной. Частное облако обычно является предпочтительным вариантом для организаций, имеющих дело с конфиденциальными данными или высококритическими системами. Это также общий выбор для полного контроля за соблюдением конкретных законов и требований в области защиты данных. Например, банки и поставщики медицинских услуг, скорее всего, установят свое собственное частное облако.
Публичное облако (Public cloud)- облачная инфраструктура, предоставляемая для публичного использования. Обычно она принадлежит и управляется организацией, облачным провайдером, и размещается на территории провайдера. Примерами поставщиков общедоступных облачных услуг являются Amazon Web ServiceS (AWS), Microsoft Azure, Google Cloud, Alibaba Cloud и DigitalOcean.
Гибридное облако (Hybrid cloud) - состоит из двух или более различных облачных инфраструктур, принадлежащих любому из предыдущих типов, связанных вместе и предлагающих услуги, как если бы они были одной средой.
Так же существует на данный момент пять ведущих моделей сервисов облачных вычислений (рис 1.2.) предоставляющих определённый набор абстракций для потребителя. Например, модель "Инфраструктура как услуга" (IaaS) предоставляет хранилище и сетевые ресурсы. Решение о том, какую модель сервиса выбрать, должно приниматься конкретным потребителем и типом вычислительных ресурсов, которым ему необходимо управлять.
Инфраструктура как сервис (IaaS) - потребители могут напрямую управлять ресурсами, хранилищами и сетями. Например, они могут развертывать виртуальные машины и устанавливать программное обеспечение, такое как операционные системы и библиотеки. Примеры: AWS Elastic Compute Cloud (EC2), Azure Virtual Machines, Google Compute Engine, Alibaba Virtual Machines и DigitalOcean Droplets.
Контейнер как услуга (CaaS) - потребители могут создавать и управлять контейнерами. Облачный провайдер выделяет базовые ресурсы, которые удовлетворяют потребности этих контейнеров, например, путем запуска новых виртуальных машин и настройки сетей, чтобы сделать их доступными через Интернет. Примеры: Amazon Elastic Kubernetes Service (EKS), Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), Alibaba Container Service for Kubernetes (ACK) и DigitalOcean Kubernetes.
Платформа как услуга (PaaS) - предоставляет инфраструктуру, инструменты и API, которые разработчики могут использовать для создания и развертывания приложений. Примеры: Cloud Foundry, Heroku, AWS Elastic Beanstalk, Azure App Service, Google App Engine, Alibaba Web App Service и DigitalOcean App Platform.
Функция как услуга (FaaS) - опирается на бессерверные вычисления, чтобы позволить потребителям сосредоточиться на реализации бизнес-логики своих приложений (часто в виде функций), в то время как платформа предоставляет сервера и остальную инфраструктуру. Бессерверные приложения запускаются событиями, такими как HTTP-запросы или сообщениями (messages). Примеры: Amazon AWS Lambda, Microsoft Azure Functions, Google Cloud Functions и Alibaba Functions Compute.
Программное обеспечение как услуга (SaaS) - потребители получают доступ к приложениям как пользователи, в то время как облачный провайдер управляет всем стеком программного обеспечения и инфраструктуры. Примеры: GitHub, Plausible Analytics и Microsoft Office 365.
Заключение
В этой части мы только прояснили фундаментальные понятия и концепции лежащие в основе нативных облачных приложений а также коснулись понятия моделей облачных вычислений и сервисов которые они предоставляют.
Продолжение - Введение в Cloud native. Часть 2. Принципы облачных приложений