Skip to content

Commit

Permalink
Fix: Refine README, cleanup license files. (#146)
Browse files Browse the repository at this point in the history
* Fix: Refine README, cleanup license files.

* Feat: Benchmark details and new graph

* Fix: Moved images folder to .github
  • Loading branch information
har23k authored Nov 15, 2024
1 parent fd2cbe1 commit aa1d053
Show file tree
Hide file tree
Showing 18 changed files with 42 additions and 2,357 deletions.
Binary file added .github/images/http_req_per_sec_vs_body_size.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
64 changes: 39 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,22 @@

## Monolake Framework

Monolake is an open-source framework for developing high-performance network services like proxies and gateways. It is built from the ground up as a blank slate design, starting with a custom async runtime called [Monoio](https://docs.rs/crate/monoio/latest) that has first-class support for the io_uring Linux kernel feature.
Monolake is a framework for developing high-performance network services like proxies and gateways in **Rust**. It is built from the ground up as a blank slate design, starting with a async runtime called [Monoio](https://docs.rs/crate/monoio/latest) that has first-class support for **io_uring** .

While the most widely used Rust async runtime is [Tokio](https://docs.rs/tokio/latest/tokio/), which is an excellent and high-performance epoll/kqueue-based runtime, Monolake takes a different approach. The monoio runtime developed by Bytedance is designed with a thread-per-core model in mind, allowing Monolake to extract maximum performance from io_uring's highly efficient asynchronous I/O operations.

By building Monolake on this novel runtime foundation, the team was able to incorporate new first-class support for io_uring throughout the ecosystem. This includes io_uring-specific IO traits and a unique service architecture that differs from the popular Tower implementation. Monolake also includes io_uring-optimized implementations for protocols like Thrift and HTTP.
By building Monolake on this novel runtime foundation, the team was able to incorporate new first-class support for io_uring throughout the ecosystem. This includes io_uring specific IO traits and a unique service architecture that differs from the popular Tower implementation. Monolake also includes io_uring optimized implementations for Thrift and HTTP.

The Monolake team has used this framework to build a variety of high-performance network components, including:
- HTTP and Thrift proxies
- Application gateways (HTTP-to-Thrift)
- gRPC proxies
The Monolake framework has been used to build various high-performance proxies and gateways, and it is **actively deployed in production at [ByteDance](https://www.bytedance.com/)**. Its use cases are wide-ranging and include:

By focusing on cutting-edge Rust and io_uring, Monolake aims to provide developers with a powerful toolkit for building
- Application Gateways: For protocol conversion, such as HTTP to Thrift
- Security Gateways: Providing pseudonymization for gRPC and Thrift RPCs

## Monolake Proxy

[Monolake Proxy](https://github.com/cloudwego/monolake/tree/main/monolake) is a reference implementation that leverages the various components within the Monolake framework to build a high-performance HTTP and Thrift proxy. This project serves as a showcase for the unique features and capabilities of the Monolake ecosystem. By utilizing the efficient networking capabilities of the monoio-transports crate, the modular service composition of service-async, and the type-safe context management provided by certain-map, Monolake Proxy demonstrates the practical application of the Monolake framework. Additionally, this reference implementation allows for the collection of benchmarks, enabling comparisons against other popular proxy solutions like Nginx and Envoy.
[Monolake Proxy](https://github.com/cloudwego/monolake/tree/main/monolake) is a reference implementation that leverages the various components within the Monolake framework to build a high-performance HTTP and Thrift proxy. This project serves as a showcase for the unique features and capabilities of the Monolake ecosystem. By utilizing the efficient networking capabilities of the [monoio-transports](https://docs.rs/monoio-transports/latest/monoio_transports/) crate, the modular service composition of [service-async](https://docs.rs/service-async/0.2.4/service_async/index.html), and the type-safe context management provided by [certain-map](https://docs.rs/certain-map/latest/certain_map/), Monolake Proxy demonstrates the practical application of the Monolake framework. Additionally, this reference implementation allows for the collection of benchmarks, enabling comparisons against other popular proxy solutions like Nginx and Envoy.

### Basic Features
## Basic Features

- **io_uring-based Async Runtime (Monoio)**: Monolake is built on top of the Monoio runtime, which leverages the advanced capabilities of the io_uring Linux kernel feature to provide a highly efficient and performant asynchronous I/O foundation.

Expand All @@ -42,6 +40,26 @@ By focusing on cutting-edge Rust and io_uring, Monolake aims to provide develope

- **Modular and Extensible Design**: The Monolake framework is designed to be modular and extensible, allowing developers to easily integrate custom components or adapt existing ones to their specific needs.

## Performance

### Test environment

- AWS instance: c6a.8xlarge
- CPU: AMD EPYC 7R13 Processo, 16 cores, 32 threads
- Memory: 64GB
- OS: 6.1.94-99.176.amzn2023.x86_64, Amazon Linux 2023.5.20240805
- Nginx: 1.24.0

<p align="center">
<img src=".github/images/https_req_per_sec_vs_body_size.png" alt="Requests per Second vs Body Size (HTTPS)" width="45%" style="margin-right: 10px;">
<img src=".github/images/http_req_per_sec_vs_body_size.png" alt="HTTP Requests per Second vs Body Size (HTTP)" width="45%">
</p>

<p align="center">
<img src=".github/images/https_req_per_sec_vs_worker_threads.png" alt="HTTPS Requests per Second vs Worker Threads (HTTPS)" width="45%" style="margin-right: 10px;">
<img src=".github/images/http_req_per_sec_vs_worker_threads.png" alt="HTTP Requests per Second vs Worker Threads (HTTP)" width="45%">
</p>

## Documentation

- [**Getting Started**](https://www.cloudwego.io/docs/monolake/getting-started/)
Expand All @@ -52,25 +70,21 @@ By focusing on cutting-edge Rust and io_uring, Monolake aims to provide develope

- [**Config guide**](https://www.cloudwego.io/docs/monolake/config-guid/)

## Performance
TODO

## Related Projects

- [Monoio](https://github.com/bytedance/monoio): A high-performance thread-per-core io_uring based async runtime
- [monoio-transports](https://github.com/monoio-rs/monoio-transports)
- [service-async](https://github.com/ihciah/service-async)
- [certain-map](https://github.com/ihciah/certain-map)
- [monoio-thrift](https://github.com/monoio-rs/monoio-thrift)
- [monoio-http](https://github.com/monoio-rs/monoio-http)
- [monoio-nativetls](https://github.com/monoio-rs/monoio-tls)
## Related Crates

## Blogs
- [Monolake: How ByteDance Developed Its Own Rust Proxy to Save Hundreds of Thousands of CPU Cores](TODO)
| Crate | Description |
|-------|-------------|
| [monoio-transports](https://crates.io/crates/monoio-transports) | A foundational crate that provides high-performance, modular networking capabilities, including connectors and utilities for efficient network communications |
| [service-async](https://crates.io/crates/service-async) | A foundational crate that introduces a refined Service trait with efficient borrowing and zero-cost abstractions, as well as utilities for service composition and state management |
| [certain-map](https://crates.io/crates/certain-map) | A foundational crate that provides a typed map data structure, ensuring the existence of specific items at compile-time, useful for managing data dependencies between services |
| [monoio-thrift](https://crates.io/crates/monoio-thrift) | Monoio native, io_uring compatible thrift implementation |
| [monoio-http](https://crates.io/crates/monoio-http) | Monoio native, io_uring compatible HTTP/1.1 and HTTP/2 implementation |
| [monoio-nativetls](https://crates.io/crates/monoio-native-tls) | The native-tls implementation compatible with monoio |
| [monoio-rustls](https://crates.io/crates/monoio-rustls) | The rustls implementation compatible with monoio |

## Contributing

Contributor guide: [Contributing](https://github.com/cloudwego/monolake/blob/develop/CONTRIBUTING.md).
Contributor guide: [Contributing](https://github.com/cloudwego/monolake/blob/main/CONTRIBUTING.md).

## License

Expand All @@ -79,7 +93,7 @@ Monolake is licensed under the MIT license or Apache license.
## Community
- Email: [[email protected]]([email protected])
- How to become a member: [COMMUNITY MEMBERSHIP](https://github.com/cloudwego/community/blob/main/COMMUNITY_MEMBERSHIP.md)
- Issues: [Issues](https://github.com/cloudwego/monoalke/issues)
- Issues: [Issues](https://github.com/cloudwego/monolake/issues)
- Discord: Join community with [Discord Channel](https://discord.gg/jceZSE7DsW).

## Landscapes
Expand Down
201 changes: 0 additions & 201 deletions examples/LICENSE-APACHE

This file was deleted.

Loading

0 comments on commit aa1d053

Please sign in to comment.