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)

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

Наверное я не понятно пишу, в вашем примере компилятор может и сам догаться

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

может и сам догаться что : *n.add(2)=2; это unsafe

и он это делает!

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

Ну я сразу не запоминаю терминологию, ну думаю это не так важно.

и он это делает! Тогда зачем юзаеться слово : unsafe ?

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

Вот работа с указателем

Кстати, а указатель в Расте только на Box можно получить?

Что-то типа

let mut x = 1;
let b = получить указатель на x;
f(b);
// здесь x = 2

никак нельзя сделать?

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

Чтобы программист осознанно делал хрень, а не случайно. Слово unsafe в принципе именно для этого: если его нет, все ошибки локальны. Если делаешь unsafe операцию, которая может привести в UB, явно пишешь слово unsafe, чтобы подтвердить, что ты осознаёшь, что делаешь.

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

не очень понял. Программист и компилятор и так четко знают какая это переменная. И они не могу применить к ней работу через указатель если это не спец перменная.

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

Программист и компилятор и так четко знают какая это переменная.

Программист может думать, что доступ по указателю безопасен (не приводит к UB). А это не так.

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

Там не только Box там еще куча и модно свои лепить.

Как я понял получить ты его можно из-за пределами unsafe но как начнешь его юзать без unsafe - обломишься.

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

Не очень понял, вы про это:


fn b(data: &i32){
    println!("{data}");
}

fn main() {
    let mut x =1;
    let c = &x;
    b(c);
    x=10;
    println!("{x}");

}

А так в rust есть следующие указатели: Box - куча, проверяется во время компиляции, потоко-небезопасен Rc - куча, проверяется во время работы, потоко-небезопасен, множественное владение, счетчик ссылок

RcCell - куча, проверяется во время работы, изменяем,потоко-небезопасен, нет множественного владения

Arc - куча, изменяем, потоко-безопасен, множественное владение. Надеюсь ничего не напутал

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

Как-то так (с другими типами) можно

fn b(data: &i32){
    data = 10;
}

fn main() {
    let mut x =1;
    let c = &x;
    b(c);
    println!("{x}"); // здесь 10

}

?

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

Выкинуть unsafe из текста.

Его можно выкинуть только из текста, все операции в котором безопасные.

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

из какого? - конкретнее надо: обычно,ну, просто не ставишь, в большинстве случаев и не нужно, нужно только для ffi.

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

