Новые пограничные узлы Yeap CDN: почему мы выбрали Rust
Мы заменили пограничный компонент CDN собственной реализацией на Rust и Pingora. Что это даёт вашему сайту: более быстрое подключение, применение конфигурации за секунды, усиленную изоляцию и безопасность.
За последний год мы перевели пограничные узлы Yeap CDN с OpenResty (nginx и Lua) на собственную реализацию на Rust, построенную на Pingora — прокси-фреймворке, исходный код которого открыла Cloudflare. Новая реализация уже обслуживает большую часть нашего трафика, а оставшиеся узлы переводятся на неё по графику.
В этой статье мы опустим большинство внутренних деталей и ответим на один вопрос: что новые пограничные узлы дают вашему сайту?
Почему мы перешли на новую реализацию
Старая реализация сочетала конфигурацию nginx, скрипты Lua, модули C и встроенный движок JavaScript. Она была быстрой, но для изменения любой функции отдельного домена приходилось одновременно править несколько слоёв, а ошибки конфигурации часто оставались незаметными вместо того, чтобы вызывать явную ошибку. По мере расширения возможностей нам потребовалась более единая и надёжная основа.
Мы выбрали Rust по трём причинам:
- Безопасность памяти. Переполнения буфера и висячие указатели — наиболее частые причины сбоев и уязвимостей в коде на C — исключаются самим языком.
- Строгая типизация конфигурации. Конфигурация каждого домена проверяется при поступлении на узел. Поле с опечаткой или неверным типом явно отклоняется, а не игнорируется.
- Тестируемость. Весь пограничный компонент написан на одном языке и покрыт более чем тысячей автоматизированных тестов, которые запускаются перед каждым выпуском.
Какие изменения вы заметите
Более быстрое подключение
Новая реализация поддерживает HTTP/3 (QUIC), который лучше работает в мобильных сетях и на каналах с потерями пакетов. Билеты сеансов TLS сохраняются при перезапуске узлов, поэтому повторные посетители могут пропустить полное рукопожатие и быстрее увидеть первый экран.
Применение конфигурации за секунды
Когда вы меняете правила кэширования, межсетевого экрана или страниц в консоли, новая конфигурация за считанные секунды поступает на каждый пограничный узел и заменяет прежнюю атомарно. Уже обрабатываемые запросы завершаются со старой конфигурацией, новые используют новую, а узлы не перезапускаются и не разрывают соединения.
Точное управление кэшем
При формировании ключей кэша параметры запроса можно нормализовать, сортировать, включать в список разрешённых или запрещённых. Очистка может затрагивать один вариант с конкретными параметрами или сразу все варианты одного пути.
Безопасность на пограничных узлах
Наборы правил WAF, ограничения частоты запросов, распознавание ботов по отпечаткам, географические правила и правила по IP выполняются на пограничных узлах, поэтому вредоносные запросы блокируются до обращения к серверу-источнику. Каждая блокировка записывается в журнал вместе со сработавшим правилом.
Пограничные функции с полноценной изоляцией
Edge Workers выполняются в отдельных песочницах WebAssembly: каждый запуск получает собственную память и строгое ограничение процессорного времени. Некорректно работающий скрипт одного клиента не может повлиять на других или вывести узел из строя.
Насколько это быстро?
При реалистичном браузерном трафике (TLS, HTTP/2 и сжатие) новая реализация обеспечивает более высокую пропускную способность и меньшие задержки в хвосте распределения, чем nginx с аналогичной конфигурацией. Главная причина — непосредственное кэширование сжатого содержимого: при попадании в кэш его не нужно сжимать повторно.
Для этого мы не стали использовать Pingora как чёрный ящик. Мы глубоко доработали его и оптимизировали обработку попаданий в кэш — самый часто выполняемый путь в любой CDN.
Незаметный переход
Старая и новая реализации используют одну плоскость управления и одинаковую конфигурацию, а формат журнала доступа совпадает поле в поле. Вам ничего не нужно менять: домены, сертификаты, правила кэширования и межсетевого экрана переносятся автоматически.
Что дальше
Новая реализация открывает возможности, которые раньше было сложно реализовать. В следующих статьях мы расскажем, как внедрили HTTP/3 и возобновление сеансов TLS, как работает очистка кэша вплоть до отдельных вариантов и как наша DNS назначает серверы имён вашей зоне.
Если вы ещё не пробовали сервис, добавьте сайт в консоли. Бесплатный тариф CDN уже работает на новой реализации.
Создавайте проекты на Yeap Cloud
Бесплатные тарифы DNS и CDN для каждого нового аккаунта.
Читать дальше
Возобновление сеансов TLS и HTTP/3 на пограничных узлах
Возобновление сеансов позволяет повторным посетителям пропустить полное рукопожатие TLS. Почему ключи билетов должны сохраняться при перезапусках, как мы безопасно меняем их и как HTTP/3 использует общий конвейер обработки запросов.
Практическое руководство по очистке кэша: от ключей до отдельных вариантов
Очистили кэш, но по-прежнему получаете попадания? Чаще всего причина в ключе кэша. Как Yeap CDN формирует ключи, как работают режимы строки запроса и что именно удаляет очистка по URL с параметрами и без них.
Начало работы с Yeap LLM API через OpenAI SDK
Yeap LLM API совместим с OpenAI: используйте привычный SDK, указав https://llm.yeap.cloud/v1 в base_url. Создание ключа, примеры на Python и Node.js, потоковые ответы, эмбеддинги, квоты и ограничения моделей и IP для ключей.