-
-
Notifications
You must be signed in to change notification settings - Fork 0
docs: migrate wiki content to wiki/ folder #48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| # Architecture | ||
|
|
||
| ## Overview | ||
|
|
||
| The system follows a shared architecture across all Rinha de Backend implementations: two API instances behind an Nginx reverse proxy, with a single PostgreSQL database and an observability stack. | ||
|
|
||
| ## Services | ||
|
|
||
| | Service | Role | CPU | RAM | | ||
| |---------|------|-----|-----| | ||
| | webapi1 | Rust/Actix-web 4 API instance (SQLx 0.8 + Tokio) | 0.4 | 100MB | | ||
| | webapi2 | Rust/Actix-web 4 API instance (SQLx 0.8 + Tokio) | 0.4 | 100MB | | ||
| | nginx | Reverse proxy / load balancer (least-conn) | 0.2 | 20MB | | ||
| | postgresql | Database with stored procedures | 0.5 | 330MB | | ||
| | k6 | Load testing | (not counted) | (not counted) | | ||
| | grafana + influxdb | Observability dashboards | (not counted) | (not counted) | | ||
|
|
||
| ## Load Balancing | ||
|
|
||
| Nginx uses `least_conn` strategy to distribute requests across the two API instances. | ||
|
|
||
| ## Database | ||
|
|
||
| Business logic is implemented in PostgreSQL stored procedures. The database is tuned for maximum write performance: | ||
|
|
||
| - `synchronous_commit=0` — no wait for WAL flush | ||
| - `fsync=0` — skip fsync on writes | ||
| - `full_page_writes=0` — skip full page writes | ||
|
|
||
| ## Implementation Details | ||
|
|
||
| - Minimal single-file Rust API (~140 lines) | ||
| - Actix-web 4 HTTP framework with Tokio async runtime | ||
| - SQLx 0.8 async PostgreSQL driver | ||
| - Multi-stage Docker build for minimal container image size |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| # CI/CD Pipeline | ||
|
|
||
| ## Workflows | ||
|
|
||
| This repository uses four GitHub Actions workflows: | ||
|
|
||
| ### build-check.yml | ||
|
|
||
| - **Trigger:** Pull requests to main | ||
| - **Steps:** Builds the Rust release binary, then runs Docker Compose and validates the healthcheck endpoint | ||
| - **Purpose:** Catch build failures and regressions before merging | ||
|
|
||
| ### main-release.yml | ||
|
|
||
| - **Trigger:** Push to main branch | ||
| - **Steps:** Builds the release binary, builds and pushes a multi-platform Docker image (amd64/arm64) to GHCR, runs container healthcheck, then runs k6 load tests and uploads the stress test report as an artifact | ||
| - **Purpose:** Automated release of production-ready container images with load test validation | ||
|
|
||
| ### codeql.yml | ||
|
|
||
| - **Trigger:** Push to main, pull requests to main, weekly schedule (Mondays) | ||
| - **Steps:** Runs CodeQL static analysis for Rust with security-and-quality queries | ||
| - **Purpose:** Continuous security and code quality analysis | ||
|
|
||
| ### deploy.yml | ||
|
|
||
| - **Trigger:** Push to main branch | ||
| - **Steps:** Deploys the `docs/` directory to GitHub Pages using the actions/deploy-pages workflow | ||
| - **Purpose:** Publish project documentation and stress test reports to GitHub Pages | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,26 @@ | ||||||
| # Challenge | ||||||
|
|
||||||
| ## Rinha de Backend 2024/Q1 | ||||||
|
|
||||||
| The Rinha de Backend is a Brazilian backend programming challenge. The 2024/Q1 edition simulates a fictional bank called "Rinha Financeira" that manages up to 5 named clients, each seeded at startup with a credit limit and initial balance. | ||||||
|
|
||||||
| ## Endpoints | ||||||
|
|
||||||
| Two API endpoints are required: | ||||||
|
|
||||||
| | Endpoint | Method | Description | | ||||||
| |----------|--------|-------------| | ||||||
| | `/clientes/{id}/transacoes` | POST | Submit a debit or credit transaction for a client (IDs 1-5) | | ||||||
| | `/clientes/{id}/extrato` | GET | Get a client's current balance, credit limit, and recent transactions | | ||||||
|
|
||||||
| ## Constraints | ||||||
|
|
||||||
| The challenge imposes strict resource limits across all containers combined: | ||||||
|
|
||||||
| - **1.5 CPU total** shared across all services | ||||||
| - **550MB RAM total** shared across all services | ||||||
| - The system is stress tested using Grafana k6 with concurrent users submitting transactions and querying statements | ||||||
|
|
||||||
| ## Source | ||||||
|
|
||||||
| Full specification: [github.com/zanfranceschi/rinha-de-backend-2024-q1L(https://github.com/zanfranceschi/rinha-de-backend-2024-q1.md) | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix broken source link syntax on Line 26. The link is malformed ( Suggested fix-Full specification: [github.com/zanfranceschi/rinha-de-backend-2024-q1L(https://github.com/zanfranceschi/rinha-de-backend-2024-q1.md)
+Full specification: [github.com/zanfranceschi/rinha-de-backend-2024-q1](https://github.com/zanfranceschi/rinha-de-backend-2024-q1)📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| # Getting Started | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| - Docker with Docker Compose | ||
|
|
||
| ## Clone and Run | ||
|
|
||
| ```bash | ||
| git clone https://github.com/jonathanperis/rinha2-back-end-rust.git | ||
| cd rinha2-back-end-rust | ||
| docker compose up nginx -d --build | ||
| ``` | ||
|
|
||
| ## Access | ||
|
|
||
| The API is available at `http://localhost:9999` | ||
|
|
||
| ## Endpoints | ||
|
|
||
| | Endpoint | Method | Description | | ||
| |----------|--------|-------------| | ||
| | `/clientes/{id}/transacoes` | POST | Submit debit or credit transaction | | ||
| | `/clientes/{id}/extrato` | GET | Get account balance statement | | ||
|
|
||
| ## Example Requests | ||
|
|
||
| ### Create Transaction | ||
|
|
||
| ```bash | ||
| curl -X POST http://localhost:9999/clientes/1/transacoes \ | ||
| -H "Content-Type: application/json" \ | ||
| -d '{"valor": 1000, "tipo": "c", "descricao": "deposito"}' | ||
| ``` | ||
|
|
||
| ### Get Statement | ||
|
|
||
| ```bash | ||
| curl http://localhost:9999/clientes/1/extrato | ||
| ``` |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,22 @@ | ||||||
| # Performance | ||||||
|
|
||||||
| ## Resource Constraints | ||||||
|
|
||||||
| The challenge allows a total of 1.5 CPU and 550MB RAM across all containers. | ||||||
|
|
||||||
| ## Actual Usage | ||||||
|
|
||||||
| | Metric | Limit | Actual | Margin | | ||||||
| |--------|-------|--------|--------| | ||||||
| | RAM | 550MB | ~250MB | 60% below limit | | ||||||
| | Response time | - | < 800ms | All requests | | ||||||
|
|
||||||
| ## Results | ||||||
|
|
||||||
| - All requests completed under 800ms | ||||||
| - Total RAM usage of approximately 250MB, which is 60% below the 550MB limit | ||||||
| - Built for learning purposes | ||||||
|
|
||||||
| ## Stress Testing | ||||||
|
|
||||||
| Load tests are run using the shared [rinha2-back-end-k6L(https://github.com/jonathanperis/rinha2-back-end-k6.md) test suite, which simulates concurrent users performing debits, credits, validations, and statement queries. | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix broken stress-test suite link on Line 22. The link is malformed and currently won’t render correctly. Suggested fix-Load tests are run using the shared [rinha2-back-end-k6L(https://github.com/jonathanperis/rinha2-back-end-k6.md) test suite, which simulates concurrent users performing debits, credits, validations, and statement queries.
+Load tests are run using the shared [rinha2-back-end-k6](https://github.com/jonathanperis/rinha2-back-end-k6) test suite, which simulates concurrent users performing debits, credits, validations, and statement queries.📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| # rinha2-back-end-rust | ||
|
|
||
| Rust/Actix-web 4 implementation for the Rinha de Backend 2024/Q1 challenge. Manages a fictional bank API with transaction processing and balance statements under strict resource constraints (1.5 CPU, 550MB RAM total across all containers). | ||
|
|
||
| ## Wiki Pages | ||
|
|
||
| | Page | Description | | ||
| |------|-------------| | ||
| | [Challenge](Challenge) | What is Rinha de Backend 2024/Q1 | | ||
| | [Architecture](Architecture) | Stack, services, resource constraints | | ||
| | [Getting StartedL(Getting-Started.md) | Prerequisites and how to run | | ||
| | [Performance](Performance) | Results, benchmarks, resource usage | | ||
| | [CI/CD PipelineL(CI-CD-Pipeline.md) | GitHub Actions workflows | | ||
|
Comment on lines
+11
to
+13
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix malformed links in the wiki index (navigation is currently broken). Several links use Suggested fix-| [Getting StartedL(Getting-Started.md) | Prerequisites and how to run |
+| [Getting Started](Getting-Started.md) | Prerequisites and how to run |
@@
-| [CI/CD PipelineL(CI-CD-Pipeline.md) | GitHub Actions workflows |
+| [CI/CD Pipeline](CI-CD-Pipeline.md) | GitHub Actions workflows |
@@
-*[GitHubL(https://github.com/jonathanperis/rinha2-back-end-rust.md) · [Jonathan Peris](https://jonathanperis.github.io/)*
+*[GitHub](https://github.com/jonathanperis/rinha2-back-end-rust) · [Jonathan Peris](https://jonathanperis.github.io/)*Also applies to: 24-24 🤖 Prompt for AI Agents |
||
|
|
||
| ## Key Features | ||
|
|
||
| - Minimal single-file API implementation (~140 lines of Rust) | ||
| - Actix-web 4 with Tokio async runtime and SQLx 0.8 | ||
| - PostgreSQL stored procedures for server-side business logic | ||
| - All requests under 800ms at 250MB RAM usage | ||
|
|
||
| --- | ||
|
|
||
| *[GitHubL(https://github.com/jonathanperis/rinha2-back-end-rust.md) · [Jonathan Peris](https://jonathanperis.github.io/)* | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Align deploy workflow description with actual
deploy.yml.Current text says this repo directly uses
actions/deploy-pagesand only triggers on push, but.github/workflows/deploy.ymluses a reusable workflow and also supportsworkflow_dispatch.🤖 Prompt for AI Agents