Designed a real-time multiplayer backend over WebSocket and load-tested it to 1000+ CCU with low-latency updates. Replaced real-time DB writes (from a 20/s baseline) with Redis-backed state and RabbitMQ batch persistence — cutting write load by ~95%. Designed idempotent, transaction-safe workflows around distributed transactions and race conditions, and made in-game purchases atomic using Redis + Lua scripting to hold up under high concurrency. Thiết kế backend multiplayer thời gian thực qua WebSocket, load-test tới 1000+ CCU với độ trễ thấp. Thay việc ghi DB trực tiếp (từ mức nền 20/s) bằng state lưu trên Redis và batch persistence qua RabbitMQ — giảm tải ghi ~95%. Thiết kế các workflow idempotent, transaction-safe xử lý distributed transaction và race condition, đảm bảo giao dịch mua vật phẩm trong game là atomic bằng Redis + Lua scripting để chịu được tải đồng thời cao.
Pham Hai Dang
Backend Developer Backend Developer · Server Game Developer Server Game Developer
I build reliable, high-concurrency backends for real-time multiplayer games — designed, deployed and kept alive solo. Tôi xây dựng các backend đáng tin cậy, chịu tải đồng thời cao cho game multiplayer thời gian thực — tự thiết kế, deploy và vận hành một mình.
Concurrency · Transactions · Distributed Systems
AboutGiới thiệu
— Hà NộiI'm a backend engineer who cares about the parts of a system most people never see — the race condition that only shows up under load, the payment that must never be charged twice, the service that has to stay up while everything around it is changing.
Most of what I know, I learned by building a game I grew up playing. I spent my childhood inside Ngọc Rồng Online, a Vietnamese MMORPG, so a year ago I started rebuilding it from scratch — not a clone of the gameplay, but the whole backend behind it. That project turned into a live, 14-service system running 24/7 that I still design, deploy, and keep alive on my own.
Along the way I picked up the things you can't really learn from a tutorial: how to keep a distributed transaction consistent when a network call fails halfway through, how to cut database write load by an order of magnitude without losing data, and how to find out a service is down before your players do. I'm a second-year Information Technology student at PTIT — two years out from graduating — and I work part-time and intern at game studios in Hà Nội while I finish my degree.
When I'm not staring at Grafana dashboards, I'm usually playing League of Legends or Genshin Impact — the kind of games that got me into building backends in the first place.
Tôi là một kỹ sư backend quan tâm đến những phần của hệ thống mà ít người để ý — cái race condition chỉ xuất hiện khi tải cao, khoản thanh toán tuyệt đối không được tính hai lần, dịch vụ phải luôn sống trong khi mọi thứ xung quanh liên tục thay đổi.
Phần lớn những gì tôi biết đến từ việc tự xây lại một tựa game tôi lớn lên cùng. Tuổi thơ tôi gắn với Ngọc Rồng Online — một MMORPG Việt Nam — nên một năm trước tôi bắt đầu dựng lại nó từ đầu, không phải bản sao gameplay mà là toàn bộ backend phía sau. Dự án đó đã trở thành một hệ thống 14 service đang chạy thật, hoạt động 24/7, mà tôi vẫn tự thiết kế, deploy và vận hành một mình.
Trên hành trình đó tôi học được những điều mà tutorial không dạy: cách giữ một distributed transaction nhất quán khi một network call lỗi giữa chừng, cách giảm tải ghi database cả chục lần mà không mất dữ liệu, và cách phát hiện một service sập trước cả khi người chơi nhận ra. Tôi là sinh viên năm hai ngành Công nghệ Thông tin tại PTIT — còn hai năm nữa mới ra trường — và đang làm part-time, thực tập tại các studio game ở Hà Nội trong lúc hoàn thành việc học.
Khi không cắm mặt vào dashboard Grafana, tôi thường chơi League of Legends hoặc Genshin Impact — chính những tựa game đã đưa tôi đến với việc xây dựng backend.
ExperienceKinh nghiệm
— 2025–2026Built three NestJS microservices for a match-3 puzzle game serving ~2000 CCU over REST and gRPC. Set up RabbitMQ pipelines with retry and exponential backoff that recovered ~30% of transient failures, and brought average query latency down ~70% with MySQL indexing and Redis caching. Hardened everything with JWT/RBAC, rate limiting, Docker, Winston logging, and Swagger docs. Xây ba microservice NestJS cho một game match-3 phục vụ ~2000 CCU qua REST và gRPC. Dựng pipeline RabbitMQ có retry và exponential backoff giúp khôi phục ~30% lỗi tạm thời, và giảm độ trễ truy vấn trung bình ~70% nhờ indexing MySQL và caching Redis. Gia cố toàn bộ bằng JWT/RBAC, rate limiting, Docker, Winston logging và Swagger.
ProjectsDự án
— in productionA live MMORPG I designed and operate solo: a 14-service polyglot backend in NestJS and Go, with 100+ APIs across 8 databases, event-driven over RabbitMQ, Redis Pub/Sub and NATS. Over 14 months it's grown to 1000+ commits, shipped by a CI/CD pipeline I built myself. Một MMORPG đang chạy thật do tôi tự thiết kế và vận hành: backend đa ngôn ngữ 14 service bằng NestJS và Go, với 100+ API trên 8 database, hướng sự kiện qua RabbitMQ, Redis Pub/Sub và NATS. Sau 14 tháng đã có hơn 1000 commit, được ship bởi pipeline CI/CD do chính tôi xây.
- Used the Saga + Outbox pattern across every transactional flow — 0% partial-failure incidents in production. Dùng pattern Saga + Outbox cho mọi luồng giao dịch — 0% sự cố lỗi một phần trong production.
- Cut DB writes ~90% with a dirty-flag + async batch-write strategy while holding 700–1,000 RPS throughput. Giảm ghi DB ~90% bằng chiến lược dirty-flag + ghi batch bất đồng bộ, vẫn giữ throughput 700–1,000 RPS.
- Integrated PayOS and VietQR with idempotent webhooks — 100% transaction accuracy across ~100 test cases. Tích hợp PayOS và VietQR với webhook idempotent — 100% chính xác giao dịch qua ~100 test case.
- Migrated the real-time game loop from NestJS/Socket.IO to Go + raw WebSocket + Protobuf + NATS, shrinking payloads ~60%. Chuyển game loop thời gian thực từ NestJS/Socket.IO sang Go + raw WebSocket + Protobuf + NATS, giảm payload ~60%.
- Built the observability stack (Prometheus, Grafana, circuit breakers, Discord/Telegram alerts) that caught 25 production incidents. Xây stack observability (Prometheus, Grafana, circuit breaker, cảnh báo Discord/Telegram) đã phát hiện 25 sự cố production.
- Integrated a RAG chatbot for in-game player support with Redis-cached FAQ — ~40% cache hit and ~50% LLM cost reduction, with per-user rate limiting. Tích hợp RAG chatbot hỗ trợ người chơi trong game với FAQ cache trên Redis — ~40% tỉ lệ cache hit và ~50% giảm chi phí LLM, có rate limiting theo từng user.
- Deployed on a 3-node Ubuntu VPS cluster with load-balanced stateless services, plus automated nightly backups (cron 04:00) of MySQL, PostgreSQL, MongoDB and Redis to local + GitHub + Google Drive with 7-day retention. Triển khai trên cụm 3 node Ubuntu VPS với service stateless load-balanced, kèm backup tự động hằng đêm (cron 04:00) cho MySQL, PostgreSQL, MongoDB và Redis xuống local + GitHub + Google Drive, giữ lại 7 ngày.
- Shipped 478 deployments at ~95% success through a self-built CI/CD pipeline; soak-tested at 98.4% success @ 1k RPS, stress-tested up to 3,000 VUs (k6) with saturation near 1,200 RPS. Ship 478 lần deploy với ~95% thành công qua pipeline CI/CD tự xây; soak-test đạt 98.4% success @ 1k RPS, stress-test tới 3.000 VU (k6) với điểm bão hoà quanh 1.200 RPS.
SkillsKỹ năng
— toolboxEducation & HonorsHọc vấn & Giải thưởng
— 2024 — presentSecond-year student, two years from graduating. Working part-time at Hà Nội game studios while finishing the degree. Sinh viên năm hai, còn hai năm nữa tốt nghiệp. Đang làm part-time ở các studio game tại Hà Nội trong lúc hoàn thành việc học.
- Top 16 — RMIT AI & Security Hackathon 2025 · built under time pressure with a small team. Reminder that shipping rough-but-working beats over-engineering, and that security has to be designed in, not bolted on. Top 16 — RMIT AI & Security Hackathon 2025 · làm dưới áp lực thời gian cùng một nhóm nhỏ. Một bài học rằng ship được thứ thô nhưng chạy được tốt hơn là over-engineering, và bảo mật phải được thiết kế từ đầu.
- Freshman Year Academic Scholarship — PTIT 2025 Học bổng năm nhất — PTIT 2025
- Second Prize, Provincial High School Mathematics Olympiad 2024 Giải Nhì, Olympic Toán THPT cấp tỉnh 2024
Message meNhắn mình
— say hello — chào nhéDrop a note — about a part-time role, a project, or just to say hi. Attach screenshots or sketches if it helps. Gửi mình vài dòng — về một việc part-time, một dự án, hay đơn giản chỉ để chào. Đính kèm ảnh hoặc bản vẽ nếu cần.
Drag & drop or tap to chooseKéo thả hoặc chạm để chọn ảnh
MAX 25 MBTỐI ĐA 25 MBMessage sentĐã gửi rồi nha
Thanks for reaching out — I'll get back to you soon.Cảm ơn đã ghé qua — mình sẽ rep sớm.