22 марта 2023

Kubernetes: зачем нужны контейнеры

В последнее время все чаще говорят о новой архитектуре приложений - микросервисной. Но что это значит и в чем её преимущества? Обычно, для создания приложения используется классическая архитектура - монолит, где все задачи решаются одним приложением. Микросервисная архитектура предполагает создание набора небольших приложений (сервисов), которые могут работать независимо друг от друга. Эти сервисы запускаются отдельно и взаимодействуют между собой по сети, при этом каждый из них решает свою конкретную задачу.

Микросервисный подход - контейнеризация

Для реализации микросервисного подхода применяется технология контейнеризации. Контейнер представляет собой изолированное окружение, включающее в себя программу и все необходимые для её работы зависимости. Это напоминает виртуализацию, но при этом вместе с приложением и его зависимостями не требуется загружать операционную систему, которая также потребляет ресурсы сервера. Так контейнеризация повышает эффективность использования вычислительных ресурсов.

Преимущества и недостатки использования микросервисов

В монолитном исполнении при возникновении ошибки в коде приложение прекращает работу полностью. Использование же микросервисов повышает надёжность работы системы: при отказе некоторой части приложения, например, отвечающего за авторизацию пользователей, все остальные продолжат работать автономно.

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

Ещё одним плюсом, но также и минусом является возможность для каждого микросервиса использовать свой набор технологий. Разные языки программирования решают различные задачи. Это позволяет использовать вариативность технологий для получения большей производительности. Однако это приводит к тому, что нужно как-то поддерживать множество сильно отличающихся решений, что потребует большой команды разработчиков.

Среди недостатков можно выделить более высокую сложность построения такой архитектуры. В больших проектах количество микросервисов может доходить до сотен и даже тысяч, и ими необходимо управлять.

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

Одним из особых недостатков контейнеризации является невозможность сохранения данных, что добавляет сложности при разработке.

Что такое Kubernetes?

Kubernetes – open source платформа для управления контейнерами. Она призвана бороться с недостатками контейнеризации. Kubernetes позволяет автоматически контролировать количество запущенных контейнеров, перезагружать контейнер при его сбое, равномерно распределять нагрузку между серверами, а также позволяет запускать контейнеры с разными версиями одного сервиса, что может быть полезно при тестировании.

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

Многие провайдеры облачных технологий предоставляют Kubernetes как сервис для автоматического развёртывания и масштабирования приложений на своих серверах. Использование облака позволяет значительно сократить затраты на обучение сотрудников и проведение экспериментов при переходе на микросервисную архитектуру.

Как Kubernetes может помочь бизнесу?

Ввиду возможности оперативно масштабировать отдельные части приложения, внедрение контейнеризации идеально подходит для интернет-магазинов, особенно в периоды повышенной нагрузки, таких как праздники или сезонные распродажи. Компания «Ашан», например, использовала Kubernetes для обучения используемых моделей машинного обучения. Так как обучение модели нужны не очень часто, но требует больших вычислительных ресурсов, технология позволила отлично масштабировать нагрузку.

Большое количество различных финансовых услуг требуется современным банкам, например, онлайн-переводы, онлайн-платежи, страхование, выдача кредитов. Контейнеризация позволят эффективно управлять большим количеством разнообразных сервисов. Так, для создания жилищной экосистемы ВТБ использовал платформу Kubernetes, что позволило сделать проект масштабируемым и значительно увеличило скорость разработки.

Kubernetes также применим в телекоммуникациях. Nokia использовала контейнеризацию для запуска своего ПО на оборудовании разных телекоммуникационных операторов. Это сократило время разработки и позволило избежать необходимости проведения множества тестов оборудования и унифицировать выпускать ПО, подходящего для любых случаев.

Подготовлено авторами SmartGoPro по материалам выступлений экспертов конференций компании. 

Актуальные новости и аналитика в сфере цифровизации