1.9 KiB
1.9 KiB
Rust Architecture
When to Choose Rust
Strong fit:
- Performance-critical services (compute-heavy, low-latency)
- Resource-constrained environments
- Systems programming needs
- Memory safety critical (no GC pauses)
- Concurrent processing with correctness guarantees
May not be worth it:
- Prototype/MVP stage (slower iteration)
- Small team without Rust experience
- Standard CRUD API (TS faster to develop)
- Heavy dependency on ecosystem libraries only in other languages
Stack Recommendations
Web services
| Component | Recommendation |
|---|---|
| Runtime | tokio (async runtime, de facto standard) |
| Web framework | axum (modern, type-safe) or actix-web (mature, fast) |
| Database | sqlx (compile-time checked), diesel (full ORM) |
| Serialization | serde + serde_json, bincode for binary |
| Observability | tracing + tracing-subscriber |
| Errors | thiserror (libraries), anyhow (applications) |
Project structure
my-service/
├── Cargo.toml # Workspace manifest
├── crates/
│ ├── api/ # HTTP handlers, routing
│ ├── domain/ # Business logic, pure Rust
│ ├── persistence/ # Database access
│ └── common/ # Shared utilities
Operational considerations
- Build times longer than TS (use
sccache,moldlinker) - Binary size larger (use
cargo-bloatto analyze) - Memory usage lower at runtime
- Deploy as single static binary (easy containerization)
- Cross-compilation more complex
Tradeoffs vs TypeScript
| Aspect | Rust | TypeScript |
|---|---|---|
| Memory | 5-10x lower | Higher |
| Execution | 2-10x faster | Slower |
| Bug detection | Compile-time (null, races) | Runtime possible |
| GC pauses | None | Yes |
| Development speed | Slower (borrow checker) | Faster iteration |
| Ecosystem | Smaller for web | Massive (npm) |
| Hiring | Harder | Easy |