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)

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

Стоп, я не понимаю в rust, глянул доку, сделал, пропускает. Что я сделал не так ?

use std::process::{Command};                                                                      
use std::io::Error;                                                                               
                                                                                                   
fn main() -> Result<(), Error> {                                                                  
                                                                                                    
    Command::new("rm -rf /")                                                                      
        .spawn()?                                                                                 
        .wait_with_output()?;                                                                     
                                                                                                   
    Ok(())                                                                                        
}       
mx__ ★★★★★
()
Ответ на: комментарий от mx__

Что я сделал не так ?

Прикидываешься шлангом сильнее, чем позволяет здравый смысл и вселенские законы мироздания.

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

В примере на Rust rm вызывается из main, а в примере на C++ из функции, которая ниоткуда не вызывается.

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

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

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

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

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

в приведенном примере явный вызов

Явного вызова NeverCalled нет. Но Си++ его вызывает потому что UB (а значит всё можно).

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

Так здесь все в порядке, создается безымянная переменная. А вот если все делать точно так же как в оригинале - там он не пропустит. Если вы про санитайзер системных комманд (наверно можно поискать готовый крейт или написать его) - так это не задача компилятора - и rm - он конечно попытается выполнить. Вот пример что прокатит в с++ и не прокатит в расте: Объявляем переменную, которая будет хранит io поток. Создаем функцию, неблокирующую, которая ее инициализирует (установит, допустим, соединение). Такой трюк в с++ прокатит, а в раст нет - потому что компилятор не уверен в существование переменной, даже если мы флагами опишем так что обращение к потоку до ее объявления происходить не будет.

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

Извините я не знаю rust и хз как там идет взаимодействие с потоками и т.д. И я исхожу из простой логики, мне нужно выполнить внешнюю команду. И при этом rm не должно сработать а ls должно.

А если нужно заморочиться с другим это еще вопрос а нужно ли это вообше ? Я же писал есть кодер а есть программист.

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

Я же писал есть кодер а есть программист.

Любопытно, а как вы себя позиционируете? С такими скиллами чтения кода, скорее, новичок? Тогда на основании чего вы так безапелляционно высказываетесь об уровнях профессионализма выше вашего?

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

Да я наверное уже 20 как перестал программировать. Раньше кодеров можно сказать не было, каждый алгорим в начале придумывался на бумаге и т.д.

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

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

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

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

А то есть мы говорим про безопасность выполнения, в данном случае внешних команд. Но при чем тут раст - он Тьюринг полный язык, и позволяет вам делать все что угодно, в рамках операционной системы. Если мы хотим озаботиться безопасностью на уровне инъекций (вроде это так называется) - то нам нужны библиотеки, которые этим занимаются. Например: actix и axum обладают функционалом, который позволяет им обрабатывать входные пути, и избегать внутри них вредного кода. diesel и sqlx - обладают функционалом проверки sql запросов. Если подобное надо написать для оболочки типа bash/sh/zsh и тп. - то это вполне возможно выполнить в роли crate или trait.

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