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.