тут по разному пишут все :( То нужно то нет :(

Вот еще раз:

fn main() {
     
    let mut num = 5;
 
    let n1 = &num as *const i32;
    unsafe{
     
        println!("{}", *n1);    // 5
    }
}

Почему unsafe не выкинуть так как компилятор и так поймет что это после операции разыменования.

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

Почему unsafe не выкинуть

Потому что получится бардак везде, как в Си и ЦПП.

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

с любыми так можно - это стандартный способ передачи объекта в функцию с избежание move семантики.

#[derive(Debug)]
enum Number{
    One,
    Two,
    Three,
}
impl Default for Number{
    fn default() -> Self {
        Self::One
    }
}

#[derive(Default,Debug)]
struct Foo{
    a:String,
    b:f64,
    count: Number
}

fn print_it(data: &Foo){
    println!("{:?}",data);
}
fn main() {
    let mut x =Foo::default();
    print_it(&x);
    x.a="Test".to_string();
    x.b=10.0;
    x.count=Number::Three;
    println!("{:?}",x);

}

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

Сделай, чтобы это компилировалось.

fn b(data: &i32){
    data = 10;
}

fn main() {
    let mut x =1;
    let c = &x;
    b(c);
    println!("{x}"); // здесь 10

}

У меня ругается, что менять нельзя.

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

Подожди, для Rc не реализован ни Sync, ни Send, для RcRef - не реализован Sync - они не могут передаваться между потоками. Если я запутался - объясни пожалуйста.

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

let c = &mut x;

Благодарю. Мне это заклинание было надо.

monk ★★★★★
()
Ответ на: комментарий от monk
fn b(data: &mut  i32){
    *data = 10;
}

fn main() {
    let mut x =1;
    let c =&mut x;
    b(c);
    println!("{x}"); // здесь 10

}

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

Разыменование сырого указателя - операция выходящая за пределы системы типов раста, и он не может определить в общем случае есть тут ошибка или нет(и по умолчанию считает ошибкой), программист, ставя unsafe, говорит компилятору- всё норм, компилируй дальше( «я знаю что делаю»)

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

Это в том смысле, что Rc потоконебезопасен только теоретически, реально компилятор вовремя остановит

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

Это я все понимаю. Т.е. вся безопасность rust заключается в том чтобы сообщить компилятору я знаю что делаю и все :(

ну ладно, я думаю что они так тупо не сделали в си пускал бы с каким то ключом компилятор и он бы без кодового слова ругался бы.

Ладно, идем дальше, что мешает кругом пихать это unsafe ? Я не про то что злодеи и т.д. я про то : как на это реагирует компилятор ? И есть какая то конструкция которая будет внутри unsafe вести себя не правильно, типа сообщать компилятору, пока не выкинешь здесь unsafe будет ошибка ?

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

Ладно, идем дальше, что мешает кругом пихать это unsafe ?

Ничего не мешает. Если поставить в начале unsafe на всю программу, можно писать как на Си, когда в любом месте код может быть UB, которое поломает всю программу. И даже скорость работы будет практически такая же.

Но при отсутствии unsafe можно иметь гарантию, что в этом месте точно нет UB.

Для Си есть MISRA C: набор правил, позволяющий писать безопасный код. Но эти правила ещё жёстче, чем Rust без unsafe. И примерно половина проверяется человеком-аудитором, а не автоматически.

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

Не совсем так. Объекты, которые не реализуют SYNC и SEND, даже под unsafe - будут вызывать ошибку компиляции, при попытке передать их между потоками.

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

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

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

Загуглите фотографии хуситов в шлепанцах с автоматами, кинжалами за традиционным поясом, шеками раздутыми от листьев ката и представте что они комитят в GitHub в проекты на Rust.

Хуситы в шлепанцах хоть и не без помощи тайных друзей отлично бомбят дронами корабли высокоразвитой технологической цивилизации, а еще недавно гиперзвук испытали. Так что внешность весьма обманчива. Ради интереса погуглите как в ковид индусы в шлепанцах где-то в трущобах запускали жидкостную ракету. Сварили их труб говна и палок, выморозили из атмосферы кислород. Понятно что это был не космос но имея в руках только газосварочный аппарат и кучу мусора они это сделали.

Знания доступны - по сути дела все упирается в способность индивидуума их впитать. Посмотрите репортажи из трущоб - там даже у детей телефоны с интернетом.

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

Так что рекомендую вам затолкать свое чувство сытого превосходтсва над «жалкими» хуситами поглубже и посмотреть что происходит в мире.

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

Это я все понимаю.

Да чёт не похоже )

Т.е. вся безопасность rust заключается в том чтобы сообщить компилятору я знаю что делаю и все :( ну ладно, я думаю что они так тупо не сделали в си пускал бы с каким то ключом компилятор и он бы без кодового слова ругался бы.

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

Ладно, идем дальше, что мешает кругом пихать это unsafe ?

Главное, язык даёт однозначный формализованный инструмент( в отличие от санитайзеров), в какой степени его использовать вопрос организации проекта

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

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

Можно же просто сказать : Написано на безопасном Rust, а там внутри …

Просто я думал в Rust как то придумали что … ну и ладно.

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

Можно же просто сказать : Написано на безопасном Rust, а там внутри …

Если не используется unsafe, то написано на безопасном Rust = любая ошибка по крайней мере попадёт в журнал ошибок. А не, как при наличии UB, выкинет кусок кода, пишущий в журнал.

Так что, вполне придумали.

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

будут вызывать ошибку компиляции, при попытке передать их между потоками.

Даже если потоки сделать через pthread?

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

не знаю, на std::thread(rust std) и Sender Reciver (что то вроде очереди с мютексом в одном флаконе) получал такую ошибку (trait std::error:Error как раз такой) очень хотелось передать, всеми правдами и не правдами - не вышло, пришлось придумывать как это все правильно сделать

Silerus ★★★★
()
Ответ на: комментарий от Qui-Gon

Вылетевший на улицу счетовод может попробовать пойти в админы но тут вопрос 0 есть джун 40 лет который откончил курсы админов и джун 18 лет.

Вот тут логическая ошибка. Счетовод из 80ых ставится в современные условия. В момент распространения Excel-подобных программ, требования к «компьютерщикам» были другие. Буквально человек который способен набрать текст в редакторе уже обладал профессией.

Вам же похрен

Нам не похрен. Для того чтоб оставаться на плаву надо постоянно учиться. Изучать Rust, systemd и прочие обхаиваемые нововедения, дабы не окзаться «счетоводом».

«жалкими» хуситами поглубже

Хуситы не жалкие. Это люди из формации родоплеменного строя: где учатся обращаться с оружием, а не программировать.

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

Нам не похрен. Для того чтоб оставаться на плаву надо постоянно учиться. Изучать Rust, systemd и прочие обхаиваемые нововедения, дабы не окзаться «счетоводом».

Там одних только js целая куча (react,vue…), плюс всякие go, vala и т.д., у одного только прометея свой язык запросов к БД…

Как говорил ШерлокХ, мозг чердак и не нужно тащить туда всякий хлам. Вот и думаешь что надолго а про что через 5-10 лет забудут.

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

Как говорил ШерлокХ

Прежде всего Шерлок Холмс это вымышленый герой подростковой экшн книги.

В том же эпизоде Шерлок Холмс отличал улицы Лондона по грязи на подошве и тип сигары по пеплу.

Там одних только js целая куча (react,vue…),

Сейчас FrontEnd превратился в отдельную профессию, и если кто-то решил стать профессиональным фронтендером то ему надо знать и react и vue. Профессия востребованая, хорошо оплачиваемая, но сложная: надо отслеживать множество изменений в инструментах.

плюс всякие go

Вот вы смешиваете разные уровни: фреймворки и языки программирования. Чем больше программист знает языков, тем лучше он понимает как использовать базовые составляющие: объекты, массивы, исключения, замыкания, наследования, композиции, функции первого порядка. В каждом языке какая-то идея доведена до совершенства, и поняв ее в побочном для себя языке пишешь код лучше на основном.

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

Приятно обсудить 2*2=4 за чашечкой кофе в форуме. Как говориться обсуждать Perl не мешки ворочать. Изучать же новые концепции сожно, муторно и скучно, в час по чайной ложке и тянет на LOR.

lbvf50txt
()
Ответ на: комментарий от Qui-Gon

Вам тоже кофий. Забористо пишете, агрессивно чуть чуть. Но за то со вкусом, ярко.

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

Если утрировать и не делать деления на cpu/io-bound, то в принципе да. С другой стороны, всегда можно разные части системы писать на разных языках. Редко где нужна производительность программы целиком, достаточно писать особо критичные куски на сях или плюсах.

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

С другой стороны, всегда можно разные части системы писать на разных языках.

Вот для этой ситуации и придумали Раст. Программный интерфейс Си++ практически невозможно дёргать напрямую ни из одного безопасного языка. И накладные расходы на межъязыковое взаимодействие с Си++ такие, что нельзя сделать на Си++, например, только внутренности какого-нибудь горячего цикла. Надо весь цикл переписывать. И всё, что в процессе из него вызывается.

А в Раст внутренности цикла на unsafe rust, всё остальное на safe, потери на взаимодействие частей нулевые.

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

В каждом языке какая-то идея доведена до совершенства, и поняв ее в побочном для себя языке пишешь код лучше на основном.

Да. Поэтому я считаю, что знать надо, как минимум, схему, форт, хаскель и с++. Вне зависимости от того, на чём потом писать будешь.

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

Хуситы не жалкие. Это люди из формации родоплеменного строя: где учатся обращаться с оружием, а не программировать.

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

Буквально человек который способен набрать текст в редакторе уже обладал профессией.

Это у вас ошибка - вы смотрите с современных условий и вам кажется что уж что то а набирать текст в редакторе может даже идиот из школы для умственно отсталых. А уж человек с вышим образованием даже не айтишным - и подавно. Но тогда умение на машинке печатать было профессией которой владели немногие. И почтенный счетовод который 30 лет туда-сюда гонял костяшки на счетах и обладал каллиграфическим почерком вдруг оказывался со своими уже закостеневшими навыками и медленно перестраивающимися нейронными связями за бортом с необходимостью начинать игру сначала. И все что он умел и делал 30 лет до этого ему увы никак не помогало, эти навыки более того были лишними. Особенно на фоне вчерашнего школьника с гораздо более гибкой нервной системой и уже базовыми навыками. Да и первые эти системы были не настолько user-friendly как нынешние - в тех первых досовских еще и win 3 редакторах и таблицах надо было разбираться.

Изучать Rust, systemd и прочие обхаиваемые нововедения, дабы не окзаться «счетоводом».

Ну тут не поспоришь - дедушка Ленин еще в прошлом веке на чердак - и учиться учиться учиться. Но вот насчет нововведений - не уверен. Но новое и модное кидается молодежь - помните как в «аватаре» - моя чаша пуста, все вольется. И конкурировать с хипстерами на их поле для «счетоводов» проигрышная стратегия. Но просто на попе ровно не усидишь, и тут в какой-то мере лотерея. Скажем кобол вроде как мертвый язык - почти латынь. Но до сих пор дохрена систем на коболе менять которые - долго, дорого и небезопасно. Поэтому оставшиеся в живых носители кобола очень даже в цене. Это какбы частные пример - тут цена выросла не из-за огромного спроса а скорее из-за сильно упавшего предложения. То есть общего решения для счетовода нет, но наверное две стратегические рекомендации - учиться (сидеть на попе ровно не прокатит) и при этом избегать самых модных популярных направлений ( в него побегут только лишь все )

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

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

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