LINUX.ORG.RU

Cloudflare открыла tokio-quiche — движок, на котором работает iCloud

 , ,


0

4

Компания Cloudflare открыла исходный код своей асинхронной библиотеки tokio-quiche — системы, объединяющей протокол QUIC и фреймворк Tokio для языка Rust. Этот проект используется в инфраструктуре компании уже несколько лет: именно на tokio-quiche работают прокси-сервера Proxy B в Apple iCloud Private Relay, новое поколение прокси-платформ Cloudflare Oxy, а также клиент MASQUE в приложении Warp, заменяющий туннели WireGuard на каналы связи на основе QUIC. По данным разработчиков, библиотека обрабатывает миллионы HTTP/3-запросов в секунду с минимальными задержками и высокой пропускной способностью.

Изначально Cloudflare создала библиотеку quiche как реализацию протокола QUIC и HTTP/3 на Rust с упором на безопасность памяти и универсальность. Она была написана по принципу sans-IO — то есть содержит только логику протокола и не привязана к конкретному способу работы с сетью. Пользователь сам должен был реализовать обработку UDP-пакетов, управление сокетами и интеграцию с асинхронным исполнением. Такая архитектура обеспечивала гибкость, но требовала большого объёма ручного кода и была сложной в освоении.

Теперь tokio-quiche берёт эти задачи на себя. Она объединяет quiche с популярным асинхронным окружением Tokio, выполняющим миллиарды задач на распределённой сети Cloudflare. В результате разработчикам больше не нужно самостоятельно писать связку между QUIC и вводом-выводом — tokio-quiche полностью автоматизирует передачу данных, управление соединениями и синхронизацию.

Архитектурно tokio-quiche построена на модели акторов — лёгких асинхронных задач, каждая из которых отвечает за отдельную часть протокольного состояния и обменивается сообщениями с другими компонентами через каналы. Такая схема идеально подходит для асинхронной обработки данных: и акторы, и sans-IO-библиотеки управляют внутренним состоянием и взаимодействуют с внешним миром через потоки сообщений. В случае QUIC этими сообщениями становятся сетевые пакеты и буферы байтов.

Главный актор в tokio-quiche — IO loop actor, управляющий движением пакетов между quiche и сетевым сокетом. Он реализует цикл приёма и отправки данных, а также обрабатывает сетевые события, включая создание, завершение и обновление соединений. Поскольку QUIC является транспортным протоколом, поверх него можно реализовывать любые прикладные решения — от HTTP/3 до DNS-over-QUIC или даже мультимедийной передачи данных (Media over QUIC). Для этого в библиотеке предусмотрен интерфейс ApplicationOverQuic, который абстрагирует методы quiche и сетевое взаимодействие, позволяя сосредоточиться на логике приложения.

Кроме базового уровня библиотека содержит драйвер H3Driver, соединяющий HTTP/3-модуль quiche с асинхронным циклом ввода-вывода. Он преобразует низкоуровневые события протокола в понятные структурам более высокого уровня и поддерживает потоки данных тела запросов. На его основе реализованы 2 разновидности: ServerH3Driver и ClientH3Driver, которые добавляют поведение, соответствующее серверной или клиентской роли.

Внутри tokio-quiche работают 2 ключевые задачи: InboundPacketRouter и IoWorker. Первая управляет приёмом входящих UDP-датаграмм и маршрутизирует их по идентификатору соединения (DCID), передавая в отдельные каналы. Вторая отвечает за выполнение вызовов quiche для конкретного подключения и взаимодействие с ApplicationOverQuic, обеспечивая контроль над состоянием до и после операций ввода-вывода.

Cloudflare планирует и дальше развивать экосистему QUIC и HTTP/3, готовя к открытой публикации более удобные абстракции — тот же стек, что лежит в основе прокси Oxy и клиента Warp. В будущем компания намерена представить клиент для пользователей своих Privacy Proxies и новый сервис, обрабатывающий миллионы запросов в секунду на базе tokio-quiche.

Исходный код уже доступен на GitHub, а готовый пакет опубликован в crates.io. Разработчики могут использовать его для создания собственных QUIC-приложений — от простых echo-серверов и DNS-клиентов до защищённых туннелей и полноценных HTTP-серверов.

>>> Подробности

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 1)

Ничего не понятно, но очень интересно!

tiinn ★★★★★
()

QUIC

Гадость для которой нужно не только прописывать отдельный роутинг, но и донастраивать шлюз. Работали б через 443/tcp и не выделывались…

somemong
()
Ответ на: комментарий от somemong

Так весь смысл не использовать TCP, чтобы не было лишних телодвижений с его состояниями и системных механизмов congestion.

ac130kz ★★★
()
Последнее исправление: ac130kz (всего исправлений: 1)

Так, пажжите, это программа на Rust’е, но самостоятельная, не переписка чего-то сишного из 80-х?

Camel ★★★★★
()
Ответ на: комментарий от somemong

Если тебе хватает TCP, тебе не нужен QUIC. Используй обычный TLS. QUIC нужен тем, кого TCP слишком ограничивает.

vbr ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Забанил РКН этот QUIC.

Но КВИК можно засунуть в трубу вместе с остальным трафиком, а трубу вывести куданить «туда».

somemong
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.