/ Что такое ECMP?
/ Каждому — по способностям
/ Почему класть весь хеш в одно ведро — плохая идея
Каждый опытный руководитель знает, что разделение труда — залог эффективного управления. Без грамотного менеджмента, делегирования полномочий и распределения нагрузки коллектив или предприятие неизбежно столкнутся с ситуацией, когда одни сотрудники или подразделения вечно перегружены и выгорают, а другие прохлаждаются и не приносят должной пользы компании. Те же самые принципы применимы и в отношении технической составляющей, а именно ИТ-инфраструктуры, которая без правильной балансировки нагрузки может превратиться в дорогостоящую обузу.
Известно ли вам, что если вы работаете с сетями передачи данных (а вы работаете), то по умолчанию пользуетесь технологией ECMP — Equal Cost Multipass? Она представляет собой метод маршрутизации, при котором для доставки трафика используются несколько равнозначных путей. У рядового пользователя работа ECMP обычно не вызывает никаких вопросов, так как в повседневных условиях все связанные с ней процессы происходят по умолчанию. Однако в случаях, когда компания создает сетевую фабрику или строит ЦОД, без глубокого погружения в ECMP уже не обойтись и одних стандартных настроек для работы будет мало.
Если у нас в ИТ-инфраструктуре от точки А к точке Б ведут всего пара-тройка равновесных путей, то пакеты данных можно распределять между ними по тому или иному алгоритму. Но если уровней распределения будет больше, то увеличится и количество вариантов этого распределения. Тонкость заключается в том, как именно система определяет, какие пакеты по каким путям пропускать. Это происходит с помощью расчета хеша: применяется определенная математическая функция, позволяющая присвоить каждому потоку свой индекс. И так как входящие пакеты обычно имеют разные параметры адреса, порты, IP, протоколы и прочие атрибуты, то, применяя к ним функцию хеширования, мы можем получить некоторый набор уникальных хешей и организовать распределение потоков согласно набору идентификаторов.
Павел Михайлик
После раздачи данных идентификаторов все пакеты ассоциируются с бакетами (от английского bucket — ведро), а каждый бакет, в свою очередь, ассоциируется с эквивалентными ему путями, доставляющими пакеты к серверам. В упрощенном виде тут можно представить идущий сверху вниз поток трафика, который имеет четные и нечетные IP-адреса. Функция хеширования может разделить потоки оперируя остатком от деления на два — получая четную и нечетную группы. В данном случае для этих групп будет создан бакет с четными пакетами и одним прописанным для них путем и бакет с нечетными пакетами и другим путем. Если же уровней распределения будет больше, как и вычислительных узлов, то потребуется большее количество бакетов и более сложный алгоритм хеширования.
В противном случае все содержащиеся в трафике пакеты, при сохранении ранее использованного критерия выбора, на следующем уровне отбора пойдут на один и тот же узел, создавая что-то вроде «пробки». Для исключения такой ситуации, для каждого уровня деления трафика необходимо использовать разные критерии отбора, чтобы продолжать распределение по сети, а не превращать весь трафик в один «снежный ком».
Более детальная настройка маршрутизации в ходе балансировки дает возможность осуществить наиболее грамотное и рациональное распределение нагрузки по сети и в полной мере задействовать все пути доставки данных и серверы. В отсутствие такой настройки сеть в каждый момент времени будет использовать неоптимальное количество активных маршрутов, что значительно снизит качество передачи данных. В случае аварии она сможет переключиться на другой путь, который будет использоваться в качестве резервного. Но при этом эффективность использования самой инфраструктуры в рабочем режиме резко снизится, что может привести к ее перегрузке. Это применимо как к сетевому оборудованию (с коммутаторами, каналами связи и всеми необходимыми узлами), так и к серверам. В отсутствие равномерного и точного распределения нагрузки по элементам сети часть сетевого оборудования просто простаивает, тогда как другая его часть, наоборот, вынуждена работать на износ из-за неоптимальной маршрутизации трафика. Эту проблему можно решить с помощью применения технологии ECMP.
У рядового пользователя работа ECMP обычно не вызывает никаких вопросов, так как в повседневных условиях все связанные с ней процессы происходят по умолчанию. Но в случаях, когда компания создает сетевую фабрику или строит ЦОД, без глубокого погружения в ECMP уже не обойтись
На каждом ЦОД может быть реализовано довольно большое количество доступных путей и вычислительных центров. Поэтому зачастую речь здесь идет не только об основной и резервной линиях, работающих по схеме “1 плюс 1”, а о схеме “N плюс 1”. В таком случае, если в схеме “N плюс 1” из всего доступного богатства вариантов в каждый момент времени используется только один путь, то данная схема резервирования становится безумно дорогой и бессмысленной. В идеальном случае мы должны обеспечивать условия для использования всех имеющихся N путей с целью максимизации отдачи от инфраструктуры.
Павел Михайлик
Повышение качества распределения нагрузки для эквивалентных путей достигается за счет осознанного применения различных алгоритмов хеширования данных на каждом из уровней распределения нагрузки, что позволяет избежать поляризации трафика. То есть стандартную методологию ECMP в каждом конкретном случае необходимо адаптировать под специфическую топологию заказчика. И заказчику, который строит серьезную инфраструктуру, нужно учитывать наличие нестандартных аспектов распределения трафика, чтобы избежать ненужных затрат и повысить отдачу от приобретенного им оборудования.
В обычной ситуации мы говорим о том, что распределение нагрузки идет на основе встроенных механизмов, которые не требуют коррекции. Но если мы столкнемся со специфическими частными случаями и не обратим внимания на их особенности, то не достигнем ожидаемого результата. Специфическими могут быть как топология сети, так и оборудование, протоколы распределения нагрузки, сам трафик. Если проигнорировать эти факторы и ограничиться простейшим двухуровневым хешированием, то можно получить ситуацию, когда распределение нагрузки идет неравномерно даже при штатной работе функционала на обоих уровнях.
Павел Михайлик
Компания «Инфосистемы Джет» реализует проекты в области балансировки нагрузки на сетях самого разного масштаба, с применением программных решений от разных производителей — как в рамках поддержки уже имеющихся сервисов, так и при их внедрении в ИТ-инфраструктуру. В результате правильная балансировка позволяет заказчикам не только сэкономить ресурсы за счет более полного использования всей доступной инфраструктуры, но и повысить быстродействие всей сети в целом.