diff --git a/README.md b/README.md index a7af5dacdf..ab09cc318f 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Not to be used in production systems. * See the [Session documentation](./docs/session.md) for an overview of quilkin sessions and metrics. * See [Filter documentation](./docs/extensions/filters/filters.md) for a list of filters, and their configuration options. * The [Administration interface](./docs/admin.md) provides access to health and metrics endpoints. - +* Finally, we also have a [FAQ](./docs/faq.md) ## Code of Conduct Participation in this project comes under the [Contributor Covenant Code of Conduct](code-of-conduct.md) diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 0000000000..8eba63a23e --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,55 @@ +# FAQ + +## Just how fast is Quilkin? What sort of performance can I expect? + +Our current testing shows that on Quilkin shows that it process packets _quite fast_! + +We won't be publishing performance benchmarks, as performance will always +change depending on the underlying hardware, number of filters, configurations and more. + +We highly recommend you run your own load tests on your platform and configuration, matching your production +workload and configuration as close as possible. + +Our [iperf3](https://iperf.fr/) based performance test in the [examples' folder](../examples/iperf3) is a good +starting point. + +Since this is still an alpha project, we have plans on investigating further performance improvements in upcoming +releases, both from an optimisation and observability perspective as well. + +## Can I integrate Quilkin with C++ code? + +Quilkin is also released as a [library](https://crates.io/crates/quilkin), so it can be integrated with an external +codebase as necessary. + +Using Rust code inside a C or C++ project mostly consists of two parts. + +* Creating a C-friendly API in Rust +* Embedding your Rust project into an external build system + +See [A little Rust with your C](https://docs.rust-embedded.org/book/interoperability/rust-with-c.html) for more +information. + +Over time, we will be expanding documentation on how to integrate with specific engines if running Quilkin as a +separate binary is not an option. + +## I would like to run Quilkin as a client side proxy on a console? Can I do that? + +This is an ongoing discussion, and since console development is protected by non-disclosure agreements, we can't +comment on this directly. + +That being said, we are having discussions on how we can release lean versions of certain filters that would work +with known supported game engines and languages for circumstances where compiling Rust or providing a separate +Quilkin binary as an executable is not an option. + +## Any reason you didn't contribute this into/extend Envoy? + +This is an excellent question! [Envoy](https://www.envoyproxy.io/) is an amazing project, and has set many of the +standards for how [proxies are written and orchestrated](./xds.md), and was an inspiration for many of +the decisions made on Quilkin. + +However, we decided to build this project separately: + +* Envoy seems primarily focused on web/mobile network workloads (which makes total sense), whereas we wanted + something specialised on gaming UDP communication, so having a leaner, more focused codebase would allow us to move + faster. +* We found the Rust and Cargo ecosystem easier to work with than Bazel and C++, and figured our users would as well.