Авторы:
(1) Тяньи Цуй, Вашингтонский университет ([email protected]);
(2) Чэнсинъюй Чжао, Вашингтонский университет ([email protected]);
(3) Вэй Чжан, Microsoft ([email protected]);
(4) Кайюань Чжан, Вашингтонский университет ([email protected]).
Примечание редактора: Это часть 1 из 6 исследования, в котором подробно описываются попытки оптимизировать балансировку нагрузки уровня 7. Прочитайте остальное ниже.
4.2 Сквозная пропускная способность
4.3 Сквозная задержка
4.4 Оценка преимуществ ключевых методов
4.5 Реальная рабочая нагрузка
Балансировщики нагрузки широко используются в современных облаках для масштабируемого распределения сетевых запросов по серверам центров обработки данных. Учитывая широкое использование балансировщиков нагрузки и связанные с ними эксплуатационные расходы, несколько усилий были сосредоточены на повышении их эффективности путем внедрения логики балансировки нагрузки уровня 4 в ядро или использования аппаратного ускорения. В этой работе изучается, может ли более сложная и ориентированная на соединение возможность балансировки нагрузки уровня 7 также выиграть от аппаратного ускорения. В частности, мы нацелены на выгрузку возможности балансировки нагрузки на программируемые SmartNIC. Мы полностью используем стоимость и энергоэффективность SmartNIC, используя три ключевые идеи. Во-первых, мы утверждаем, что полный и сложный стек TCP/IP не требуется для балансировщиков нагрузки уровня 7, и вместо этого предлагаем легкий агент пересылки на SmartNIC. Во-вторых, мы разрабатываем структуры данных управления соединениями с высокой степенью параллелизма с минимальной синхронизацией при выполнении на многоядерных SmartNIC. Наконец, мы описываем, как можно ускорить логику балансировки нагрузки с помощью пользовательских ускорителей обработки пакетов на SmartNIC. Мы создаем прототип Laconic на двух типах оборудования SmartNIC, достигая пропускной способности более 150 Гбит/с с использованием всех ядер на BlueField-2, в то время как одно ядро SmartNIC достигает в 8,7 раза большей пропускной способности и сопоставимой задержки с Nginx на одном ядре x86.
Балансировщики нагрузки являются фундаментальным строительным блоком для центров обработки данных, поскольку они балансируют нагрузку обслуживания по коллекциям серверов приложений [38, 45, 46]. Балансировщики нагрузки изначально создавались как специализированные аппаратные устройства, но теперь обычно развертываются как программное обеспечение, работающее на обычных серверах или виртуальных машинах. Эта модель развертывания обеспечивает большую степень настраиваемости и адаптивности, чем старые аппаратные конструкции, но она также может привести к высоким затратам для облачных провайдеров и служб приложений, учитывая затраты на покупку и энергопотребление серверов общего назначения [8]. Службы приложений часто идут на многое, чтобы консолидировать и сократить использование балансировщиков нагрузки, чтобы получить желаемую экономию затрат [2, 4, 5].
Учитывая широкое использование и стоимость балансировщиков нагрузки, несколько усилий были сосредоточены на повышении их эффективности, особенно балансировщиков нагрузки уровня 4 (L4), путем встраивания логики балансировки нагрузки в более низкий, возможно, аппаратно ускоренный, уровень. Katran [16] ускоряется с помощью кода eBPF внутри ядра Linux, таким образом перехватывая и обрабатывая пакеты внутри ядра и минимизируя количество переходов к коду балансировки нагрузки на уровне пользователя. ClickNP [32] решает некоторые аспекты логики балансировки нагрузки L4 (особенно возможности, подобные NAT) на SmartNIC с поддержкой FPGA и использует возможности параллельной обработки устройств FPGA. SilkRoad [38] использует комбинацию программируемого коммутатора и конечного хоста для хранения состояния, связанного с балансировщиками нагрузки L4, и выполнения преобразований dataplane, связанных с операцией балансировки нагрузки в конвейере коммутатора.
Хотя эти усилия дали значительный прогресс в оптимизации балансировки нагрузки L4, которая балансирует трафик на сетевом уровне, службы центров обработки данных часто полагаются на возможности балансировки нагрузки на уровне приложений, имеющиеся только в балансировщиках нагрузки уровня 7 (L7). В частности, службы хотели бы маршрутизировать потоки на основе атрибутов клиентского запроса, сохранять привязку сеанса к клиентским запросам, обеспечивать контроль доступа и т. д. [7]. Но эти функции затрудняют для балансировщиков нагрузки L7 внедрение методов аппаратного ускорения, используемых для балансировщиков нагрузки L4. Основная проблема заключается в том, что операция балансировки нагрузки L7 основана на информации, встроенной в транспортные протоколы, ориентированные на соединение, поэтому, по-видимому, требуется полнофункциональный сетевой обрабатывающий агент на балансировщике нагрузки для обработки соединений TCP/HTTP. Следовательно, сегодняшние балансировщики нагрузки L7 представляют собой универсальные программные решения, требующие высоких затрат на обработку на обычных серверах.
В этой работе мы изучаем, можем ли мы повысить эффективность балансировщиков нагрузки L7 с помощью программируемого сетевого оборудования. Мы фокусируемся на SmartNIC, которые предоставляют вычислительные ядра общего назначения, дополненные оборудованием для обработки пакетов. SmartNIC являются особенно привлекательными целями, поскольку их вычислительные ядра могут размещать произвольную логику протокола, в то время как их ускорители обработки пакетов могут эффективно выполнять преобразования dataplane. Таким образом, SmartNIC объединяет возможности традиционных вычислений хоста с новыми возможностями программируемых коммутаторов и является подходящей целью для балансировщиков нагрузки L7. Наша работа также частично мотивирована растущим развертыванием SmartNIC в центрах обработки данных как экономически эффективной и энергоэффективной вычислительной подложки для сетевых задач.
Необходимо решить несколько проблем при выгрузке функций балансировки нагрузки на SmartNIC. Во-первых, ядра SmartNIC слабы, оснащены ограниченной памятью и неэффективны при выполнении вычислений общего назначения. Насколько это возможно, мы должны использовать легкие сетевые стеки вместо общих полнофункциональных стеков, присутствующих в ядрах ОС. Во-вторых, эффективная многоядерная обработка на SmartNIC предполагает легкую синхронизацию для доступа к параллельным структурам данных, и это особенно актуально, поскольку мы уменьшаем логику сетевой обработки. В-третьих, эффективное использование ускорителей для преобразования пакетов необходимо для повышения вычислительной мощности SmartNIC.
Мы проектируем и внедряем Laconic , разгруженный балансировщик нагрузки SmartNIC, который решает проблемы, поднятые выше. Ключевым компонентом нашей системы является облегченный сетевой стек, который представляет собой совместную разработку логики балансировки нагрузки прикладного уровня с задачами транспортного уровня. Этот облегченный сетевой стек выполняет сложную обработку пакетов только для подмножества пакетов, передаваемых через балансировщик нагрузки. Для остальных пакетов сетевой стек выполняет простую перезапись пакетов и полагается на клиента и сервер для обеспечения сквозной надежности и контроля перегрузки. Для SmartNIC с ускорителями обработки пакетов эта конструкция позволяет обрабатывать большинство пакетов с использованием аппаратных механизмов обработки потоков, тем самым обеспечивая значительный рост эффективности. Мы также разрабатываем структуры данных управления соединениями, которые являются высокопараллельными и минимизируют дорогостоящие операции взаимного исключения. Мы отмечаем, что некоторые из наших вкладов в проектирование также применимы к общему серверному проектированию, но они оказывают мультипликативный эффект на SmartNIC, выделяя быстрый путь, который может быть выполнен на аппаратных механизмах обработки пакетов.
Мы создали Laconic и адаптировали его к двум различным типам SmartNIC: Marvell LiquidIO3 и Nvidia BlueField-2. Laconic обеспечивает функциональность как Layer-4, так и Layer-7 и реализует широко используемую логику интерпозиции Layer-7 для балансировки подключений к бэкэнд-сервисам. Для больших сообщений Laconic, работающий на BlueField-2 с одним ядром ARM, может достичь пропускной способности до 8,7 раз выше, чем широко используемый Nginx, работающий на более мощном ядре x86. Для небольших сообщений Laconic на BlueField-2 может достичь более высокой пропускной способности с сопоставимой или даже меньшей задержкой по сравнению с Nginx. На LiquidIO3 пропускная способность Laconic в 4,5 раза выше по сравнению с x86 Nginx. Мы также демонстрируем производительность Laconic с реальной рабочей нагрузкой и представляем подробные микробенчмарки преимуществ ключевых идей.
Данная статья доступна на arxiv по лицензии CC BY-NC-ND 4.0 DEED.