mirror of
https://github.com/cloudflare/pingora.git
synced 2024-09-20 02:31:35 +02:00
8160ad1698
Co-authored-by: =?~~~?q?Ren=C3=A9=20Kla=C4=8Dan?= <rene@klacan.sk> Co-authored-by: 12932 <68835423+12932@users.noreply.github.com> Co-authored-by: Alessandro <aleferrara1998@gmail.com> Co-authored-by: InImpasse <40639475+InImpasse@users.noreply.github.com> Co-authored-by: Paul James Cleary <pauljamescleary@gmail.com> Co-authored-by: Yang Hau <yuanyanghau@gmail.com> Co-authored-by: Morpheus <40785143+Muzych@users.noreply.github.com> Co-authored-by: mobeicanyue <81098819+mobeicanyue@users.noreply.github.com> Co-authored-by: Twacqwq <69360546+Twacqwq@users.noreply.github.com> Co-authored-by: Bobby <zkd8907@live.com> Co-authored-by: Dup4 <lyuzhi.pan@gmail.com> Co-authored-by: Josh Soref <2119212+jsoref@users.noreply.github.com> Co-authored-by: Sheldon <1415182877@qq.com> Co-authored-by: houseme <housemecn@gmail.com> Co-authored-by: ZhangIvan1 <zhang_ivan1@163.com> Co-authored-by: GrahamQuan <33834833+GrahamQuan@users.noreply.github.com> Co-authored-by: =?~~~?q?Cristian=20Paul=20Pe=C3=B1aranda=20Rojas?= <paul@kristianpaul.org> Co-authored-by: Nathan Sit <nsit.earth@gmail.com> Co-authored-by: David Lee <67067729+LordMoMA@users.noreply.github.com> Co-authored-by: Mengliang Su <mengliang.su@shopee.com> Co-authored-by: =?~~~?q?=EA=B9=80=EC=84=A0=EC=9A=B0?= <seonwoo960000@toss.im> Co-authored-by: Allen Huang <huangseji@meituan.com> Co-authored-by: Opacity <70315161+zreren@users.noreply.github.com> Co-authored-by: cris <sqdcmk@gmail.com> Co-authored-by: Killian Ye <40255385+ykw1129@users.noreply.github.com> Co-authored-by: Jiwei-dev <hi.jiwei@gmail.com> Co-authored-by: Jinfeng Wang <41931794+wjf40390@users.noreply.github.com> Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com>
65 lines
3 KiB
Markdown
65 lines
3 KiB
Markdown
# Pingora
|
|
|
|
![Pingora banner image](./docs/assets/pingora_banner.png)
|
|
|
|
## What is Pingora
|
|
Pingora is a Rust framework to [build fast, reliable and programmable networked systems](https://blog.cloudflare.com/pingora-open-source).
|
|
|
|
Pingora is battle tested as it has been serving more than 40 million Internet requests per second for [more than a few years](https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet).
|
|
|
|
## 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](./docs/quick_start.md) to see how easy it is to build a load balancer.
|
|
|
|
Our [user guide](./docs/user_guide/index.md) 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](https://github.com/RJ/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.
|
|
|
|
# Contributing
|
|
Please see our [contribution guidelines](./.github/CONTRIBUTING.md).
|
|
|
|
# License
|
|
This project is Licensed under [Apache License, Version 2.0](./LICENSE).
|