Интервью с лидерами отрасли

Неожиданное узкое место клиента gRPC в сетях с низкой задержкой и способы его обхода

Интервью с лидерами отрасли
The Surprising gRPC Client Bottleneck in Low-Latency Networks

Исследование выявляет проблему производительности клиентов gRPC в сетях с низкой задержкой и предлагает эффективные методы её решения для достижения высокой пропускной способности и минимальной задержки.

gRPC — один из самых популярных фреймворков для реализации удалённого вызова процедур, широко используемый в современных распределённых системах и микросервисной архитектуре. Благодаря надёжности и высокой производительности, gRPC завоевал доверие разработчиков по всему миру. Однако в реальных условиях эксплуатации иногда можно столкнуться с неожиданными ограничениями, которые могут значительно влиять на скорость обработки запросов и качество взаимодействия сервисов. Одним из таких сюрпризов оказалась узкая точка на стороне клиента gRPC, проявляющаяся в сетях с низкой задержкой. Проблема возникла в среде компании YDB, где gRPC используется для предоставления API распределённой SQL-базы данных.

Несмотря на мощность серверных узлов и высокоскоростные каналы передачи данных с низкой латентностью, наблюдалось ухудшение пропускной способности и рост клиентской задержки при уменьшении размера кластера. Чем меньше было серверных нод, тем менее эффективно клиент мог загружать систему, а внутри кластера простои ресурсов росли. Такая ситуация полностью противоречила ожиданиям и требовала тщательного расследования. Внимательный анализ и собственный микро-бенчмарк gRPC, написанный на C++ и использующий последние версии фреймворка, позволили выявить, что основным узким местом являются особенности работы реализации gRPC на стороне клиента. Несмотря на то что соединение между сервером и клиентом проходят по высокопроизводительному HTTP/2, сама архитектура граничного узла клиента накладывает жесткие ограничения на количество параллельно обрабатываемых запросов.

Внутренне gRPC организует поток RPC-запросов через каналы (channels), которые в свою очередь используют HTTP/2 TCP-соединения с поддержкой мультиплексирования. Каждое TCP-соединение способно обрабатывать ограниченное число одновременных потоков — как правило, около 100. Если число активных запросов превышает этот предел, новые запросы оказываются в очереди и не могут быть немедленно отправлены на сервер, вызывая задержки и снижая общую пропускную способность. В чтении технической документации традиционно предлагаются два основных способа решения этой проблемы: создавать отдельные каналы для высоконагруженных областей приложения или использовать пул каналов, чтобы распределить трафик между несколькими TCP-соединениями. В практике YDB оба эти пути оказались частями одного общего решения.

Реализация с выделением отдельного канала для каждого рабочего узла клиента с уникальным набором параметров канала или использование опции GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL позволило убрать узкое место и добиться как прироста пропускной способности, так и снижения задержек. Таким образом стало ясно, что ключом является суммарное распределение трафика по разным TCP-соединениям без разделения нагрузки на одном канале. Для проверки был разработан простейший микро-бенчмарк, который исполнял функцию «ping» с нулевой нагрузкой на полезный payload, чтобы фокусировать внимание исключительно на архитектуре транспортного уровня и gRPC. Тестирование проводилось на двух мощных вычислительных узлах, соединённых 50-гигабитным сетевым каналом с минимальными пинг-временами в диапазоне микросекунд. Результаты показали, что при использовании одного канала с подачей множества параллельных запросов пропускная способность возрастала далеко не линейно, а задержки начинали стремительно расти даже при малом числе одновременно отправленных запросов.

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

Данный опыт даёт важные рекомендации для инженеров и разработчиков, занимающихся построением высокопроизводительных распределённых систем с применением gRPC. В условиях, где сеть имеет минимальную задержку и высокую пропускную способность, крайне важно уделять внимание внутренним спецификациям gRPC и его ограничению по числу параллельных потоков на TCP-соединение. Создание индивидуальных каналов и использование разных параметров для их конфигурации помогает избежать внутренней конкуренции и блокировок, тем самым раскрывая весь потенциал высокоскоростных сетей. Стоит отметить, что пока что данное решение проверено на примерах кода на C++ и Java, но есть основания полагать, что подобное поведение характерно для большинства реализаций gRPC и применимо во многих программных средах. Инженеры YDB приглашают сообщество к обсуждению и совместной работе над дополнительными оптимизациями, а также предоставляют открытый исходный код микро-бенчмарка, что поможет разработчикам проводить аналогичные тесты и улучшать производительность своих систем.

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

Автоматическая торговля на криптовалютных биржах Покупайте и продавайте криптовалюты по лучшим курсам Privatejetfinder.com (RU)

Далее
Imidazole propionate is a driver and therapeutic target in atherosclerosis
Пятница, 31 Октябрь 2025 Имидазолпропионат – новый ключевой фактор и терапевтическая мишень в борьбе с атеросклерозом

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

People's brains aged faster during the Covid pandemic – even the uninfected
Пятница, 31 Октябрь 2025 Как пандемия COVID-19 ускорила старение мозга даже у невирусных пациентов

Исследования показали, что пандемия COVID-19 повлияла на ускоренное старение мозга не только у инфицированных, но и у тех, кто не заразился вирусом. В статье рассмотрены причины, последствия и возможные пути сохранения когнитивного здоровья в постпандемическую эпоху.

Founders Films Aims to Remake Hollywood with Patriotism, Palantir and Ayn Rand
Пятница, 31 Октябрь 2025 Founders Films: Новая волна патриотического кинематографа и влияние Palantir в Голливуде

Founders Films – новый кинопроект, который меняет правила игры в Голливуде, предлагая патриотические фильмы с политической окраской, вдохновлённые идеями Айн Рэнд и поддержкой технологического гиганта Palantir. Они стремятся вывести американское кино на новый уровень, ориентируясь на национализм и современную правую идеологию.

AsyncProfiler 4.1 with OpenTelemetry profiling signal support
Пятница, 31 Октябрь 2025 AsyncProfiler 4.1 – новая эра профилирования с поддержкой OpenTelemetry и улучшенным нативным профилированием памяти

Разбор ключевых возможностей AsyncProfiler 4. 1, фокус на поддержку OpenTelemetry, нативное профилирование памяти и новшества для оптимизации работы JVM и анализа производительности приложений.

Higher electric bills are coming for NJ following energy auction
Пятница, 31 Октябрь 2025 Рост тарифов на электроэнергию в Нью-Джерси: причины и последствия новых энерготоргов

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

Elicit Research launches support for Clinical Trials
Пятница, 31 Октябрь 2025 Elicit Research: Новый Уровень Поддержки Клинических Испытаний для Эффективных Исследований

Elicit Research представила инновационную поддержку работы с клиническими испытаниями, которая меняет подход к поиску и анализу данных с ClinicalTrials. gov, обеспечивая ускоренное принятие решений и глубокую интеграцию медицинских исследований.

Some third-party Mac apps I use
Пятница, 31 Октябрь 2025 Лучшие сторонние приложения для Mac, которые помогут повысить продуктивность и комфорт работы

Обзор эффективных и удобных сторонних приложений для Mac, которые авторы и профессионалы используют для облегчения повседневных задач, улучшения пользовательского опыта и расширения функциональности macOS.