Использование систем управления контейнерами для построения распределенных облачных информационных систем с микросервисной архитектурой

Автор: Бондаренко А.С., Зайцев К.С.

Журнал: Международный журнал гуманитарных и естественных наук @intjournal

Рубрика: Технические науки

Статья в выпуске: 1-1 (64), 2022 года.

Бесплатный доступ

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

Еще

Распределенные системы, контейнеры, микросервисы, архитектура систем, облачная информационная система

Короткий адрес: https://sciup.org/170192943

IDR: 170192943

Текст научной статьи Использование систем управления контейнерами для построения распределенных облачных информационных систем с микросервисной архитектурой

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

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

  • -    программное обеспечение как услуга (SoftwareasaService, SaaS);

  • -    платформы        как       услуга

(PlatformasaService, PaaS);

  • -    инфраструктура как услуга (интеграция как услуга, IaaS) [1].

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

Подходы, используемые для разработки микросервисов, очень близки философии Unix. Они сформулированы в форме четырех основных правил [2]:

  • 1.    сервисы малы и достаточны для реализации одной функции системы;

  • 2.    в разработке поощряется автоматизация развертывания и тестирования;

  • 3.    отказы систем и оборудования учитываются в дизайне систем как регулярное событие жизненного цикла;

  • 4.    все сервисы масштабируемы и сочетаемы.

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

Развертывание приложений очень часто является трудной работой для разработчиков. Например, ранее можно было столкнутся с «DLL Hell» – тупиковая ситуация, связанная с управлением динамическими библиотеками DLL в операционной систе- ме Microsoft Windows. Несмотря на то, что прошло много времени, ежедневно растущий поток новых технологий зачастую создает путаницу и неуверенность [3].

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

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

По моему мнению, контейнеры – то недостающее звено, которое вывело микросервисы в мейнстрим. Контейнеры обеспечивают простое развертывание. В результате сборки получается контейнер, который можно развернуть практически на любой машине, не требуя дополнительных пререквизитов. Хотя, конечно, есть особенности использования контейнеров под ОС Windows и Linux, но в пределах разных ОС Linux можно развернуть контейнер на любой Linux-машине. Необходимо настроить правило параметризации этого контейнера (например, определенным контейнерам нужно настроить параметры доступа к файловому хранилищу, проставить переменные окружения), и контейнер готов к запуску. Это позволяет развернуть контейнер в нескольких экземплярах, на одной машине или на десятке серверов.

Основная особенность контейнеров – это то, что они являются неизменяемыми (immutable). Если вы создали контейнер один раз, он сохраняет полный слепок файловой системы [4]. В любой момент, независимо от среды запуска, это будет полностью идентичная копия сервиса, включая ОС и все необходимые dll-библиотеки. Такой контейнер будет работать везде одинаково: на машине разработчика, в тестовом окружении или в production.

Очень часто контейнеры пытаются сравнивать с виртуальными машинами. Надо понимать, что между ними суще- ствует принципиальное различие. Принцип работы виртуальных машин: есть некая хост операционная система (далее – гипервизор), которая абстрагирует хост ОС от виртуальных машин, и образы, в каждом из которых работает сама ОС, а в ней файловая подсистема и ваше приложение [5]. Обычно ОС на порядок больше по размерам и по потреблению ресурсов, чем непосредственно приложение, которое там работает. Использовать такую архитектуру для микросервисов – очень избыточно. Когда Azure только начинал развиваться, у них было решение PaaS Application Services. Запуская на этой платформе небольшой веб-сайт в трех экземплярах, необходимо было физически запустить три виртуальные машины, на которых процессор был загружен на 1 %, а 60 % оперативной памяти забирала на себя ОС.

Заключение

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

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

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

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

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

Список литературы Использование систем управления контейнерами для построения распределенных облачных информационных систем с микросервисной архитектурой

  • Грушин Д.А., Кузюрин Н.Н. О задаче эффективного управления вычислительной инфраструктурой // Труды ИСП РАН. - 2018. - Т. 30, Вып. 6. - С. 123-142.
  • DOI: 10.15514/ISPRAS-2018-30(6)-7 EDN: YURPZR
  • Шабанов Б.М., Самоваров О.И. Принципы построения межведомственного центра коллективного пользования общего назначения в модели программно-определяемого ЦОД // Труды ИСП РАН. - 2018. - Т. 30, Вып. 6. - С. 7-24.
  • DOI: 10.15514/ISPRAS-2018-30(6)-1 EDN: YURPXV
  • Воеводин Вл.В., Попова Н.Н. Инфраструктура суперкомпьютерных технологий // Программирование. - 2019. - Т. 45, №3. - С. 6-13.
  • EDN: VXDPOI
  • Крюков А.П., Демичев А.П. Децентрализованные хранилища данных: технологии построения // Программирование. - 2018. - Т. 44, №5. - С. 12-30.
  • EDN: YNRQJN
  • Hoff T. Amazon Architecture. High Scalability, 2007. [Online]. Available: http://highscalability.com/blog/2007/9/18/amazon-architecture.html. [Accessed: 07-Nov-2018].
Статья научная