Siddharth RanjanBackend engineer · India · open to roles
Most reads
should never
reach the
database.
Getting there is the work: a cache that absorbs the reads, stateless services behind a load balancer, and an event log that lets the slow parts happen later. Java, Spring Boot, Kafka, Redis, MySQL.
- Language
- Java · Python · SQL
- Framework
- Spring Boot · Spring Data JPA
- Messaging
- Apache Kafka
- Cache
- Redis
- Store
- MySQL
- Cloud
- AWS · Azure
- AI
- LangChain · FAISS · Gemini API
How a request moves
Solid = blocking · Dashed = asyncOne GET, seven hops, under four milliseconds. Watch where it stops. Then click redis to evict its key and watch the next request fall through to mysql.
- 01
client
browser · mobile · service call
0.0ms - 02
cdn
static served at the edge
1.2ms - 03
load balancer
health checks · least-conn
2.0ms - 04
api gateway
JWT · rate limit · routing
2.6ms - 05
service ×3
stateless · idempotent writes
3.1ms - 06
redis
most reads end right here
3.5ms - 07
mysql
source of truth · read replicas
+12ms on miss
The pool changes size
while the URL does not
- Algorithm
- least-connections
- Target
- 65% cpu per instance
- Bounds
- min 3 · max 12
- Cooldown
- 120s between actions
- Health check
- /healthz every 2s
- Unhealthy
- 2 failed checks → eject
- app-5healthy61%
- app-6healthy58%
- app-7healthy74%
- app-8drainedejected
- app-9bootingwarm-up
Scale-out — app-8 failed two checks and left the rotation; app-9 was added and takes no traffic until warm-up passes. The client saw neither event.
And what happens after the response
The caller never waits for this- 05
service
commits state, then the event
- 06
kafka
partitioned by key · replayable
- 07 — independent consumers
notifier
email, push, webhooks
projector
builds the read model
analytics
warehouse sink
Note — consumers are idempotent because at-least-once delivery means redelivery is normal. A poison message goes to a dead-letter topic so one bad payload cannot stall a partition.
Who owns which hop
Database per service · no shared schema- load balancerpublic TLS → healthy instancesowns nothing — routing only
- api gatewayauth, quota → internal routesowns rate-limit counters
- service (×N)REST in → cache, DB, outboxowns its own schema
- cacheread-through on every GETowns nothing durable — TTL only
- event logoutbox → partitioned topicsowns the ordering guarantee
- databaseprimary writes, replica readsowns the source of truth
tracehelp for commandsTrack record
- activeTCSSystem Engineer C1 — Prime · Spring Boot, EC2, Redis caching, Kafka ingestJan 2026 →
- resolvedNokiaR&D Intern, FN BBN CU-Hardening · test-data aggregation tooling, −30% reporting effortAug 24 – May 25
- buildvigilIncident intelligence — alert firehose to correlated incidents, human-approved remediationSept 2026 →
- shippedmulti-pdf-chatGenAI document QA over LangChain + FAISS, Google Generative AIFeb 2024
- shippedblogging-projectSpring Boot REST backend — registration, posts, likes and comments over Spring Data JPA + MySQLJan – Feb 2024
- publishedIEEEPerformance assessment of recommendation algorithms — SVD, SVD++, k-NN on MovieLens2024
- certifiedcertificationsClaude Certified Developer – Foundations (Anthropic) · Microsoft Azure AZ-900 · Azure AI-901Anthropic · Microsoft
- wonCODATHON1st place with a team of 5 in a 36-hour hackathon — Hope Haven, a marketplace connecting NGOs with donorsVIT Chennai
- wonDATAQUEST2nd runner-up in an 8-hour machine learning hackathon — Data Science ClubVIT Chennai