Статья опубликована в рамках: Научного журнала «Студенческий» № 14(226)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5
ОБЗОР СПОСОБОВ БАЛАНСИРОВКИ НАГРУЗКИ В КОНТЕЙНЕРИЗИРОВАННЫХ СИСТЕМАХ
A REVIEW OF METHODS FOR LOAD BALANCING IN CONTAINERIZED SYSTEMS
Rail Shamsemukhametov
Masters’s student, Department of automated control systems, Ufa University of Science and Technology,
Russia, Ufa
Alexander Nabatov
scientific adviser, Candidate of Sciences, Assistant professor, Department of automated control systems Ufa University of Science and Technology,
Russia, Ufa
АННОТАЦИЯ
Появление средств контейнеризации открыло возможности по быстрому горизонтальному масштабированию распределенных систем за счет добавления новых физических вычислительных элементов. Чтобы оправдать вложенные средства и получить предельно производительную систему необходимо распределить нагрузку равномерно. В данной статье рассматриваются общие методы балансировки нагрузки и методы балансировки нагрузки, используемые в контейнеризированных системах. В наше время популярным средством контейнеризации является Docker, а средством оркестрации Kubernetes, поэтому методы балансировки исследуются на их примере.
ABSTRACT
A coming tools of containerization, opens opportunities for fast horizontal scaling of distributed systems through adding new physical computing elements. To justify investments and get extremely high-performance system it’s need to balance workload equally. This paper considers common approaches of load balancing and load balancing method used in containerized systems. In our days the most popular tool of containerization is a Docker and the most popular tool of orchestration is Kubernetes, so balancing methods is studied on their example.
Ключевые слова: балансировка нагрузки, контейнеризация, облачные вычисления, Docker, Kubernetes.
Keywords: load balancing, containerization, cloud computing, Docker, Kubernetes.
Введение
В современном информационном мире объемы обрабатываемой информации растут с каждый годом. Однако, рост мощности процессоров не столь стремителен. Исходя, из этого встает вопрос о повышении производительности как самих вычислительных ресурсов, так и программ, работающих на них. Для ответа на этот вопрос существует два подхода.
Первый подход заключается в увеличении мощности отдельно взятойвычислительной единицы [23]. Например, путем увеличения оперативной памяти или мощности процессора. Данный вариант развития имеет свои пределы в связи с техническими ограничениями физического ресурса. С другой стороны, возможно использование суперкомпьютера, который априори обладает высокой производительностью. Этот подход именуется вертикальным масштабированием, т.е. повышение делается «интенсивно» или «в глубь» за счет привлечения дополнительных вычислительных мощностей.
Горизонтальное масштабирование или масштабирование «в ширь» - второй подход, состоящий в объединении нескольких компьютеров [12], соединенных единой сетью передачи данных, в один вычислительный элемент – кластер. Стоит сразу отметить, что предыдущий вариант предполагает параллельные вычисления, а данный распределенные. Множество задач, решаемое и теми и другими может совпадать, но в общем случае будет отличаться. Основным преимуществом горизонтального масштабирования является его низкая стоимость [2]. Как было подмечено авторами исследования [5] решения, разрабатываемые под распределенные системы, условно бесплатны по сравнению с подходом вертикального масштабирования. Текущая работа рассматривает подход горизонтального масштабирования.
С целью оправдания ожиданий от преимуществ распределенных вычислений, необходимо организовать нагрузку на вычислительную систему таким образом, чтобы она была распределена по ее составляющим оптимальным образом, обеспечивая масштабируемость, отсутствие узких мест и короткое время отклика [24]. Данную задачу ставит перед собой балансировка нагрузки.
При рассмотрении вопроса балансировки нагрузки, необходимо учитывать, как происходит разделение ресурсов системы. В настоящее время популярными способом является контейнеризация, заключающаяся в разделении ресурсов на уровне операционной системы. Контейнеризация позволяет существенно экономить ресурсы за счет того, что все процессы в ней протекают на уровне операционной системы [4] в отличии от аппаратной виртуализации, требующей значительного ресурсного обеспечения для виртуальных машин. Наиболее известным программным обеспечением для управления данным процессом является ПО Docker, позволяющее разрабатывать, тестировать и изолировать приложения в контейнеры.
Актуальность проблемы. В наше время все большее распространение получают облачные технологии. Крупные компании не всегда готовы потратить большие деньги на то, чтобы развернуть собственные серверные мощности, поэтому они обращаются к облачным провайдерам, которые специализируются на их аренде [7]. Здесь в игру вступает контейнеризация, позволяющая в изолированных контейнерах мигрировать систему в «облака». На стыке необходимости балансировки нагрузки на систему и поддержки контейнеризации для изоляции элементов системы рождается проблема обеспечения эффективной балансировки нагрузки в условиях контейнерной виртуализации. Решение данной проблемы позволит организациям, переводящим свои системы в «облака», задействовать больше вычислительных мощностей облачных провайдеров, а значит оправдать вложенные средства. В соответствии с этим, целью данной работы является исследование вопроса балансировки нагрузки в разрезе организации распределенной системы в виде контейнеров. Для достижения цели поставлены следующие задачи:
- исследовать существующие механизмы балансировки нагрузки;
- исследовать особенности балансировки нагрузки в системах с поддержкой контейнеризации;
- исследовать подходы к балансировке нагрузке в системах с поддержкой контейнеризации.
Исследование проблемы балансировки нагрузки контейнеризированных систем
Проблема балансировки нагрузки является многогранной и может быть рассмотрена с различных позиций. В целом вопрос может быть исследован на сетевом и прикладном уровнях. На рисунке 1 изображено положение уровней балансировки относительно центра обработки данных (ЦОД), физических машин (PM – Physical Machine) и виртуальных машин (VM – Virtual Machine), которые работают на физических машинах. На сетевом уровне ставится задача выбора оптимального ЦОД, который используют облачные провайдеры, поскольку различные ЦОД могут иметь различное географическое положение, а значит и разные характеристики передачи данных относительно географического положения отправителя данных. Прикладной уровень предполагает эффективный выбор элемента система таким образом, чтобы нагрузка была распределена равномерно.
Рисунок 1. Положение уровней балансировки нагрузки
На сетевом уровне ключевым понятием является маршрутизация, которая осуществляется брокером обслуживания, чей задачей является направление запроса в нужный ЦОД. Здесь выделяют алгоритмы такие как: политика ближайшего соседа, политика оптимального отклика и динамически реконфигурируемая маршрутизация с балансировкой нагрузки. Как показало исследование [3], в котором были проанализированы эти алгоритмы и оценены по эффективности на основе симуляции посредством ПО Cloud-Analyst, лучшим образом показал себя алгоритм наименьшего отклика.
После того как сетевой запрос передается в сам ЦОД, балансировка нагрузки переходит на прикладной уровень. ЦОД состоит из множества серверов, которые логически делятся на виртуальные машины и объединяются в единую сеть, которая в последствии предоставляется потребителю как единая система, в дальнейшем используемая для размещения потребительских услуг и сервисов. Пользовательский запрос направляется непосредственно в данную систему. В этот момент встает вопрос о необходимости балансировки, т.е. передачи запроса в нужную виртуальную машину для оптимального использования системы в целом.
Сетевой запрос пользователя включает данные о его требовании к получению определенного функционала, а в дальнейшем каких-либо данных. Из запроса формируется задача, которая может быть адресована определенной виртуальной машине. Причем стоит отметить, что задача должна иметь возможность исполниться различными виртуальными машины, чтобы был способ выбрать одну из них. Сам способ зависит от метода и алгоритма балансировки нагрузки.
Различают статические и динамические методы балансировки нагрузки в вычислительных системах [1]. Статический метод не учитывает изменения загруженности системы с течением времени. Этот тип балансировки нагрузки требует предварительного знания о ресурсах и приложениях системы. Текущее состояние системы независимо от балансировки [22]. Алгоритмы балансировки данного типа определяют задачи к определенному процессору или узлу в зависимости о их начальной мощности. Однако, упущение фактора текущей загруженности может привести не только к паданию производительности, но и выходу из строя системы, что не допустимо. Следовательно, отказоустойчивость становится критическим требованием для достижения высокой производительности в облачных вычислениях [15]. Метод балансировки, принимающий во внимание текущую загруженность системы и распределяющий нагрузку на основе нее, называется динамическим. В зависимости от методов классифицируется алгоритмы распределения нагрузки. К статическим можно отнести: Round-Robin, Min-Min, Max-Min, а динамическим: алгоритм пчелиного роя, алгоритм муравьиной колонии, регулируемый алгоритм, алгоритм нагрузки с равным распределением и т.п. [21]. Здесь же стоит отметить, что алгоритмов динамического метода существует большое разнообразие. Нижи на рисунке 2 приведена их классификация, взятая из исследования [9].
Рисунок 2. Классификация алгоритмов динамической балансировки нагрузки
Как было помечено ранее, помимо разделения посредством аппаратной виртуализации, т.е. разделения на виртуальные машины, существует контейнеризация. Ключевое отличие между контейнеризацией и виртуализацией может быть сформулировано так: при контейнеризации виртуализированные объекты главным образом ограничены глобальными ресурсами ядра, которые позволяют контейнеризации запускать различные виртуальные среды над общим ядром хоста, используя меньше CPU, памяти и ресурсов сети чтобы предоставить эффективные, масштабируемые и экономичные решения по управлению ресурсами в облачных инфраструктурах, что является основными причинами её растущего использования [25].
Контейнеры ограничены в рамках операционной системы, а она в свою очередь может быть установлена только на одной хост-машине. Для полноценного масштабирования необходима возможность добавления как контейнеров в хост-машину, так и возможность добавления дополнительной хост-машины с новыми аппаратными ресурсами. Первый вариант предполагает, что существует несколько независимых копий приложения, а нагрузка распределяется между ними. Второй вариант аналогичен первому, только распределении нагрузки идет между хост-машинами.
Создание нескольких копий приложений в виде контейнеров называется репликацией. Репликация – это метод перенесения сбоев будь то контейнеров или данных, направленный на повышение их доступности [8], путем создания копий приложения. Создание реплик внутри одной хост-системы необходимо для того, чтобы максимально задействовать ее ресурсы и сделать систему отказоустойчивой.Подобный механизм может быть полезен для изоляции ресурсов и масштабирования в рамках одной машины, а также он поддерживается по умолчанию ПО Docker.
На уровне целой системы динамическое удаление, добавление, конфигурирование и узлов задача отнюдь не простая. Стандартные средства контейнеризации не имеют подобный функционал. Для этого используются продвинутые средства Docker Swarm и Kubernetes [17].
Что узлы единой системы, что контейнеры одной хост-системы, взаимодействует между собой и с внешним миром по сети.Исходя из этого факта, возможно использование реверсивного прокси, в качестве балансировщика нагрузки, в частности ПО Nginx Plus. Исследование подобного способа балансировки приведено в работе [18]. В ней же описан алгоритм выравнивания наименьшего соединения, используемый Nginx Plus, по оптимизации сетевых запросов и его свойства, а также его применимость относительно балансировки нагрузки между узлами системы. На рисунке 2 приведен пример по использованию Nginx Plus как для балансировки между узлами, так и между контейнерами.
Рисунок 3. Пример использования Nginx Plus в качестве реверсивного прокси для балансировки нагрузки
Использование реверсивного прокси отличный подход к балансировке входящего трафика, однако он относится к статической балансировке, поскольку не учитывает текущую загруженность системы. Тем не менее, если учесть возможность того же Nginx Plus по динамическому изменению конфигурации, то можно проводя мониторинг загруженности системы в режиме реального времени, менять эту конфигурацию. Эту идею преследует статья [16], в которой авторы предложили динамический алгоритм взвешенных наименьших соединений. По результатам эксперимента им удалось достичь улучшение балансировки на 52.6 % по сравнению со стандартными алгоритмами Nginx Plus.
Альтернативный подход к балансировке нагрузке предложен в исследовании [26], основанный на планировании задач. Авторы описали фреймворк, состоящий из паллет-контейнеров и контейнеров исполнения. Для каждого приложения создается свой паллет-контейнер и контейнер исполнения. Первый принимает решения о динамическом выделении ресурсов. Второй занимается назначением задач к приложению и отслеживанием состояния загрузки приложения. Еще в одном исследовании [13] был сформулирован алгоритм планирования, базирующийся на основе алгоритма муравьиной колонии, который показал себя лучше на 15% по сравнению со стандартными средствами планирования, реализованными в Docker SwarmKit.
Продолжая направление балансировки нагрузки через планирование задач, нельзя не отметить, современные средства управления системами, состоящими из множества контейнеров, которые активно его используют внутри. В частности, самый популярный из таких инструментов, разработанный Google, Kubernetes [11], для этого организует свою инфраструктуру в виде модулей. Модуль – это размещенная рядом группа контейнеров, которая представляет собой строительный блок в Kubernetes [6]. Kubernetes по умолчанию поддерживает три типа масштабирования: автомасштабирование кластера, вертикальное автомасштабирование модулей, горизонтальное автомасштабирование модулей [19]. Благодаря организации контейнеров в модули, данный инструмент позволяет динамически мигрировать рабочие нагрузки между узлами кластера, когда добавляется или удаляется узел.
Не смотря на свою популярность Kubernetes также использует статическую балансировку по умолчанию, на основе механизма распределения HTTP-запросов, называемой Ingress, однако этот механизм расширяем через средство Ingress Controller, предоставляемое облачными провайдерами или реализуемые на основе мониторинга аппаратных ресурсов [10]. Поэтому, с одной стороны, становится возможным создание балансировщика на основе других алгоритмов. К примеру, в исследовании [20] предложен подход к реализации балансировщика нагрузки на основе мониторинга состояния в системе в режиме реального времени. С другой стороны, это делает систему зависимой от других не универсальных решений. Например, по этой причине, в работе [14] приведено создание портативного балансировщика нагрузки независимого от окружения на основе отслеживания текущего состава контейнеров модуля.
Заключение
В ходе проведенного исследовательского обзора были выявлены статические и динамические методы балансировки нагрузки, а также алгоритмы, относящиеся к ним, затронут вопрос особенностей балансировки нагрузки в системах, поддерживающих контейнеризацию, рассмотрены подходы к балансировке нагрузке на основе реверсивного прокси, а также планирования задач в современных системах Docker и Kubernetes. Наконец, определена возможность по улучшению балансировки нагрузки в Kubernetes.
Список литературы:
- Алексеев И. А., Егунов В. А., Панюлайтис С. В., Чекушкин А. А. Методы и средства балансировки нагрузки в неоднородных вычислительных системах // Инженерный вестник Дона. 2020. № 11(71). С. 160-168.
- Богданов А. В., Тхуреин К., Чжо З., Пья С. Разработка виртуальной вычислительной системы с поддержкой балансировки нагрузки для повышения эффективности расчета // Современные наукоемкие технологии. 2020. № 6-2. – С. 214-219.
- Десятирикова Е. Н., Алгазинов Э. К., Алмосана Х. Анализ производительности алгоритмов брокера обслуживания в облачных вычислениях // Технологическая перспектива в рамках Евразийского пространства: новые рынки и точки экономического роста: материалы 4-ой Международной научной конференции, Санкт-Петербург, 13–15 декабря 2018 года, Центр научно-информационных технологий "Астерион", 2018. С. 334-341.
- Емельянова, С. С. Исследование Docker в части контейнеризации приложений на уровне ОС // Научно-технический вестник Поволжья. 2021. № 12. С. 149-151.
- Кхаинг, М. Т. Оценка эффективности методов балансировки нагрузки в распределенных вычислительных системах // International Journal of Open Information Technologies. 2021. Том 9. № 11. С. 30-36.
- Лукша М. Kubernetes в действии. 2019 г. ДМК Пресс. С. 81.
- Резенов, Г. В. Архитектура микросервисов и ее реализация с помощью технологии контейнеризации // Вестник Российского нового университета. Серия: Сложные системы: модели, анализ и управление. 2020. № 3. С. 131-138.
- Abbes H., Louati T., Cerin C. Dynamic replication factor model for Linux containers-based cloud systems // The Journal of Supercomputing. 2020. Vol. 76. Issue 1. P. 7219–7241.
- Afzal S., Kavitha G. Load balancing in cloud computing - A hierarchical taxonomical classification // Journal of Cloud Computing. 2019. Vol. 8. Issue 1.
- Burns B., Beda J., Hightower K. Kubernetes Up & Running Dive into the Future of Infrastructure. O’Reilly. 2021. С. 90.
- Jay S., Dushyant D. Building Modern Clouds: Using Docker, Kubernetes & Google Cloud Platform // IEEE 9th Annual Computing and Communication Workshop and Conference (CCWC) - Las Vegas, NV, USA, 2019.1.7-2019.1.9, P. 0184–0189.
- Jiang J., Lu J., Zhang G., Long G. Optimal cloud resource auto-scaling for web applications // In Proceedings of the 13th IEEE/ACM International Symposium on Cluster, Cloud, and Grid Computing IEEE Press, 2013, P. 58–65.
- Kaewkasi C., Chuenmuneewong K. Improvement of container scheduling for Docker using Ant Colony Optimization // IEEE 2017 9th International Conference on Knowledge and Smart Technology (KST) - Chonburi, Thailand, 2017.2.1-2017.2.4, P. 254–259.
- Kimitoshi T., Kento A., Tomoya T., Jingtao S. A Portable Load Balancer for Kubernetes Cluster. // ACM Press the International Conference - Chiyoda, Tokyo, Japan, 2018.01.28-2018.01.31, Proceedings of the International Conference on High Performance Computing in Asia-Pacific Region - HPC Asia 2018. P. 222–231.
- Kumari P., Kaur, P. A Survey of Fault Tolerance in Cloud Computing // Journal of King Saud University - Computer and Information Sciences. 2021. Vol. 33. Issue 10. P. 1159-1176
- Li R., Li Y., Wei L. An Integrated Load-balancing Scheduling Algorithm for Nginx-Based Web Application Clusters // Journal of Physics: Conference Series. 2018. 1060. 012078.
- Marathe N., Gandhi A., Shah J. M. Docker Swarm and Kubernetes in Cloud Computing Environment // 3rd International Conference on Trends in Electronics and Informatics (ICOEI), 2019, P. 179-184.
- Mohan P., Jambhale T., Sharma L., Koul S., Koul S. Load Balancing using Docker and Kubernetes: A Comparative Study // International Journal of Recent Technology and Engineering (IJRTE). 2020. Vol. 9. Issue 2.
- Nguyen N., Taehong K. Toward Highly Scalable Load Balancing in Kubernetes Clusters // IEEE Communications Magazine. 2020. Vol. 58. Issue 7. P. 78–83.
- Qingyang L., Haihong E., Meina S. The Design of Multi-Metric Load Balancer for Kubernetes // IEEE 2020 International Conference on Inventive Computation Technologies (ICICT) - Coimbatore, India, 2020.2.26-2020.2.28, International Conference on Inventive Computation Technologies (ICICT), P. 1114–1117.
- Rekha B., Rajani S. Load Balancing and its Algorithms in Cloud Computing: A Survey. // International Journal of Computer Sciences and Engineering. 2017. Vol. 5. Issue 1. P. 95-100.
- Sarma P., Kalita C., Deka V. A Survey on Load Balancing Algorithms in Cloud Computing // International Journal of Computer Sciences and Engineering. 2019. Vol.7. Issue 6. P. 169-176.
- Shi X., Dong, J., Djouadi, S.M. et al. PAPMSC: Power-Aware Performance Management Approach for Virtualized Web Servers via Stochastic Control // Journal of Grid Computing. 2016. № 14, P. 171–191.
- Singh K., Yadav M. // Comparative Study of Virtualization Management with Virtual Migration in Cloud Computing. IJSTE – International Journal of Science Technology & Engineering. 2017. Vol. 4. Issue 4. P. 37–44.
- Watada J., Roy A., Kadikar R., Pham H. and Xu B. Emerging Trends, Techniques and Open Issues of Containerization: A Review // IEEE Access. 2019. Vol. 7. P. 152443-152472.
- Xinjie G., Xili W., Baek-Young C., Sejun S., Zhu J. Application Oriented Dynamic Resource Allocation for Data Centers Using Docker Containers // IEEE Communications Letters. 2017. Vol. 21. Issue 3. P. 504–507.
Оставить комментарий