- Notifications
You must be signed in to change notification settings - Fork1.3k
A library for building fast, reliable and evolvable network services.
License
cloudflare/pingora
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Pingora is a Rust framework tobuild fast, reliable and programmable networked systems.
Pingora is battle tested as it has been serving more than 40 million Internet requests per second formore than a few years.
- Async Rust: fast and reliable
- HTTP 1/2 end to end proxy
- TLS over OpenSSL, BoringSSL or rustls(experimental).
- gRPC and websocket proxying
- Graceful reload
- Customizable load balancing and failover strategies
- Support for a variety of observability tools
- Security is your top priority: Pingora is a more memory safe alternative for services that are written in C/C++
- Your service isperformance-sensitive: Pingora is fast and efficient
- Your service requires extensivecustomization: The APIs Pingora proxy framework provides are highly programmable
See ourquick starting guide to see how easy it is to build a load balancer.
Ouruser guide covers more topics such as how to configure and run Pingora servers, as well as how to build custom HTTP servers and proxy logic on top of Pingora's framework.
API docs are also available for all the crates.
- Pingora: the "public facing" crate to build networked systems and proxies
- Pingora-core: this crate defines the protocols, functionalities and basic traits
- Pingora-proxy: the logic and APIs to build HTTP proxies
- Pingora-error: the common error type used across Pingora crates
- Pingora-http: the HTTP header definitions and APIs
- Pingora-openssl & pingora-boringssl: SSL related extensions and APIs
- Pingora-ketama: theKetama consistent algorithm
- Pingora-limits: efficient counting algorithms
- Pingora-load-balancing: load balancing algorithm extensions for pingora-proxy
- Pingora-memory-cache: Async in-memory caching with cache lock to prevent cache stampede
- Pingora-timeout: A more efficient async timer system
- TinyUfo: The caching algorithm behind pingora-memory-cache
Linux is our tier 1 environment and main focus.
We will try our best for most code to compile for Unix environments. This is for developers and users to have an easier time developing with Pingora in Unix-like environments like macOS (though some features might be missing)
Windows support is preliminary by community's best effort only.
Both x86_64 and aarch64 architectures will be supported.
Pingora keeps a rolling MSRV (minimum supported Rust version) policy of 6 months. This means we will accept PRs that upgrade the MSRV as long as the new Rust version used is at least 6 months old.
Our current MSRV is 1.72.
Building with the optional featureboringssl
with Boring >= 4.14 requires Rust 1.80.
Some of the crates in this repository have dependencies on additional tools andlibraries that must be satisfied in order to build them:
- Make sure thatClang is installed on your system (for boringssl)
- Make sure thatPerl 5 is installed on your system (for openssl)
Please see ourcontribution guidelines.
This project is Licensed underApache License, Version 2.0.
About
A library for building fast, reliable and evolvable network services.