Почему самое большое узкое место в вашем приложении может быть SSL/TLS

Haproxy спонсировал этот пост.

Ваше приложение медленно. Вы оптимизировали базу данных, исправили запросы N+1 и настроили микросервисы. Но что, если самый большой налог на производительность на ваш сервис скрывается на виду, в слое, настолько фундаментальном, что мы часто рассматриваем его как решенную проблему?

Я говорю о SSL/TLS. В течение десятилетий мы по праву рассматривали его как не подлежащую обсуждению функцию безопасности, значок блокировки в браузере, «S» в HTTPS. Мы включим это, получаем наш сертификат от Let’s Encrypt и Keed Liking.

Тем не менее, этот менталитет «установить и забыть» становится опасной ответственностью. SSL/TLS — это не просто обертка безопасности; Это активный процесс, интенсивный процессором, который работает почти на каждом (новом) безопасном соединении, проходящем через современный Интернет.

Рассмотрим занятую API электронной коммерции, обрабатывающую 1000 запросов в секунду. Если 30% требуют новых рукопожатием TLS (транспортного уровня), это 300 криптографических переговоров в секунду, конкурируя с вашей бизнес -логикой за циклы процессора. Игнорирование его характеристик производительности — это все равно, что пытаться построить небоскреб без понимания геологии земли под ним. Рано или поздно трещины начнут показывать.

Анатомия рукопожатия: стоимость безопасного соединения

Чтобы оценить накладные расходы TLS, мы должны смотреть за пределы нашего кода приложения. Как подробно рассказал инженер Хусейн Назер на своей фантастической конференции «Анатомия запроса: за пределами обработки бэкэнд», единственный запрос клиента — это сложный танец, который начинается задолго до того, как ваша бэкэнд -структура видит его.

