userver: Feature Comparison with other Frameworks
Loading...
Searching...
No Matches
Feature Comparison with other Frameworks

If you find info in this table inaccurate, please propose a PR with the fix.

The table below shows features of different high-level asynchronous frameworks. Note that the framework has to provide components well integrated into each other. For example, a framework with "Async PostgreSQL", "Dynamic Config" and "Metrics" has to have metrics for the PostgreSQL driver and dynamic configs to control the driver behavior at runtime. Such framework gets the ✔️ in the table below. If the components have weak integration with each other or require additional work for such integration (the usual case for third-party library), then the framework gets ± mark in the table below. For missing functionality or if we found no info on the functionality we use ❌ and ❓ respectively.

Feature 🐙 userver go-micro 4.7.0 dapr 1.5.3 actix 0.13.0 + tokio 1.19.2 drogon 1.7.5
Programming model for IO-bound apps stackful coroutines stackful coroutines actors stackless coroutines callbacks / stackless coroutines
Programming language to use С++ Go-lang Python, JS, .Net, PHP, Java, Go Rust C++
Caching data from remote or DB ✔️ [↗]
Dynamic Config [1] ✔️ [↗] ✔️ [↗]
Unit testing ✔️ C++ [↗] ✔️ via Go-lang ✔️ PHP [↗] ✔️ ✔️ [↗]
Functional Testing [2] ✔️ [↗] [↗] [↗] [↗]
Async synchronization primitives ✔️ [↗] ✔️ via Go-lang forces turn based access ✔️ [↗]
Dist locks ✔️ ✔️ [↗] [↗] ± third-party libs
Async HTTP client ✔️ [↗] ✔️ ✔️ ✔️ ✔️ [↗]
Async HTTP server ✔️ [↗] ✔️ ✔️ ✔️ ✔️
Async gRPC client ✔️ [↗] ✔️ ✔️ ± third-party libs
Async gRPC server ✔️ [↗] ✔️ ✔️ ± third-party libs
Async PostgreSQL ✔️ [↗] ± third-party driver ✔️ [↗] manual offloading ✔️ [↗]
PostgreSQL pipelining, binary protocol ✔️ [↗] ± third-party libs
Async Redis ✔️ [↗] ± third-party driver ✔️ [↗] ± third-party libs ✔️ [↗]
Async Mongo ✔️ [↗] ± third-party driver ✔️ [↗] manual offloading [↗]
Async ClickHouse ✔️ [↗] ± third-party driver ± third-party libs [↗]
Async MySQL ✔️ MySQL Driver - EXPERIMENTAL ± third-party driver ✔️ [↗] [↗] ✔️ [↗]
Metrics ✔️ [↗] ± third-party driver ✔️ [↗]
No args evaluation for disabled logs ✔️ [↗] ± third-party libs
Secrets Management ± [↗] ✔️
Distributed Tracing ✔️ [↗] ✔️ [↗] ± third-party libs
JSON, BSON, YAML ✔️ [↗] ± third-party libs ± third-party libs ± third-party libs ± only JSON
Content compression/decompression ✔️ ✔️ ✔️ ✔️
Service Discovery ✔️ DNS, DB topology discovery ✔️ [↗]
Async TCP/UDP ✔️ [↗] ✔️ ✔️ [↗]
Async TLS Socket ✔️ [↗] ✔️ ± third-party libs
Async HTTPS client ✔️ [↗] ✔️ ✔️
Async HTTPS server ✔️ [↗] ✔️
WebSockets Server ✔️ [↗] ± third-party libs [↗] ± third-party libs ✔️ [↗]
Deadlines and Cancellations ✔️ ± [↗]
Retries and Load Balancing ✔️ ✔️ [↗] ✔️

[1]: "Dynamic Configs" stands for any out-of-the-box functionality that allows to change behavior of the service without downtime and restart.

[2]: Functional Testing includes DB startup and initialization; mocks for other microservices; testpoints functionality.