Haproxy спонсировал этот пост.
Ваше приложение медленно. Вы оптимизировали базу данных, исправили запросы N+1 и настроили микросервисы. Но что, если самый большой налог на производительность на ваш сервис скрывается на виду, в слое, настолько фундаментальном, что мы часто рассматриваем его как решенную проблему?
Я говорю о SSL/TLS. В течение десятилетий мы по праву рассматривали его как не подлежащую обсуждению функцию безопасности, значок блокировки в браузере, «S» в HTTPS. Мы включим это, получаем наш сертификат от Let’s Encrypt и Keed Liking.
Тем не менее, этот менталитет «установить и забыть» становится опасной ответственностью. SSL/TLS — это не просто обертка безопасности; Это активный процесс, интенсивный процессором, который работает почти на каждом (новом) безопасном соединении, проходящем через современный Интернет.
Рассмотрим занятую API электронной коммерции, обрабатывающую 1000 запросов в секунду. Если 30% требуют новых рукопожатием TLS (транспортного уровня), это 300 криптографических переговоров в секунду, конкурируя с вашей бизнес -логикой за циклы процессора. Игнорирование его характеристик производительности — это все равно, что пытаться построить небоскреб без понимания геологии земли под ним. Рано или поздно трещины начнут показывать.
Анатомия рукопожатия: стоимость безопасного соединения
Чтобы оценить накладные расходы TLS, мы должны смотреть за пределы нашего кода приложения. Как подробно рассказал инженер Хусейн Назер на своей фантастической конференции «Анатомия запроса: за пределами обработки бэкэнд», единственный запрос клиента — это сложный танец, который начинается задолго до того, как ваша бэкэнд -структура видит его.
Прежде чем ваше приложение сможет даже обработать запрос, клиент и сервер должны завершить многоэтапные переговоры. Это не просто трехстороннее рукопожатие TCP (протокол управления передачей), чтобы установить соединение; Это последующее рукопожатие TLS, чтобы сделать его безопасным. Этот процесс включает в себя:
Глубокое погружение Насера подчеркивает критический момент: этот криптографический танец является процессором. Сложная математика криптографии открытого ключа не приходит бесплатно. Каждая копия, каждый расчет, потребляет циклы ЦП, которые могли бы быть использованы для обслуживания другого запроса.
Подумайте о рукопожатии 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 мс, вы добавляете видимую задержку задержки к каждому из этих инициаций подключения и измеримый процессор на ваши серверы. Эта работа процессора конкурирует с бизнес -логикой за ресурсы, что означает, что вы либо замедляете нагрузку, либо предоставляете больше возможностей для продолжения.
В масштабе это имеет два основных последствия:
Ключевым моментом является то, что этот налог везде — в HTTPS, безопасные подключения базы данных, некоторые запросы DNS (DOH/DOT) и другие протоколы. Хотя не каждый запрос оплачивает, достаточно, поэтому игнорирование его может быть дорогостоящей ошибкой.
Когда фундамент взломает: openssl 3 изменяется
Этот теоретический риск стал резкой реальностью для всей отрасли, когда в библиотеке была введена критическая проблема эффективности, которую большинство из нас использует каждый день. Как было исследовано в недавнем анализе, выпуск OpenSSL 3.x представил серьезную регрессию производительности, которая идеально иллюстрирует эту опасность.
OpenSSL — это криптографический двигатель под бесчисленными веб -серверами, операционными системами и приложениями. Выпуск 3.0, предназначенный в качестве новой версии долгосрочной поддержки (LTS), имел выбор архитектурного дизайна, который привел к падению его производительности-в некоторых многопоточных сценариях на целых 99% по сравнению с его предшественником. Что еще хуже, производительность часто снижалась по мере добавления большего количества сердечников процессоров, что противоположна тому, что вы ожидаете.
Это поставило организации в невозможную позицию в то время: обновите новую версию для критических исправлений безопасности и страдайте от массового удара, или придерживаться более старой, более высокой версии и становятся более уязвимыми. Это была реальная демонстрация того, как недостаток в этом «решительном» слое может иметь катастрофические последствия, заставив компаний подумать о том, чтобы потребовать в 42 раз больше оборудования только для поддержания уровня обслуживания. Слой SSL/TLS больше не был налогом; Это был препятствие.
Следует отметить, что текущая версия OpenSll составляет 3,5 на момент написания и является обновленной версией LTS. Он рассмотрел большинство сообщенных проблем с производительностью и рекомендуется для типичного использования. Тем не менее, динамический дизайн по -прежнему менее эффективен в масштабе, чем предыдущие версии.
Что вы можете с этим поделать
Ключевым выводом является то, что мы должны прекратить рассматривать слой SSL/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