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)

А есть спецы по Rust ? Я глянул сырцы, практически весь код состоит из:

pub fn ... {
    unsafe {
       ...

Это что значит ?

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

практически весь код состоит из

unsafe {

Это Rust.

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

Это значит, что использовать этот проект небезопасно.

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

В целом, ключевое слово unsafe не выключает систему типов, которая поддерживает код на Rust корректным. Она только дает возможность использовать некоторые «суперспособности», такие как разыменование указателей. unsafe используется для реализации безопасных абстракций на основе фундаментально небезопасного мира, чтобы большая часть кода на Rust могла использовать эти абстракции и избегать небезопасного доступа к памяти.

saahriktu ★★★★★
()

лол, я думал то что крабик умеет токо работать в ГУР, а он таки ещё на логотипах Cloudflare себя рисует 😁 P.S. Firefox не безопасен с тех пор как его двигло содержит Rust code, а про продукты Cloudflare я вовсе молчу, люди которые считают Firefox/Cloudflare безопасными обычно незадерживаются надолго на свободе

avas1
()

Чтобы соответствовать требованиям и безопасности, он поддерживает как широко используемые библиотеки OpenSSL, так и BoringSSL, которые соответствуют требованиям FIPS (федеральных стандартов обработки информации США) и пост-квантового шифрования.

К месту укуса маркетологом приложи подорожник.

t184256 ★★★★★
()

В продакшене Pingora потребляет примерно на 70% меньше CPU и на 67% меньше памяти по сравнению с нашим старым сервисом с той же нагрузкой по трафику.

Как понимаю, речь о NGINX в понимании старый сервис?

One ★★★★★
()

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

rtxtxtrx
()
Последнее исправление: rtxtxtrx (всего исправлений: 2)
Ответ на: комментарий от rtxtxtrx

Оно не поможет, например, организации сделать прокси на 100500 сотрудников? Или какому-нибудь Симантек (для примера) фильтр для трафика всех его клиентов на своих серверах?

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

я конечно люблю опенсорс, Nvidia, Microsoft и Apple, но вот одно дело слежка - Давайте приведу аллегорию в пример - Сидит Васян, каждый день наблюдает за тем какая машина въезжает и уезжает из его двора, паралльно курит папиросы, да пишет отчёты, но тут вдруг к Васе приходит на смену некий Семён и говорит «А не пошли бы вы лесом» и прогоняет Васю (хотя он прилежно выполнял свою работу и должностные полномочия), ведь Семён у нас занимается пособничеством касательно взлома х86 систем и работает собственной персоной в правительстве (Семён написал компилятор для языка программирования Crystal и Mlir для Mojo), вот так к чему я хочу привести в пример данную аллегорию, господа, опенсорс в России нужен лишь для отвлечения вашего внимания, ведь никакого Семёна и Василия на самом деле нет и не было, реален только лишь читатель данного комментария и добрый модератор ЛОРа, который понижает SCORE пользователям по причине всякой чепухи :D

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

Мне просто эта история напомнила вк, когда всякие kphp неожиданно опубликовали, чтобы потом использовать эти наработки в телеграм, иначе бы повторилась история нгинкс и рамблера. Cloudflare банкротиться собрался?

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

Я помню, вроде на ЛОРе, лет 20 назад, хз точно когда, когда появился ngnix народ смотрел его сырцы и давался диву. У них был вопрос, а это вообще программист писал ? Так что я думаю написать медленнее это нужно умудриться.

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

Я глянул сырцы, практически весь код состоит из

pub fn ... {
    unsafe {
       ...
}

Это что значит ?

Это значит, что кто-то читать сырцы научился, а не врать не научился :-)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от One

У них на голанге вроде был сервис, судя по старым их статьям, в том числе про graceful обновление

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

Тут 2 варианта, либо бан за клевету либо ссылку в студию. Ссылку не дадите буду вынужден писать модераторам.

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

знаю че такое fn и def тока из Mojo, как всегда госуха, ой, ай, Rustовики прогнули индустрию под себя

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

По моему скромному мнению, насколько я знаю программирование, это означает функцию. А «unsafe» - код в случае неудачи выполнения функции.

(с) Ваш Кэп «Очевидность».

ЗЫ: Явно, клепали не русскоязычные, иначе бы такого созвучного названия не дали-бы... =)

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

Это «безопасный» язык называется. Попробуй на нем хоть что-то написать без этого. А писать в любом случае будет очень «удобно».

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

unsafe {

С этими волшебными словами Rust небезопасен, а без них - бесполезен.

Leupold_cat ★★★★★
()
Последнее исправление: Leupold_cat (всего исправлений: 1)
Ответ на: комментарий от intelfx

Полез на github и первый же файл что я ткнул был: https://github.com/cloudflare/pingora/blob/main/pingora-openssl/src/ext.rs

Посчитаешь кол-во строк, функций и кол-во unsafe - сам или помочь ?

Жду еще ссылку.

P.S. Всем кто не понял моего вопроса sorry, а тем кто понял аля @Leupold_cat респект.

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

https://github.com/cloudflare/pingora/blob/main/pingora-core/src/listeners/tls.rs

unsafe нет

Получается - наврал.

Если ты не понимаешь, почему в том файле все функции с unsafe ты не имеешь отношения к программированию и не имеешь права комментировать что-либо, связанное с кодом.

vbr ★★★
()
Последнее исправление: vbr (всего исправлений: 2)
Ответ на: комментарий от vbr

Если ты не понимаешь, почему в том файле все функции с unsafe

Я не знал что попаду СРАЗУ на код содержаший unsafe, что мне было интересно то и глядел. И по теории из стольки файлов кода я попал сразу на такой код, из этого следует вывод что практически весь код такой.

Т.е. я не понимаю а ВЫ по ВАШЕМУ мнению понимаете. Аргумент 100%.

Предлагаю ВАМ клонировать эту фигню посчитать кол-ва unasfe в коде и кол-ва строк всего. А пока ВАШ кусок ПОНИАЮЩЕГО КОД и мой кусок НЕ ПОНИМАЮЩЕГО КОД, пока не дотягивает до аргументов.

P.S. Чем больше читаю это rust код, тем больше удивляюсь, синтаксис к нему (rust) делали адекватные люди или нет ? Хотя как тут товарищ выше заметил, я не фига не понимаю и скорее всего это адекватный синтаксис ;)

mx__ ★★★★★
()
Последнее исправление: mx__ (всего исправлений: 2)
Ответ на: комментарий от mx__

Нет, Вы не единственный человек, которому не нравится синтаксис раста. Но, типа, «с лица не воду пить» и «главное, чтобы человек хороший попался».

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

15 файлов содержат и я напоролся сразу на тот файл где этих unsafe больше всего (Show 8 more matches). Прикольно. Нужно было конечно изучить все файлы, все подсчитать, просто я был поражен, на каждом углу одним из главной фичей Rust пишут, его безопасность а тут такое.

mx__ ★★★★★
()
Последнее исправление: mx__ (всего исправлений: 1)
Ответ на: комментарий от mx__

В этом и фишка современных языков: изначально пишем безопасно, но когда нужна производительность, после профилирования в некотрых местах можем упасть и в unsafe.

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

unsafe значит «сейчас мне надо сделать что-то, гарантии безопасности выполнения которого компилятор мне не проверит». И в этом файле действительно это и делается - вызывается код сишной библиотеки.

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

Ладно, объясняю популярно.

Этот файл это обёртка вокруг openssl.

openssl это нативная либа. Для её вызовов используются очевидно unsafe фичи. Как иначе-то. Весь мир вокруг Rust небезопасен.

Если эта обёртка написана с умом, то вся небезопасность будет только на этой прослойке. А все остальные, кто её вызывает, будут уже в безопасности. Понятно, что всегда остаётся вероятность того, что сама openssl испортит память или ещё чего, всегда остаётся вероятность того, что unsafe код написан плохо и полагающийся на него safe код не получит желаемых гарантий. Но это лучшее, что можно сделать в этом мире, без переписывания всего кода на Rust.

Утверждение «практически весь код состоит из» довольно серьёзное. Если бы было написано «почти весь код в том одном файле, который я решил посмотреть», это было бы честней.

vbr ★★★
()
Последнее исправление: vbr (всего исправлений: 2)
Ответ на: комментарий от unC0Rr

надо сразу сделать оператор «уиноуат», что-то вроде:

guilty {
  log("Code Author's id: %s", );
}
Syncro ★★★★★
()
Ответ на: комментарий от One

В продакшене Pingora потребляет примерно на 70% меньше CPU и на 67% меньше памяти по сравнению с нашим старым сервисом с той же нагрузкой по трафику.

Не поверю ни разу. Либо прошлый сервис на го был написан как попало (но в это тоже не поверю). Основная нагрузка в проксяз связана с шифрованием - все остальное копейки на этом фоне.

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

Утверждение «практически весь код состоит из» довольно серьёзное. Если бы было написано «почти весь код в том одном файле, который я решил посмотреть», это было бы честней.

Я же написал, не было даже мыслей что из кучи файлов я попаду в тот самый где так много unsafe.

Что касается вашей речи про ssl я понял одно, не фига было вылазить с rust пока не сделали реализацию openssl на rust, по сути тут применение rust (его безопасность сведена к 0)

Кстати да, а что разве на rust еще не сделали реализации ssl ? Странно как то.

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

Все трюки выполнены профессионалами, не повторяйте этого дома.

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

Посчитаешь кол-во строк, функций и кол-во unsafe - сам или помочь ?

Посчитаю, чего ж не посчитать:

$ cloc HEAD
     288 text files.
     215 unique files.
      76 files ignored.

github.com/AlDanial/cloc v 2.00  T=0.52 s (409.7 files/s, 87163.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Rust                           158           4581           7151          30354
Markdown                        28            406              0           1252
CSV                              1              0              0           1001
TOML                            20             88             42            706
YAML                             5             20              7            108
Dockerfile                       1              3              0             17
Bourne Shell                     1              0              0              6
HTML                             1              0              0              1
-------------------------------------------------------------------------------
SUM:                           215           5098           7200          33445
-------------------------------------------------------------------------------

$ rg -l -w unsafe | wc -l
15

$ rg -w unsafe | wc -l
61

Итого, из 30k строк кода в 158 файлах 61 вхождение unsafe в 15 файлах (22 вхождения из этих на границе FFI, как уже отметил @vbr).

практически весь код состоит из <…>

Поздравляю вас, гражданин соврамши.

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

Я не знал что попаду СРАЗУ на код содержаший unsafe, что мне было интересно то и глядел. И по теории из стольки файлов кода я попал сразу на такой код, из этого следует вывод что практически весь код такой.

О, начались манёвры. Предсказуемо до боли :-)

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

Кстати да, а что разве на rust еще не сделали реализации ssl ? Странно как то.

Давно сделали. Но криптография - штука такая, тут доверие особое нужно. К openssl доверие есть. К недавно появившейся библиотеке - нет. Когда речь идёт про криптографию, тут возможны многие классы ошибок, которые Rust не предотвращает автоматически: атаки по побочным каналам, логические баги. Полагаю, что по этим причинам многие предпочитают OpenSSL.

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

не фига было вылазить с rust пока не сделали реализацию openssl на rust, по сути тут применение rust (его безопасность сведена к 0)

А теперь замените в предложении rust на, к примеру, java. Нелепо получается, не так ли?

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

И по теории из стольки файлов кода я попал сразу на такой код, из этого следует вывод что практически весь код такой.

Это что за «теория» такая? Теория натягивания совы на глобус?

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

Полез на github и первый же файл

я в парочку тыкнулся и обнаружил, что в русте писать тесты в продуктовом коде считается нормальным, сижу вот и думаю теперь…

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

А как Вы посчитали этим, что unsafe это в тексте а не заремлен ?

Короче, если бы Вы прочитали весь тред, пока здесь написали то не стали бы уже считать. Я объяснил на основании чего я сделал такие выводы.

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

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

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

К недавно появившейся библиотеке - нет.

Я думаю понимаете почему такое отношение к Rust в целом.

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

ну соотношение код/тесты обычно 1/10+, при этом тесты не должны быть «программой» (условно если в тесте есть условный переход, то тест плохой), пихать такое в боевой код… идея, мягко говоря, спорная (а если не мягко - то просто ужасная)

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

ну соотношение код/тесты обычно 1/10+

Обычно наоборот.

при этом тесты не должны быть «программой» (условно если в тесте есть условный переход, то тест плохой),

Чего? Юнит-тест это программа.

пихать такое в боевой код

На всякий случай сообщу, что код тестов в собираемую программу не добавляется. В «боевом бинарнике» от тестов ничего не будет.

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

Вот к Java нет такого отношения. Нормальный синтаксис а самое главное ни кто никогда так не пихал rust во все щели, в ядро, переписыванием core-utils (да я понимаю это не крптография, тут дверия 0, можно и переписать на rust)

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

Обычно наоборот.

наоборот - это означает примерно следующее: «я прекрасно понял, что количество строк тестов обычно больше чем в 10 раз превышает количество продуктового кода, но решил полезть в залупу», ну чтож, удачи вам с рустом.

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

Это значит ещё одна драма в тысячи постов в раст/C++ чатиках. (С участием тех кто не знает ни раст, ни C++)

Полез на github и первый же файл что я ткнул был

Но вообще это связки с сишным кодом, openssl они не писали свой, а использовали готовый. Это нормально, так и должно быть.

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

А как Вы посчитали этим, что unsafe это в тексте а не заремлен ?

Искажения результата возможны только в твою пользу. А т. к. даже потенциально искажённый результат уже более чем красноречив (61 вхождение на 30 kLOC ­— это ни под каким соусом не тянет «почти весь код»), дальше я не стал считать.

Но на самом деле я не поленился и почитал код проекта предметно. Весь unsafe в коде проекта — это технические однострочники; либо FFI, либо тривиальный pin projection вокруг async. То есть тут вообще не о чем разговаривать, можно считать, что pingora целиком написана на safe Rust.

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

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

Одно дело заблуждаться, другое дело — воинственно заблуждаться :-)

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