Остались вопросы?
Мы с удовольствием вам поможем
Спасибо! Ваша заявка принята.
Ваша заявка принята. Наш менеджер скоро с вами свяжется
Заказать звонок
Спасибо! Ваша заявка принята.
Спасибо за обращение.
Мы обязательно свяжемся с вами

Время работы офиса
Пн-Пт: 8:00 — 18:00
Сб: 10:00 — 16:00
Вс: выходной
облако

Cloud native — облачный подход в проектировании инфраструктуры и разработке приложений

Никита Лебедь
22.11.2024
12 мин. читать

Темпы роста рынка цифровых продуктов уже давно подталкивают компании к использованию облачных технологий. Для удовлетворения множества критериев в создании и сопровождении IT-проектов был сформирован подход cloud native. Рассказываем, что это такое и как он повлиял на IT-процессы.

Сloud native — это подход к проектированию архитектуры и разработке, развертыванию и управлению приложениями, ориентированными на гибкость, масштабируемость, автоматизацию и надежность. Для реализации облачного подхода в создании приложений используются микросервисы, контейнеризация, практики DevOps, API и другие технологии.

От монолитных архитектур к микросервисам

Долгое время в разработке ПО преобладали монолитные архитектуры, все элементы которых составляют единое целое — программу. В монолитных приложениях используется единый код и общие данные. С одной стороны, это упрощает разработку и тестирование приложений на старте. С другой — существенно усложняет масштабирование и требует повышенной затратности в использовании ресурсов. Например, при обновлении отдельного компонента или добавлении новых технологий нужно проводить рефакторинг всей архитектуры.

Затем появились сервис-ориентированные архитектуры (SOA — service-oriented architecture) — метод разработки приложений с модульной программной структурой. Компоненты такого ПО рассчитаны на выполнение конкретных функций, и подобные модули можно повторно использовать в нескольких приложениях. Однако SOA не могут предоставить достаточно гибкости быстро развивающимся IT-процессам: в такой архитектуре требуется одновременно развертывать код для каждого отдельного компонента.

Так, потребности бизнеса и IT поспособствовали появлению микросервисов — распределенных архитектур, состоящих из множества элементов, наделенных высокой отказоустойчивостью, автономностью, масштабируемостью и гибкостью. В таких архитектурах приложение разрабатывается как система небольших сервисов, каждый из которых работает автономно и коммуницирует с остальными посредством API. Микросервисы создаются при использовании разных технологий программирования, развертываются и обновляются независимо друг от друга.

Преимущества микросервисов:

  • небольшие размеры элементов развертывания делают более гибкими разработку и тестирование, ускоряют релиз и снижают риски на нем;

  • сбой в работе или атака на отдельный сервис с высокой вероятностью не сказывается на работе всей архитектуры;

  • над микросервисами может работать параллельно несколько команд, каждая из которых будет отвечать за свой элемент кода, обновляя его и добавляя функции без выключения приложения.


Программный интерфейс приложения (API)


API — это технология, при помощи которой программы и их компоненты обмениваются данными между собой и предоставляют их пользователю в понятном виде. В облачных системах через API микросервисы взаимодействуют друг с другом. В результате элементы системы работают сообща, а пользователь получает нужную информацию.

Например, приложение на телефоне подсказывает прогноз погоды, сначала узнав ее у программного обеспечения метеослужбы. Для этого пользователь направляет запрос в виде API-триггера сервису погоды. Запрос через программный код обращается к сервису метеослужбы, который, в свою очередь, отправляет пользователю в ответ прогноз погоды.

Приложение, которое направляет запрос, называют клиентом, а сервис, формирующий ответ, — сервером. Сегодня наиболее популярные API-интерфейсы — REST API. Это технология передачи репрезентативного состояния. Клиенты обмениваются с серверами данными по протоколу HTTP, которые при этом не сохраняются между запросами.


Практики DevOps

DevOps (Development Operations) — это методология и набор инструментов, а также философия и культура, которые обеспечивают эффективное взаимодействие разработчиков с другими IT-специалистами. Практики DevOps ускоряют и автоматизируют создание, настройку и развертывание программного обеспечения.

Ключевые инструменты DevOps:

  • Непрерывная интеграция и доставка кода (CI/CD) дают возможность оперативно расширять функционал приложения, за счет автоматизации снижают риски при внесении изменений и помогают быстро исправлять ошибки в приложениях.

  • Микросервисы позволяют разрабатывать гибкие решения и оперативно ликвидировать последствия сбоев.

  • Инфраструктура как код (IaC) — подход к управлению инфраструктурой с помощью программного кода вместо ручных процессов и настроек.

  • Мониторинг и ведение журналов предоставляют данные о работе системы и обновлений, позволяют отследить сбои и ошибки.

  • Высокий уровень взаимодействия IT-команд и других подразделений компании ускоряет автоматизацию создания ПО.

Методология DevOps ускоряет выход на рынок IT-продуктов и помогает компаниям быстрее адаптироваться к новым условиям. Практики Development Operations делают процесс разработки более гибким, позволяя чаще выпускать обновления, чем при традиционных методах разработки. При этом значительно снижаются риски сбоев при развертывании ПО.


Контейнеризация

Контейнеризация — метод работы с приложениями, при котором программный код упаковывается в едином исполняемом файле (контейнере) вместе с библиотеками и зависимостями. Контейнер можно разворачивать в разных средах, операционных системах и инфраструктурах.

Наиболее популярные системы контейнеризации — Docker, Kubernetes и LXC.

Docker позволяет создавать, развертывать и тестировать приложения на различных платформах. Контейнеры Docker содержат всё необходимое для запуска ПО: программный код, библиотеки, системные инструменты и среды выполнения.

Технология LXC (Linux Container) используется для запуска нескольких приложений на одном сервере в автономных средах. Это удобно для развертывания программного обеспечения и работы с большими объемами данных. Контейнеры не копируют всю операционную систему, а используют необходимые функции в пространстве имен Linux.

Для централизованного управления множеством контейнеров разработчики используют оркестраторы, например Kubernetes (K8s) — программную платформу, которая позволяет развертывать и масштабировать контейнеры и микросервисы.

Преимущества контейнеризации:

  • Скорость и эффективность. Контейнеры используют ОС основного хоста, что ускоряет запуск и снижает нагрузку на сервер.

  • Работа без простоев. Благодаря автономной работе контейнеров в них проще выявлять ошибки. При этом во время устранения технических проблем остальные контейнеры могут работать без сбоев.

  • Высокая защищенность. За счет изолированности каждого отдельного контейнера при проникновении вредоносного кода в один из них система не пропускает его в остальные.

  • Перераспределение ресурсов. Контейнеризация позволяет установить лимиты на использование оперативной памяти, места на диске, CPU. При выходе за ограничения система пропорционально распределяет ресурсы на другие контейнеры.


Концепция двенадцатифакторных приложений

Программное обеспечение для работы в облаках разрабатывается по модели software-as-a-service. Ее принципы применимы к ПО, созданному на любом языке и других технологиях программирования. Эту модель также называют концепцией 12-факторных приложений, при разработке которых учитываются следующие цели:

  • оптимизация времени и затрат на подключение новых разработчиков;

  • написание чистого кода с возможностью развернуть приложение у облачных провайдеров;

  • масштабирование приложений.

Вот эти 12 факторов:

  1. Одна кодовая база — множество развертываний.

  2. Зависимости явно объявляются и изолируются.

  3. Конфигурация сохраняется в среде выполнения.

  4. Вспомогательные сервисы учитываются как подключаемые ресурсы.

  5. Строгое разделение стадий сборки и выполнения.

  6. Приложения запускаются как один или несколько процессов без сохранения внутреннего состояния.

  7. Сервисы экспортируются через привязку портов.

  8. Приложения масштабируются при помощи процессов.

  9. Повышение надежности за счет быстрого запуска и корректного завершения работы.

  10. Среды разработки, промежуточного и рабочего развертывания — максимально похожи.

  11. Журнальные записи как поток событий.

  12. Задачи администрирования и управления выполняются с помощью разовых процессов.


Какие компании масштабировались с подходом cloud native?


Многие мировые бренды использовали облачные технологии для масштабирования своих проектов и сокращения расходов на сопровождение серверных инфраструктур.

При помощи cloud native Apple сохранил за собой передовые позиции в сфере разработки технологий и устройств. Опираясь на этот подход, компания ускорила разработку Siri и автоматизировала выпуск обновлений. Так, Apple продолжал расширять функционал голосового помощника, и IT-процессы реализовывались без простоев.

Крупный онлайн-проект электронной коммерции Etsy для исследования пользовательских предпочтений перешел в облако, чтобы избежать инвестиций в строительство дата-центра. Сайт ежедневно обрабатывал терабайты данных, и облачные технологии помогли компании справиться с объемной аналитикой.

Рекламный сервис Amazon Ads искал масштабируемое решение для эффективной обработки сотен миллионов запросов в секунду и использования сотен моделей машинного обучения. Благодаря миграции в облако Amazon Ads построил микросервисную архитектуру. Это позволило компании сэкономить время на управлении инфраструктурой и сосредоточить силы на анализе данных. 


Поделиться:
Подпишитесь на email-рассылку!

Будьте в курсе новостей. Отправляем полезные письма каждый месяц.

Пожалуйста, введите адрес электронной почты
Пожалуйста, подтвердите согласие с условиями обработки персональных данных.
article mailing picture
Вы подписались на нашу рассылку!

Скоро вы получите новое письмо.

article mailing picture