Конференция Arenadata
ArenaTech 2026 – для всех, кому интересны технологии Big Data
Приглашаем вас принять участие в технической онлайн-конференции, посвященной работе с большими данными. Участие бесплатно для всех желающих.

В программе 3 блока докладов:

  • СУБД: архитектура и эксплуатация. Обсудим новые возможности Greengage DB и Arenadata DB на его основе, включая hot standby, обзор утилиты изменения кластерной топологии ggrebalance, вопросы безопасности и устранения CVE.
  • Платформа данных: безопасность и Kubernetes в ADH, аналитика в ADQM. Расскажем об управлении секретами и доступом в Arenadata Hyperwave с использованием OpenBao, особенности переноса сервисов в Kubernetes, а также про аналитические методы в инструментах ADQM.
  • Инструменты: кластерный менеджер, документация, ИИ-поиск. Поделимся опытом разработки технической документации (включая интеллектуальный поиск и ИИ-ассистент) и поговорим про развитие нашего кластерного менеджера ADCM.
Онлайн-конференция состоится 29 октября 2026 года, время трансляции: с 12:00 до 19:00 по московскому времени.
Осталось до события

Обзор kTLS

Содержание

Kernel TLS (kTLS) — реализация протокола TLS, основанная на переносе части операций, в том числе шифрования и дешифрования, на уровень ядра Linux, что уменьшает нагрузку на процессор и улучшает производительность.

В Kafka поддержка kTLS осуществляется начиная с версии ADS 3.9.0.1.b1.

Ниже описано, как осуществляется взаимодействие потребителя и брокера Kafka при использовании традиционного протокола TLS и при использовании протокола kTLS.

Основные понятия, используемые для описания:

  • Transport layer security (TLS) — криптографический протокол, обеспечивающий безопасную передачу данных по сети при обмене данными между двумя приложениями. Является усовершенствованной версией протокола secure sockets layer (SSL).

  • Пространство ядра (kernel space) — область памяти, зарезервированная для ядра операционной системы, его расширений и драйверов устройств.

  • Пользовательское пространство (user space) — адресное пространство виртуальной памяти операционной системы, предназначенное для пользовательских программ, отделенное от пространства ядра для обеспечения безопасности и стабильности системы.

  • TLS-рукопожатие (TLS handshake) — взаимодействие клиента и сервера при подключении. При рукопожатии происходит определение используемой версии TLS, используемых шифров, обмен ключами и проверка подписей центра сертификации SSL, генерация сеансовых ключей для использования симметричного шифрования.

  • Сетевая интерфейсная карта (Network Interface Controller, NIC) — аппаратное устройство для взаимодействия с сетью.

  • Буфер сетевой карты (NIC buffer) — область памяти, используемая сетевой картой для временного хранения данных при приеме и передаче.

  • Сокет (socket) — абстракция в Linux для обмена данными между процессами или устройствами. В ядре Linux сокеты реализованы как структуры данных, позволяющие системе обрабатывать сетевые операции, не обращаясь напрямую к аппаратным деталям.

  • Файловый дескриптор — натуральное число (идентификатор), закрепленное за определенным потоком ввода-вывода.

Kafka и TLS

Kafka и традиционный TLS
Kafka и традиционный TLS
Kafka и традиционный TLS
Kafka и традиционный TLS

При установке соединения клиента (потребителя) и брокера Kafka после осуществления TLS-рукопожатия приложение в пользовательском пространстве производит системный вызов read. При этом в ядро передается файловый дескриптор, указатель на буфер приложения и другие данные для чтения. Данные копируются через буфер ядра в буфер приложения, шифруются (в пользовательском пространстве) и, используя системный вызов write, записываются в буфер сетевой карты (в пространстве ядра), передавая дескриптор файла, указатель на буфер данных и количество байтов для записи, и отправляются потребителю.

Недостатки работы Kafka c традиционным TLS:

  • Каждый пакет данных копируется дважды между ядром и пользовательским пространством, что вызывает задержки из-за дополнительных операций и переключений между ядром и пользовательским пространством.

  • Высокая нагрузка на процессор из-за выполнения шифрования в программном режиме.

Kafka и kTLS

Kafka и kTLS
Kafka и kTLS
Kafka и kTLS
Kafka и kTLS

При установке соединения клиента (потребителя) и брокера Kafka после осуществления TLS-рукопожатия (рукопожатие по-прежнему выполняется в пользовательском пространстве) приложение производит системный вызов sendfile, который копирует данные между двумя файловыми дескрипторами, то есть данные копируются непосредственно из кеша ядра в сетевой буфер.

Для осуществления шифрования данных в пространстве ядра создается специальный файловый дескриптор сокета TLS (KTLS), куда извлекается информация о сеансовых ключах, идентификаторах и шифровании данных из библиотеки TLS. Данные шифруются непосредственно в ядре перед отправкой в сеть.

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

Преимущества:

  • Обеспечение принципа нулевого копирования (zero-copy) — системный вызов sendfile копирует данные между одним дескриптором файла и другим сразу внутри ядра вместо комбинации вызовов read и write, которые выполняют передачу данных в пользовательское пространство и чтение из него. Это снижает нагрузку на процессор и повышает производительность и эффективность, что имеет особенное значение при передаче большого объема данных.

  • Снижение нагрузки на процессор за счет переноса операций шифрования/дешифрования в ядро.

  • Улучшенная пропускная способность и уменьшенная задержка при передаче данных по защищенным каналам.

  • Прозрачная интеграция с существующими TLS-библиотеками (например, OpenSSL) через API ядра.

ВАЖНО

Для поддержки kTLS требуется ядро ​​операционной системы версии 5.9 и выше. По умолчанию режим kTLS включен. Но если версия ядра ниже требуемой, то произойдет откат в обычный режим.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней