К 2025 году, по оценкам Gartner, более 95% новых цифровых проектов будут развернуты на облачно-нативных платформах. В 2021 году таких было всего 30%.
Согласно отчету компании Tigera (создатели open source проекта Calico, который заметно расширяет стандартный набор API Kubernetes), уже 75% опрошенных компаний превращают свои продукты и услуги в нативно-облачные.
Мы подготовили перевод статьи, чтобы познакомить вас с основами cloud-native-приложений. Материал будет полезен, если вы планируете работать с нативной облачной архитектурой или использовать облачную стратегию развития ИТ-инфраструктуры.
Нативной облачной архитектурой и технологиями называют такой подход к проектированию, разработке и управлению рабочей нагрузкой, который встроен в облако и использует все преимущества облачных вычислений.
Официальное определение от Cloud Native Computing Foundation (CNCF):
Нативные облачные технологии позволяют создавать и запускать масштабируемые приложения в современных и динамичных средах, таких как публичные, частные и гибридные облака. Этот подход иллюстрирует использование контейнеров, сервисных сеток, микросервисов, неизменяемой инфраструктуры и декларативных API.
Этот подход помогает создавать тесно связанные системы, отличающиеся устойчивостью, управляемостью и наблюдаемостью. В сочетании с надежной автоматизацией в такие системы инженеры могут часто и с минимальными трудозатратами вносить большие изменения.
Нативная облачная архитектура
- Нативная облачная архитектура стала движущей силой в индустрии разработки ПО. Подход использует все преимущества современных практик разработки, технологий и облачной инфраструктуры.
- Нативная облачная разработка улучшает сборку, сопровождение, масштабирование и развертывание приложений.
- Нативная облачная архитектура — это способ проектирования, реализации, развертывания и оперирования системами. В ее основе лежит идея оптимизации ПО для повышения его эффективности и надежности, а также ускорения вывода на рынок с помощью использования комбинации культурных, технологических и архитектурно-проектировочных паттернов.
- Это о том, как создавать и развертывать приложения, а не где.
Нативные облачные системы проектируются с учетом быстрых изменений, больших масштабов и устойчивости.
Нативные облачные приложения
- Нативные облачные приложения создают на основе облачных технологий или сервисов, работающих в частном или публичном облаке.
- Это распределенные системы, использующие концепции микросервисов и контейнеров.
- Применяются DevOps-методологии для автоматизации сборки и развертывания приложений, причем их можно выполнить в любой момент по требованию.
- Эти приложения предоставляют доступ к API по стандартным протоколам вроде REST и gRPC, и взаимодействовать с ними можно с помощью стандартных инструментов вроде Swagger (OpenAPI).
С помощью нативных облачных технологий создают приложения с упакованными в контейнеры сервисами, развернутые в виде микросервисов и управляемые в рамках адаптивной инфраструктуры посредством гибких DevOps-процессов и процессов непрерывной доставки.
Например, вы можете использовать облачный сервис для быстрого развертывания кластеров Kubernetes.
Характеристики нативной облачной архитектуры
Нативная облачность — это скорость и гибкость. Разрабатывать подобные приложения помогает руководство «Двенадцатифакторное приложение». Руководство содержит такие понятия, как версионирование кодовой базы, конфигурирование с учетом особенностей сред, отсутствие сохранения состояния (statelessness) и конкурентность приложения.
Высокая автоматизация
- Чтобы управлять всеми компонентами нативного облачного приложения рекомендуют автоматизировать каждый этап, начиная с разработки и заканчивая развертыванием. Этого можно достичь с помощью современных инструментов и CI/CD-конвейеров, опирающихся на систему версионирования вроде Git.
- Сборка, тестирование и развертывание приложений и инфраструктуры с минимальным участием человека позволяет вносить изменения в эксплуатационную среду быстро, часто, инкрементально.
- Надежные автоматизированные системы позволяют гораздо быстрее восстанавливаться после сбоев, если понадобится пересобрать всю систему.
Самовосстановление
- Время от времени приложения и инфраструктура падают. Это ожидаемо, поэтому фреймворки для нативных облачных приложений и инфраструктурные компоненты содержат инструменты для проверки состояния, которые помогают следить за приложение изнутри и автоматически перезапускать его при необходимости.
- Поскольку приложение разделено на компоненты, есть вероятность, что перестанет работать или замедлится лишь какая-то часть системы, а остальное продолжит работать штатно.
Масштабируемость
- Масштабирование приложения описывает процессы обработки большего объема нагрузки при сохранении хорошего пользовательского опыта.
- Одним из способов масштабирования может быть запуск нескольких копий одного приложения и распределение нагрузки между ними.
- Автоматизация такого поведения на основе метрик приложения вроде потребления ресурсов процессора или памяти также может обеспечить доступность и производительность ваших сервисов.
- С помощью оператора Kubernetes с открытым исходным кодом (Kubernetes-based Event Driven Autoscaler) можно масштабировать любые Kubernetes-контейнеры в зависимости от количества событий, которые нужно обработать.
Экономичность
- Обратное масштабирование приложения при уменьшении нагрузки и ценообразование в зависимости от объемов потребления у облачных провайдеров может снизить ваши расходы.
- Оптимизировать использование инфраструктуры вам помогут системы вроде Kubernetes и более эффективное и плотное размещение приложений.
Простота сопровождения
Использование микросервисов поможет разделить приложения на более мелкие фрагменты, которые проще переносить, легче тестировать и распределять между разными командами.
Безопасность
- Облачные среды часто делятся между несколькими заказчиками или командами, что требует других моделей безопасности.
- Паттерны вроде вычислений с нулевым доверием уменьшают риски с помощью аутентификации всех пользователей и процессов.
Правильный подбор объема ресурсов
- Платформы нативных облачных приложений автоматизируют выделение инфраструктуры и конфигурирование, динамически предоставляя и перенося ресурсы при развертывании (в зависимости от потребностей приложения).
- Применение нативных облачных сред исполнения оптимизирует управление жизненным циклом приложений. Вы сможете использовать масштабирование по мере надобности и оркестрацию доступных ресурсов, восстанавливать после сбоев с минимальным простоем.
Преимущества нативной облачной архитектуры
Надежность
С помощью микросервисов и Kubernetes разработчики создают гибкие приложения и быстро устраняют последствия сбоев.
Масштабируемость
Способность автоматически масштабироваться — одна из главных особенностей нативных облачных технологий. Рост потребностей прогнозируется и обрабатывается по умолчанию, а вы платите только за те ресурсы, которые используете.
Ускорение релизов
В сочетании с DevOps нативные облачные технологии позволяют командам быстрее продумывать, собирать и отгружать приложения.
Снижение расходов
Kubernetes — это open-source платформа, которая используется во многих нативных облачных технологиях для управления контейнерами. Kubernetes обеспечивает эффективность использования ресурсов и помогает минимизировать расходы.
Независимость от вендоров
Облачные технологии позволяют использовать гибридные и многооблачные среды. Компании могут запускать приложения на любых платформах (с помощью контейнеризации и Kubernetes), в том числе в публичных и частных облаках. То есть им не нужно выбирать какую-то одну инфраструктуру и зависеть от конкретного вендора.
Основы нативной облачной архитектуры
У скорости и гибкости нативной облачной архитектуры есть несколько причин.
Облако
- Нативные облачные системы получают все преимущества облачной модели обслуживания.
- Созданные для работы в динамичной виртуализированной облачной среде, эти системы широко используют вычислительную инфраструктуру Platform as a Service (PaaS) и управляемые сервисы.
- Рассматривайте лежащую в основе инфраструктуру как одноразовую: благодаря автоматизации она в считанные минуты предоставляется и изменяется в размерах, масштабируется или уничтожается по требованию.
Современная архитектура
- Двенадцатифакторное приложение — это популярная методология для создания облачных приложений. Она описывает набор принципов и практик, которым нужно следовать для разработки оптимизированных под современные облачные среды приложений. Особое внимание уделяется портируемости между средами и декларативной автоматизации.
- «Двенадцать факторов» — хорошая основа для создания cloud-native-приложений благодаря применимости к любым веб-приложениям. Построенные по этим принципам системы можно быстро развертывать и масштабировать. Также можно добавлять к ним новую функциональность для своевременной адаптации к рыночным условиям.
Микросервисы
- Нативные облачные системы охватывают микросервисы — популярный архитектурный стиль создания современных приложений.
- Это распределенный набор небольших, независимых сервисов, взаимодействующих через общую систему связи. Вместе они формируют приложение.
- Каждый микросервис реализует конкретную бизнес-функцию в рамках более обширной предметной области.
- Каждый разрабатывается автономно и может развертываться независимо.
- Каждый исполняется в собственном процессе и взаимодействует с другими по стандартным протоколам вроде HTTP/HTTPS, gRPC, WebSockets или AMQP.
Контейнеры
- Являются отличным инструментом для создания облачного программного обеспечения. CNCF называет контейнеризацию микросервисов первым шагом в их Cloud-Native Trail Map — руководстве по переходу компаний на нативные облачные технологии.
- Контейнеризировать микросервисы просто: код, его зависимости и процесс исполнения упаковываются в бинарный файл — образ контейнера. Образы хранятся в реестре (репозитории).
- Когда приложение запускается или масштабируется, вы преобразуете образ в исполняемый экземпляр контейнера. Этот экземпляр работает на любом компьютере с установленным движком исполнения контейнеров.
Вспомогательные сервисы
- Нативные облачные системы зависят от разнообразных вспомогательных ресурсов, таких как хранилища данных, брокеры сообщения, системы мониторинга и сервисы идентификации.
- Облачные провайдеры предлагают широкий набор управляемых вспомогательных сервисов, которые вы можете просто использовать. Для них обеспечивается мониторинг, резервирование и доступность.
- Нативные облачные системы предпочитают управляемые услуги резервного копирования от облачных провайдеров.
Автоматизация
- Воспользуйтесь широко распространённым подходом инфраструктура-как-код (IaC). С его помощью вы автоматизируете выделение ресурсов платформы и развертывание приложений. По сути, в своей практике DevOps вы будете применять методы программной инженерии, такие как тестирование и версионирование. Ваша инфраструктура и развертывание будут автоматизированы, последовательны и повторяемы.
- Инфраструктура автоматизации: инструменты вроде Terraform от HashiCorp, Pulumi, AWS CloudFormation, Azure Resource Manager, Azure Bicep, Google Cloud Deployment Manager CLI облачных провайдеров позволяют декларативно описывать необходимую облачную инфраструктуру. Это описание (скрипт) версионируется и проверяется системой управления ресурсами в качестве артефакта вашего проекта. Вы вызываете скрипт для выделения последовательной и повторяемой инфраструктуры в различных системных средах — разработки, QA, обкатки и эксплуатации.
- Автоматизация развертывания: рассмотренная выше концепция «Двенадцатифакторного приложения» требует отдельных шагов при преобразовании готового кода в работающее приложение. Реализовать этот принцип помогают современные системы CI/CD. Они обеспечивают отдельные этапы сборки и доставки, что помогает обеспечить последовательность и качество кода, который легко доступен пользователям.
Сценарии использования нативной облачной архитектуры
- Разработка приложений командой, у которой есть опыт использования других технологических стеков.
- Приложение, компоненты которого должны масштабироваться независимо.
- Система, в которой отдельные функции должны выпускаться без полного переразвертывания.
- Стратегические корпоративные системы, требующие постоянного развития бизнес-возможностей и функций.
- Приложения, требующие частых и надежных релизов.
P.S. О возможностях #CloudMTS для запуска нативных облачных приложений
#CloudMTS предлагает инструменты и сервисы, которые помогают разрабатывать обычные и cloud-native-приложения.
- Переходите на сервис контейнеризации Containerum Managed Kubernetes Service для быстрого развертывания и снижения расходов.
- Выберите DBaaS for PostgreSQL или DBaaS for Redis для поддержки архитектуры микросервисов.
- Используйте Compute Cloud для быстрого старта, запуска приложений и тестирования гипотез.