No description
Find a file
Matthew Gumport f8f08c7669 make seeded estimator and plumbing for tests
I started fidgeting with another one of the tests breaking because of the
estimator not being deterministic, and then decided to do this another way.

This adds `seeded` and `seeded_compact` constructors to the estimator which are
used in tests to override the LFU. These are hidden behind `cfg(test)`. The
`random_status` field of the UFO object is also overridden with the same seeds
as used for the seeded LFU.

These make the tests pass consistently without requiring further monkeying.
2024-06-25 23:30:18 +00:00
.github ci: update targeted toolchains 2024-06-21 11:23:35 -07:00
docs Add a replacement cli-parsing function for Opt that can be used in quickstart with no external dependencies 2024-06-25 11:13:36 -04:00
pingora Refactor Service API: Arc is no longer needed for apps. 2024-05-31 11:04:36 -07:00
pingora-boringssl Release 0.2.0 2024-05-10 15:22:37 -07:00
pingora-cache Report evction/invalidtion types 2024-06-21 16:26:26 +00:00
pingora-core Add a replacement cli-parsing function for Opt that can be used in quickstart with no external dependencies 2024-06-25 11:13:36 -04:00
pingora-error Add trait for converting Options to Errors 2024-06-14 16:00:03 -07:00
pingora-header-serde Change max allowed resp headers in HeaderSerde to match H1 max 2024-06-25 18:53:47 +00:00
pingora-http Faster remove_header() call. 2024-06-07 15:42:30 -04:00
pingora-ketama Fxi clippy for Rust 1.79 2024-06-21 09:54:09 -07:00
pingora-limits Release 0.2.0 2024-05-10 15:22:37 -07:00
pingora-load-balancing Fix a couple of typos/grammar issues 2024-06-14 16:00:03 -07:00
pingora-lru Release 0.2.0 2024-05-10 15:22:37 -07:00
pingora-memory-cache Add is_hit fn to RTCache CacheStatus 2024-06-18 19:05:56 -07:00
pingora-openssl Expose a few more TLS APIs 2024-06-17 15:14:35 -07:00
pingora-pool Release 0.2.0 2024-05-10 15:22:37 -07:00
pingora-proxy Move adding ResponseCompression module logic to init_downstream_modules 2024-06-22 00:11:05 +00:00
pingora-runtime Release 0.2.0 2024-05-10 15:22:37 -07:00
pingora-timeout Release 0.2.0 2024-05-10 15:22:37 -07:00
tinyufo make seeded estimator and plumbing for tests 2024-06-25 23:30:18 +00:00
.bleep make seeded estimator and plumbing for tests 2024-06-25 23:30:18 +00:00
.gitignore Adding bleeper config file to internal repo 2024-03-15 14:37:56 -07:00
.rustfmt.toml add edition to .rustfmt.toml 2024-04-22 08:48:19 -07:00
Cargo.toml RUSTSEC-2024-0332: bump h2 2024-04-12 15:30:28 -07:00
CHANGELOG.md Release 0.2.0 2024-05-10 15:22:37 -07:00
cliff.toml Adding 0.1.1 changelog 2024-04-05 15:51:07 -04:00
Dockerfile dev: add dockerfile for local dev (#172) 2024-03-29 11:08:34 -07:00
LICENSE Pingora-limits initial commit 2023-05-08 10:33:45 -07:00
README.md docs: add build requirements to README.md 2024-04-26 12:31:57 -04:00

Pingora

Pingora banner image

What is Pingora

Pingora is a Rust framework to build fast, reliable and programmable networked systems.

Pingora is battle tested as it has been serving more than 40 million Internet requests per second for more than a few years.

Feature highlights

  • Async Rust: fast and reliable
  • HTTP 1/2 end to end proxy
  • TLS over OpenSSL or BoringSSL
  • gRPC and websocket proxying
  • Graceful reload
  • Customizable load balancing and failover strategies
  • Support for a variety of observability tools

Reasons to use Pingora

  • Security is your top priority: Pingora is a more memory safe alternative for services that are written in C/C++
  • Your service is performance-sensitive: Pingora is fast and efficient
  • Your service requires extensive customization: The APIs Pingora proxy framework provides are highly programmable

Getting started

See our quick starting guide to see how easy it is to build a load balancer.

Our user 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.

Notable crates in this workspace

  • 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: the Ketama 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

System requirements

Systems

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)

Both x86_64 and aarch64 architectures will be supported.

Rust version

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.

Build Requirements

Some of the crates in this repository have dependencies on additional tools and libraries that must be satisfied in order to build them:

  • Make sure that Clang is installed on your system (for boringssl)
  • Make sure that Perl 5 is installed on your system (for openssl)

Contributing

Please see our contribution guidelines.

License

This project is Licensed under Apache License, Version 2.0.