image

К 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 для быстрого старта, запуска приложений и тестирования гипотез.




Top.Mail.Ru

Комментарии (2)