LINUX.ORG.RU

Cloudflare выпустила первый публичный релиз Pingora v0.1.0

 ,

Cloudflare выпустила первый публичный релиз Pingora v0.1.0

0

4

5 апреля 2024 года Cloudflare представила первый публичный релиз открытого проекта Pingora v0.1.0 (уже v0.1.1). Это асинхронный многопоточный фреймворк на Rust, который помогает создавать прокси-сервисы HTTP. Проект используется для создания сервисов, обеспечивающих значительную часть трафика в Cloudflare (вместо применения Nginx). Исходный код Pingora опубликован на GitHub под лицензией Apache 2.0.

Pingora предоставляет библиотеки и API для создания сервисов поверх HTTP/1 и HTTP/2, TLS или просто TCP/UDP. В качестве прокси-сервера он поддерживает сквозное проксирование HTTP/1 и HTTP/2, gRPC и WebSocket. Поддержка HTTP/3 — в планах. Pingora также включает в себя настраиваемые стратегии балансировки нагрузки и аварийного переключения. Чтобы соответствовать требованиям и безопасности, он поддерживает как широко используемые библиотеки OpenSSL, так и BoringSSL, которые соответствуют требованиям FIPS (федеральных стандартов обработки информации США) и пост-квантового шифрования.

Помимо этих функций, Pingora предоставляет фильтры и обратные вызовы, позволяющие пользователям полностью настраивать то, как сервис должен обрабатывать, преобразовывать и пересылать запросы.

В рабочем режиме Pingora обеспечивает плавный перезапуск без простоев для самостоятельного обновления, не теряя ни одного входящего запроса. Syslog, Prometheus, Sentry, OpenTelemetry и другие необходимые инструменты наблюдения легко интегрируются с Pingora.

Возможности Pingora: использование Async Rust, поддержка HTTP 1/2 end to end proxy, TLS over OpenSSL или BoringSSL, gRPC и проксирование веб-сокетов, Graceful reload, настраиваемые стратегии балансировки нагрузки и аварийного переключения, поддержка различных инструментов мониторинга.

В версии Pingora v0.1.1 исправлены ранее обнаруженные ошибки, улучшена производительность алгоритма pingora-ketama, добавлено больше бенчмарков TinyUFO и тестов для pingora-cache purge, ограничен размер буфера для журналов ошибок InvalidHTTPHeader, а также исправлены опечатки и внесены необходимые исправления в комментариях и документации проекта.

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

★★★★

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

Ответ на: комментарий от zx_gamer

Если библиотека очень плохо интегрируется со стандартной библиотекой языка, то она не идеоматична.

Например, я могу написать библиотеку для Си, которая строку будет принимать и возвращать в виде структуры из двух указателей. Она тоже будет не идеоматична для Си, так как даже для вывода через printf эту строку сначала придётся копировать.

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

Тогда у тебя в программе будет по представлению строки и массива из каждой библиотеки, которую используешь. И постоянное копирование из одного представления в другое.

Или вместо единого Си++ множество подъязыков: Qt, VTK, MFC, ROOT, … для каждого из которых нужна своя реализация алгоритма.

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

Не нужно. Все умеют работать с const char*. И все реализации предоставляют возможность получить указатель на нультерминированную строку.

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

И все реализации предоставляют возможность получить указатель на нультерминированную строку.

И как его получить из QString, например?

Судя по https://wiki.qt.io/Technical_FAQ#How_can_I_convert_a_QString_to_char.2A_and_vice_versa.3F только через копирование всей строки. Причём двойное, если нужно время жизни после временной переменной.

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

В рамках «языка Qt» это логичное решение. Строка там изменяемый массив юникодных символов. Если хранить постоянно char* в UTF-8, то на s[0] = c возможно придётся переписывать всю строку, если старое значение первого символа и новое использует разное количество байтов в UTF-8.

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

Сам Юникод «замечательный». Потому что понятие символа напрочь убито. И особой разницы нет, пишешь ты кодопоинт от 1 до 4 байт в UTF-8 или от 1 до 2 байт в QString. Символ всё равно может состоять из произвольного числе кодопоинтов или, наоборот один кодепоинт может описывать несколько символов, а значит его изменение может заставить переписывать всю остальную строку.

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

И много кто использует, например, не std::string, а QString, boost::container::string и т.п.

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