Microservices & Event-Driven Architecture (EDA) Mastery

API Key Management and Rate Limiting

1 Views Updated 5/4/2026

Securing Public Access

When you provide an API for external customers, you need a way to track their usage and ensure they don't abuse your infrastructure. API Keys and Rate Limiting are your primary defenses.

1. API Key Lifecycle

An API key should be treated like a password. - **Encryption:** Never store keys in plain text in your DB. - **Rotation:** Provide a way for users to 'Roll' their key if it's compromised. - **Metadata:** Attach the key to a specific 'Plan' (Free vs Pro) to automatically apply different limits.

2. Rate Limiting Strategies

Use the **Token Bucket** algorithm. Give a user 1,000 tokens per hour. Every API call costs 1 token. This allows for 'Bursts' of activity but prevents sustained high-volume attacks that could crash your database.

4. Interview Mastery

Q: "Where should Rate Limiting happen in a microservices architecture?"

Architect Answer: "At the **API Gateway**. Doing it at the gateway protects your internal services from ever receiving the malicious traffic. It also centralizes the logic so you don't have to implement Rate Limiting code in every single microservice. For extra defense, we also use **WAF (Web Application Firewall)** at the DNS level to block IP-based DDoS attacks before they even hit our gateway."

Microservices & Event-Driven Architecture (EDA) Mastery
1. Foundations of Microservices
The Monolith to Microservices transition: When and why? Domain Driven Design (DDD): Bounded Contexts and Aggregates Database Per Service: Managing data consistency Service Discovery and Health Checks in .NET
2. Communication Patterns
Synchronous Communication: HTTP/gRPC and Service Mesh Asynchronous Communication: Message Brokers (RabbitMQ/Kafka) API Gateways: YARP (Yet Another Reverse Proxy) vs Ocelot Protobuf and Shared Contracts: Managing breaking changes
3. Event-Driven Architecture (EDA)
Introduction to EDA: Producers, Consumers, and Topics The Publisher/Subscriber Pattern in .NET Event Sourcing: Capturing every state change CQRS (Command Query Responsibility Segregation) with MediatR
4. Distributed Transactions & Resiliency
The Saga Pattern: Orchestration vs Choreography The Outbox Pattern: Ensuring reliable message delivery Idempotency: Preventing duplicate message processing Distributed Locking with Redis (Redlock)
5. Observability & Monitoring
Distributed Tracing with OpenTelemetry Centralized Logging: ELK Stack (Elasticsearch, Logstash, Kibana) Metrics and Dashboards: Prometheus and Grafana Correlation IDs: Tracking requests across services
6. Security & Identity
Centralized Authentication: IdentityServer4 & Duende Identity OAuth2 and OIDC Flow for Microservices API Key Management and Rate Limiting Mutual TLS (mTLS) for Internal Service-to-Service Security
7. Infrastructure & Deployment
Containerization: Production-grade Dockerfiles Kubernetes for .NET: Pods, Services, and Ingress Helm Charts: Managing complex deployments Blue-Green and Canary Deployments in K8s
8. FAANG Microservices Case Studies
Case Study: Designing a Global Notification Engine (Reliability at Scale) Case Study: Building a High-Performance Logging Pipeline (PB/Day)