Destination Hash Scheduling и Source Hash Scheduling

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

Алгоритм SourceHashScheduling основывается на тех же самых принципах, что и предыдущий, только сервер, который будет обрабатывать запрос, выбирается из таблицы по IP-адресу отправителя.

Sticky Sessions

StickySessions — алгоритм распределения входящих запросов, при котором соединения передаются на один и тот же сервер группы. Он используется, например, в веб-сервере Nginx. Сессии пользователя могут быть закреплены за конкретным сервером с помощью метода IPhash. С помощью этого метода запросы распределяются по серверам на основе IP-aдреса клиента. «Метод гарантирует, что запросы одного и того же клиента будет передаваться на один и тот же сервер». Если закреплённый за конкретным адресом сервер недоступен, запрос будет перенаправлен на другой сервер.

Обзор существующих методов распределения нагрузки для синхронных операций в распределенных системах.

С каждым годом скорость роста производительности выпускаемых процессоров замедляется. Для обеспечения роста производительности системы в целом компьютеры снабжаются несколькими процессорами. Приобретает все большую актуальность параллельное программирование — алгоритмизация задач для одновременного решения на нескольких вычислительных узлах.

В связи с развитием неоднородных вычислительных систем с большим числом узлов и сложной иерархией памяти, даже в рамках одного компьютера, становится актуальной децентрализованная балансировка. Выделяя две концепции распределения заданий между потоками (work − sharing, централизованное разделение, и work − stealing, — децентрализованное) обеспечиваетя быстрота работы методов второго типа, обусловленную меньшей синхронностью действий алгоритмов балансировки на разных ядрах или процессорах.

Большинство современных микропроцессорных архитектур использует различные методы повышения производительности исполняемых программ за счет их распараллеливания, а именно:

1. конвейеризация исполнения операций – разбиение процесса исполнения на стадии (такты) и одновременное исполнение операций, находящихся на разных стадиях конвейера;

2. параллельное (одновременное) исполнение нескольких операций, находящихся на одной стадии конвейерного исполнения;

3. применение одной операции к нескольким данным одновременно;

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

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

Эти методы распараллеливания требуют поддержки в оптимизирующих компиляторах, т.к. обычные языки программирования, такие как C, C, являются языками последовательного программирования.

Выводы

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

Список источников

1. Ван Стеен М, Танненбаум Э. Распределенные системы. Принципы и парадигмы. - Санкт-Петербург: Питер, 2003. 880 с.

2. М.С. Косяков Введение в распределенные вычисления.- Санкт-Петербург: НИУ ИТМО, 2014. 155 с.

3. http://www.intuit.ru/studies/courses/1156/190/lecture/4948?page=1 - Принципы разработки параллельных методов

4. http://www.ibm.com/developerworks/ru/webservices/library/ws-soa-design1/index.html- Сервис-ориентированное моделирование и архитектура,Ali Arsanjani, Ph.D., Ведущий архитектор, SOA and Web services Center of Excellence, IBM

5. https://blog.selectel.ru/balansirovka-nagruzki-osnovnye-algoritmy-i-metody/ - Балансировка нагрузки: основные алгоритмы и методы, Андрей Емельянов

6. https://habrahabr.ru/company/oleg-bunin/blog/310366/ -Как мы сделали ровную балансировку нагрузки на фронтенд кластер, Юрий Насретдинов

7. https://events.yandex.ru/lib/talks/379/ - Отказоустойчивость и балансировка без регистрации и СМС, Владимир Неверов

8. http://www.onjava.com/pub/a/onjava/2004/04/14/clustering.html - Clustering and Load Balancing in Tomcat 5, Part 2, Srini Penchikala

9. https://habrahabr.ru/post/218797/ - Балансировщики нагрузки в Microsoft Azure, Георгий Могелашвили

10. https://habrahabr.ru/post/104621/ - Балансировка нагрузки с LVS, divanikus

11. http://duotek.ru/services/highload

12. http://www.pvsm.ru/it-infrastruktura/85663 - Лишние элементы или как мы балансируем между серверами, онлайн-кинотеатр ivi.ru

Наши рекомендации