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.