Прежде чем ваше приложение сможет даже обработать запрос, клиент и сервер должны завершить многоэтапные переговоры. Это не просто трехстороннее рукопожатие TCP (протокол управления передачей), чтобы установить соединение; Это последующее рукопожатие TLS, чтобы сделать его безопасным. Этот процесс включает в себя:

  • Приветствие и переговоры: Клиент и сервер говорят Hello (ClientHello, ServerHello) и согласны с тем, какой набор шифров они будут использовать.
  • Обмен сертификатами: Сервер представляет свой цифровой сертификат, чтобы доказать свою личность. Клиент должен подтвердить этот сертификат против своего списка доверенных органов сертификата.
  • Ключевое поколение: Это самая дорожная вычислительная часть. Клиент и сервер используют асимметричную криптографию (медленную, но хорошо для надежного согласования с незнакомцем), чтобы генерировать и обмениваться общим симметричным ключом. Этот новый ключ затем используется для фактического шифрования и дешифрования данных приложения (быстрое, эффективное).
  • Глубокое погружение Насера ​​подчеркивает критический момент: этот криптографический танец является процессором. Сложная математика криптографии открытого ключа не приходит бесплатно. Каждая копия, каждый расчет, потребляет циклы ЦП, которые могли бы быть использованы для обслуживания другого запроса.

    Подумайте о рукопожатии TLS как об обязательном контрольно -пропускном пункте, прежде чем въехать в здание. Даже самая эффективная контрольная точка имеет время обработки. А теперь представьте, что контрольно -пропускной пункт у входа в вашу любимую кофейню: вы не против в первый раз, но вы заметили бы, если вам придется повторить ее для каждого визита.

    Налог на повсеместность: когда миллисекунд становятся кризисом

    «Хорошо, — можно сказать, — так что рукопожатие занимает несколько десятков миллисекундов. Кого это волнует?»

    Вам следует.

    Чтобы быть ясным, вы не оплачиваете эту стоимость за каждый запрос — современные протоколы резко сокращаются. Постоянные соединения (HTTP/1.1 KEEP-ALIVE, HTTP/2 Мультиплексирование и QUIC HTTP/3) означают, что многие запросы имеют одно рукопожатие. Воспроизведение сеанса 1.3 и 0-RTT (нулевое время в обратном пути) могут сделать последующие рукопожатия намного дешевле.

    Проблема заключается в том, что каждое новое безопасное соединение по-прежнему несет эту стоимость, и через оживленную систему со многими недолгими соединениями, API без объединения или клиентов, которые не могут повторно использовать соединения, эти рукопожатия быстро складываются-как в задержке, так и при загрузке процессора.

    Давайте использовать консервативные, реальные цифры:

    • Типичное полное рукопожатие TLS 1.3 может добавить 1 или 2 сетевых круговых поездок (~ 30-50 мс в зависимости от условий сети) плюс измеримые циклы ЦП для криптографической работы.
    • Возобновляемые или объединенные соединения резко сократили это, но в рабочих нагрузках, где 20 до 40% запросов все еще вызывают новое рукопожатие, это значительный налог на вашу инфраструктуру.

    Например, при 1000 новых соединениях в секунду с рукопожатием 40 мс, вы добавляете видимую задержку задержки к каждому из этих инициаций подключения и измеримый процессор на ваши серверы. Эта работа процессора конкурирует с бизнес -логикой за ресурсы, что означает, что вы либо замедляете нагрузку, либо предоставляете больше возможностей для продолжения.

    В масштабе это имеет два основных последствия:

  • Уничтоженное пользовательское опыт: Для протоколов, страдающих подключением, таких как GRPC или приложения со многими короткожившими вызовами API, накладные расходы рукопожатия могут стать важным фактором воспринимаемой задержки.
  • Увеличение затрат на инфраструктуру: Больше процессора, потраченного на криптографические расчеты, означает, что для обработки того же трафика необходимы больше серверов. Этот «налог на рукопожатие» напрямую раздувает ваш счет вычислительного законопроекта.
  • Ключевым моментом является то, что этот налог везде — в HTTPS, безопасные подключения базы данных, некоторые запросы DNS (DOH/DOT) и другие протоколы. Хотя не каждый запрос оплачивает, достаточно, поэтому игнорирование его может быть дорогостоящей ошибкой.

    Когда фундамент взломает: openssl 3 изменяется

    Этот теоретический риск стал резкой реальностью для всей отрасли, когда в библиотеке была введена критическая проблема эффективности, которую большинство из нас использует каждый день. Как было исследовано в недавнем анализе, выпуск OpenSSL 3.x представил серьезную регрессию производительности, которая идеально иллюстрирует эту опасность.

    OpenSSL — это криптографический двигатель под бесчисленными веб -серверами, операционными системами и приложениями. Выпуск 3.0, предназначенный в качестве новой версии долгосрочной поддержки (LTS), имел выбор архитектурного дизайна, который привел к падению его производительности-в некоторых многопоточных сценариях на целых 99% по сравнению с его предшественником. Что еще хуже, производительность часто снижалась по мере добавления большего количества сердечников процессоров, что противоположна тому, что вы ожидаете.

    Это поставило организации в невозможную позицию в то время: обновите новую версию для критических исправлений безопасности и страдайте от массового удара, или придерживаться более старой, более высокой версии и становятся более уязвимыми. Это была реальная демонстрация того, как недостаток в этом «решительном» слое может иметь катастрофические последствия, заставив компаний подумать о том, чтобы потребовать в 42 раз больше оборудования только для поддержания уровня обслуживания. Слой SSL/TLS больше не был налогом; Это был препятствие.

    Следует отметить, что текущая версия OpenSll составляет 3,5 на момент написания и является обновленной версией LTS. Он рассмотрел большинство сообщенных проблем с производительностью и рекомендуется для типичного использования. Тем не менее, динамический дизайн по -прежнему менее эффективен в масштабе, чем предыдущие версии.

    Что вы можете с этим поделать

    Ключевым выводом является то, что мы должны прекратить рассматривать слой SSL/TLS как непогрешимый черный ящик. Нам нужно применить ту же строгость, что и к нашему собственному коду. Вот несколько действенных шагов:

  • Профиль за пределами вашего приложения: Не думайте, что задержка поступает из вашей базы данных. Используйте инструменты профилирования, чтобы увидеть, где тратится время процессора. Вы можете быть шокированы, увидев такие функции, как SSL_READ или SSL_WRITE, зажигая ваши графики пламени.
  • Знай свой стек: Какая библиотека SSL/TLS вы на самом деле используете? Openssl? Boringssl? Libressl? AWS-LC? Каждый имеет разные характеристики производительности и различную философию развития. Этот выбор является критически важным архитектурным решением, а не незначительной детализацией реализации.
  • Настройка вашей системы: На уровне операционной системы настройка настройки ядра, связанные с TCP (размеры буферов, отставки подключения) может помочь вашему серверу более эффективно обрабатывать более высокий объем безопасных соединений.
  • Уменьшить рукопожатия: Реализуйте объединение соединений, включите HTTP/2 или HTTP/3, и убедитесь, что ваши клиенты используют возобновление сеанса TLS, чтобы минимизировать количество полномочиев.
  • SSL/TLS — это основа безопасного общения онлайн. Но, как и в любом основах, у него есть грузоподъемность. Понимая его затраты, измеряя его влияние и делая сознательный выбор в отношении повторного использования соединений, настройки протокола и криптографических библиотек, мы можем минимизировать влияние безопасных коммуникаций на наши приложения.

    Для глубокого погружения в наиболее перспективные библиотеки SSL, включая тесты и сравнения, ознакомьтесь с «Состоянием стеков SSL» Вилли Тарро и Уильяма Лаллеманда.

    Haproxy Technologies является компанией Haproxy One, самой быстрой в мире платформы доставки и безопасности приложений и Haproxy, наиболее широко используемой балансировщиком программного обеспечения. Узнайте больше на HAPROXY.com Узнайте больше последних из Haproxy Trending Stories YouTube.com/thenewstack Tech Moving быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Рон Норткойт является директором по техническому маркетингу в Haproxy Technologies, где он фокусируется на показателях эффективности, содержании разработчика и глубоких отраслевых знаниях для стимулирования технических инноваций и вовлечения. С более чем 25 -летним опытом работы в экосистеме с открытым исходным кодом, … Подробнее от Ron Northcutt

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *