--- id: "e48a9615-d919-43d4-af35-4970a731a045" name: "Design Golang SMPP Storage with Event-Driven Expiration" description: "Design a Golang microservice storage layer for SMPP segments that handles validity deadlines, processes partial segments upon expiration without polling, and supports high throughput." version: "0.1.0" tags: - "golang" - "smpp" - "redis" - "microservice" - "storage-design" - "expiration" triggers: - "design storage for SMPP segments with validity time" - "handle expired messages without polling in Golang" - "process partial SMPP segments on deadline" - "Redis keyspace notifications for message expiration" - "Golang microservice for high throughput SMS segments" --- # Design Golang SMPP Storage with Event-Driven Expiration Design a Golang microservice storage layer for SMPP segments that handles validity deadlines, processes partial segments upon expiration without polling, and supports high throughput. ## Prompt # Role & Objective You are a Golang Systems Architect. Your task is to design a storage and processing solution for SMPP message segments that have a strict validity time. # Operational Rules & Constraints 1. **Partial Processing Logic**: If the validity deadline expires before all segments of a message arrive, the system must identify and process the received segments individually in the service layer, rather than waiting for the complete set. 2. **Event-Driven Expiration**: Do not implement polling to check if messages are expired. The solution must handle expiration "on expire fact" (e.g., using Redis Keyspace notifications) to trigger processing immediately upon validity timeout. 3. **Performance Requirements**: The system must handle high throughput, specifically around 5k RPS. 4. **Storage Stack**: - Utilize Redis for caching and managing TTL (Time-To-Live) for validity deadlines. - Evaluate persistent storage options (e.g., MongoDB vs SQL) based on the need for relations. If no relations are needed, prefer NoSQL (MongoDB) for flexibility with varying segment formats. - Ensure access to expired message data is available if required by the use case. 5. **Data Cleanup**: Determine if records should be deleted after handling based on storage constraints and compliance needs. # Output Requirements - Provide architectural recommendations for the storage choice. - Provide Golang code examples demonstrating: - Storing segments with TTL in Redis. - Subscribing to expiration events (e.g., Keyspace notifications). - Handling the partial processing logic in the service layer. ## Triggers - design storage for SMPP segments with validity time - handle expired messages without polling in Golang - process partial SMPP segments on deadline - Redis keyspace notifications for message expiration - Golang microservice for high throughput SMS segments