{"id":30141139,"url":"https://github.com/charlieroth/glome-rs","last_synced_at":"2025-08-11T04:34:45.336Z","repository":{"id":306669903,"uuid":"1022806282","full_name":"charlieroth/glome-rs","owner":"charlieroth","description":"Rust implementation of Fly.io's Gossip Glomers Distributed Systems Challenges","archived":false,"fork":false,"pushed_at":"2025-08-08T09:01:25.000Z","size":201,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-08T09:13:31.587Z","etag":null,"topics":["distributed-systems","gossip-glomers","rust"],"latest_commit_sha":null,"homepage":"https://fly.io/dist-sys","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/charlieroth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-19T21:45:05.000Z","updated_at":"2025-08-08T09:01:28.000Z","dependencies_parsed_at":"2025-07-27T01:23:11.024Z","dependency_job_id":"6d567355-59f6-4869-9585-13ec7536b249","html_url":"https://github.com/charlieroth/glome-rs","commit_stats":null,"previous_names":["charlieroth/glome-rs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/charlieroth/glome-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlieroth%2Fglome-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlieroth%2Fglome-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlieroth%2Fglome-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlieroth%2Fglome-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/charlieroth","download_url":"https://codeload.github.com/charlieroth/glome-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlieroth%2Fglome-rs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269831923,"owners_count":24482298,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-11T02:00:10.019Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["distributed-systems","gossip-glomers","rust"],"created_at":"2025-08-11T04:34:42.021Z","updated_at":"2025-08-11T04:34:45.321Z","avatar_url":"https://github.com/charlieroth.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gossip Glomers\n\nA comprehensive Rust workspace containing complete solutions to all\n[Fly.io's Gossip Glomers](https://fly.io/dist-sys/) distributed systems\nchallenges, demonstrating advanced distributed systems patterns, unified\nabstractions, comprehensive testing, and production-ready CI/CD.\n\n## Skills Demonstrated\n\nThis project showcases:\n\n### Distributed Systems Architecture\n\n- Gossip protocols and eventual consistency\n- Leader-follower replication patterns\n- Conflict-free replicated data types (CRDTs)\n- Optimistic concurrency control\n- At-least-once vs exactly-once delivery semantics\n- Network partition tolerance and fault recovery\n\n### Advanced Rust Programming\n\n- Async/await with Tokio runtime and channels\n- Complex enum modeling with Serde for protocol definitions\n- Workspace organization and dependency management\n- Generic trait-based abstractions\n- Comprehensive unit testing patterns\n\n### Software Engineering Best Practices\n\n- Unified node abstraction across all implementations\n- Comprehensive test coverage for all challenges\n- Automated CI/CD pipeline with matrix testing\n- Clean architectural separation of concerns\n\n## Challenge Implementations\n\nAll challenges implement a unified `MessageHandler` trait and leverage shared infrastructure:\n\n| Challenge | Binary | Description | Key Concepts |\n|-----------|--------|-------------|--------------|\n| **01** | `echo` | Echo service | Basic message handling, JSON protocol |\n| **02** | `uniqueids` | Unique ID generation | Distributed ID generation, node identity |\n| **03a** | `single_node_broadcast` | Single-node broadcast | Message broadcasting, topology |\n| **03b** | `multi_node_broadcast` | Multi-node broadcast | Gossip protocols, network partitions |\n| **03c** | *fault-tolerant broadcast* | Fault-tolerant broadcasting | Partition tolerance, message replay |\n| **03d** | *efficient broadcast* | Efficient broadcast | Throughput optimization, batching |\n| **04** | `grow_only_counter` | G-Counter CRDT | State-based CRDTs, monotonic merge |\n| **05a** | `single_node_kafka` | Single-node Kafka | Append-only logs, offset tracking |\n| **05b** | `multi_node_kafka` | Multi-node Kafka | Replicated logs, leader election |\n| **05c** | *efficient kafka* | Efficient Kafka | Quorum acknowledgments, consistency |\n| **06a** | `single_node_tat` | Totally-available transactions | Read-uncommitted isolation |\n| **06b** | `tarut` | Read-uncommitted transactions | Optimistic concurrency control |\n| **06c** | `tarct` | Read-committed transactions | Transaction isolation levels |\n\n## Architecture\n\n### Unified Node Abstraction\n\nThe project features a unified architecture built around core abstractions:\n\n```rust\n// Unified base node providing common functionality\npub struct Node {\n    pub id: String,\n    pub peers: Vec\u003cString\u003e,\n    msg_id: u32,\n}\n\n// Unified message handler trait implemented by all challenges\npub trait MessageHandler {\n    fn handle(\u0026mut self, node: \u0026mut Node, message: Message) -\u003e Vec\u003cMessage\u003e;\n}\n\n// Common runtime for all challenges\npub fn run_node\u003cH: MessageHandler\u003e(mut handler: H) -\u003e Result\u003c(), Box\u003cdyn Error\u003e\u003e\n```\n\n### Project Structure\n\n```\nglome-rs/\n├── maelstrom/          # Core library with shared abstractions\n│   ├── src/\n│   │   ├── lib.rs      # Message types, Node struct, traits\n│   │   ├── node.rs     # Core node implementation\n│   │   ├── kv.rs       # G-Counter CRDT implementation\n│   │   └── log.rs      # Replicated log utilities\n│   └── Cargo.toml\n├── echo/               # Challenge 01: Echo service\n├── uniqueids/          # Challenge 02: Unique ID generation\n├── single_node_broadcast/  # Challenge 03a: Single-node broadcast\n├── multi_node_broadcast/   # Challenge 03b: Multi-node broadcast\n├── grow_only_counter/      # Challenge 04: G-Counter CRDT\n├── single_node_kafka/      # Challenge 05a: Single-node Kafka\n├── multi_node_kafka/       # Challenge 05b: Multi-node Kafka\n├── single_node_tat/        # Challenge 06a: Totally-available transactions\n├── tarut/                  # Challenge 06b: Read-uncommitted transactions\n├── tarct/                  # Challenge 06c: Read-committed transactions\n├── .github/workflows/      # CI/CD pipeline\n└── Makefile               # Maelstrom test automation\n```\n\nEach challenge implementation follows the same pattern:\n\n1. **Custom node struct** implementing domain-specific state\n2. **MessageHandler trait** for processing protocol messages\n3. **Comprehensive unit tests** for core functionality\n4. **Integration tests** via Maelstrom test harness\n\n## Testing Strategy\n\n### Unit Testing\n\nEvery challenge includes comprehensive unit tests covering:\n\n- Message handling logic\n- State transitions\n- Edge cases and error conditions\n- Protocol compliance\n\n### Integration Testing\n\nAutomated Maelstrom testing via CI/CD:\n\n- Network partition simulation\n- Fault injection testing\n- Performance benchmarking\n- Correctness verification\n\n### Test Execution\n\n```bash\n# Run all unit tests\ncargo test --workspace\n\n# Run specific challenge tests\ncargo test -p echo\ncargo test -p multi_node_broadcast\n\n# Run Maelstrom integration tests\nmake echoer              # Test echo service\nmake unique-id           # Test unique ID generation\nmake mnb                 # Test multi-node broadcast\nmake goc                 # Test G-Counter CRDT\n```\n\n## CI/CD Pipeline\n\nGitHub Actions workflow featuring:\n\n- **Matrix Strategy**: Parallel testing of all 14+ challenge implementations\n- **Dependency Caching**: Optimized Rust compilation and Maelstrom installation\n- **Integration Testing**: Automated Maelstrom test execution\n- **Quality Gates**: Build verification, linting, and correctness checks\n\nThe CI pipeline runs comprehensive tests on every push and pull request,\nensuring reliability and correctness across all distributed systems\nimplementations.\n\n## Development Commands\n\n```bash\n# Build all challenges\ncargo build --workspace\n\n# Build specific challenge\ncargo build -p echo\n\n# Run challenge locally\ncargo run -p echo\n\n# Format and lint\ncargo fmt\ncargo clippy\n\n# Run Maelstrom tests (see Makefile for full list)\nmake echoer unique-id snb mnb goc sn-kafka mn-kafka\n```\n\n## Learning Outcomes\n\nThis project demonstrates:\n\n### Distributed Systems Fundamentals\n\n- CAP theorem trade-offs in practice\n- Consistency models and their implementations\n- Fault tolerance and recovery strategies\n\n### Advanced Rust Programming\n\n- Complex async programming patterns\n- Trait-based architectural design\n- Workspace management and code organization\n\n### Software Engineering Excellence\n\n- Test-driven development practices\n- CI/CD pipeline implementation\n- Clean code and architectural principles\n\n### Protocol Design and Implementation\n\n- JSON-based message protocols\n- State machine design patterns\n- Network communication abstractions\n\n## Key Achievements\n\n- **Complete Implementation**: All Gossip Glomers challenges solved\n- **Unified Architecture**: Consistent abstractions across all challenges  \n- **Comprehensive Testing**: Unit tests for every challenge implementation\n- **Production CI/CD**: Automated testing with matrix strategy\n- **Clean Code**: Well-organized, documented, and maintainable codebase\n- **Performance Optimized**: Efficient async implementations using Tokio\n\nThis project represents a complete journey through distributed systems\nprogramming, from basic message handling to complex distributed\ntransactions, all implemented with production-quality engineering practices.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharlieroth%2Fglome-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcharlieroth%2Fglome-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharlieroth%2Fglome-rs/lists"}