Shopee Architecture series: scaling for flash sales — rate limiting, Redis, and distributed systems

Shopee Flash Sale Engine: Redis Lua & Overselling

Answer-first: Shopee prevents overselling during high-concurrency flash sales by combining local memory caching, Redis inventory sharding, and atomic Lua script decrements. This multi-tier architecture isolates hot keys in Redis memory shards and evaluates stock availability in sub-milliseconds without acquiring relational database locks. Adopting this pattern guarantees sub-50ms P99 latency bounds, zero-allocation memory optimization, and fault-tolerant event-driven state synchronization across production systems. Chapter 2: Flash Sale Engine - The Mystery Behind Redis and Hot Keys ← Series hub | ← Prev | Next → ...

5 tháng 5, 2026 · 9 phút · Lê Tuấn Anh
Chiến Lược Caching & Bệnh Đàn Voi Giẫm Đạp (Cache Stampede) — Singleflight, XFetch & Redis LFU

Chiến Lược Caching & Bệnh Đàn Voi Giẫm Đạp (Cache Stampede) — Singleflight, XFetch & Redis LFU

← Chương trước: Cân Bằng Tải L4/L7 & Giới Hạn Tốc Độ (Rate Limiting) — DSR, API Gateway & Token Bucket | Mục lục Series | Chương tiếp theo: Mở Rộng Cơ Sở Dữ Liệu & Tối Ưu Bể Kết Nối — Sharding, TiDB & PostgreSQL → Answer-first: Cache Stampede xảy ra khi hàng ngàn truy vấn đồng thời cùng đánh vào database khi cache hết hạn. Kỹ thuật Singleflight trong Go gom các request trùng lặp thành một, kết hợp thuật toán làm mới sớm XFetch và chính sách Redis LFU giúp triệt tiêu hoàn toàn điểm nghẽn này. ...

18 tháng 6, 2026 · 15 phút · Lê Tuấn Anh
Chương 2: 3 Điểm Yếu Của Caching (Penetration, Breakdown, Avalanche)

Go Cache: Penetration, Avalanche & Go Singleflight

← Chương trước: Chương 1 — Xử Lý C10M | Mục lục Series | Chương tiếp theo: Chương 3 — Distributed Rate Limiting → Answer-first: Sự khác biệt cốt lõi: Cache stampede (thundering herd) xảy ra khi 1 hot key duy nhất hết hạn khiến hàng ngàn request cùng dội xuống database. Cache avalanche (tuyết lở) xảy ra khi hàng loạt key hết hạn đồng thời hoặc cụm cache sập. Stampede cần Go singleflight gộp request; avalanche cần phân rải TTL jittering ngẫu nhiên. ...

9 tháng 6, 2026 · 6 phút · Lê Tuấn Anh
Chương 3: Distributed Rate Limiting Với Redis & Thuật Toán GCRA

Chương 3: Distributed Rate Limiting Với Redis & Thuật Toán GCRA

← Chương trước: Chương 2 — 3 Điểm Yếu Của Caching | Mục lục Series | Chương tiếp theo: Chương 4 — Transactional Outbox Pattern → Answer-first: Local rate limiters trên RAM cục bộ thất bại trong Microservices do tải bị chia đều qua nhiều nodes. Sử dụng trạng thái tập trung trên Redis với thuật toán GCRA (Generic Cell Rate Algorithm) thực thi qua các đoạn mã Atomic Lua scripts giúp kiểm soát lưu lượng chính xác tuyệt đối mà chỉ tốn đúng 1 key. ...

9 tháng 6, 2026 · 5 phút · Lê Tuấn Anh
Phần 2: Kiến Trúc Hiện Đại — Stack Công Nghệ AI Engineering 2026

Phần 2: Kiến Trúc Hiện Đại — Stack Công Nghệ AI Engineering 2026

← Chương trước: Phần 1: AI-First SDLC Paradigm Shift | Mục lục Series | Chương tiếp theo: Phần 3A: Cursor Rules & MCP Tooling → Answer-first: Stack công nghệ AI Engineering 2026 kết hợp LiteLLM AI Gateway, Redis Semantic Caching, Model Context Protocol (MCP 1.x) Control Plane và hạ tầng Local LLM (DeepSeek-R1, Ollama), giúp doanh nghiệp cắt giảm 70-85% chi phí API đám mây đồng thời bảo vệ 100% mã nguồn nội bộ. ...

14 tháng 5, 2026 · 9 phút · Lê Tuấn Anh
Khóa Phân Tán (Distributed Locks) — Toán Học Redlock, etcd Raft & Chống Chia Cắt Mạng

Khóa Phân Tán (Distributed Locks) — Toán Học Redlock, etcd Raft & Chống Chia Cắt Mạng

← Chương trước: Kiến Trúc Hướng Sự Kiện (Event-Driven Architecture) & Kafka — Worker Pool, Backpressure & Exactly-Once | Mục lục Series | Chương tiếp theo: Thiết Kế API Lũy Đẳng (Idempotent API) — Khóa Lũy Đẳng, Middleware SetNX & Mẫu Stripe → Answer-first: Khóa phân tán (Distributed Locks) bảo vệ tài nguyên chia sẻ qua thuật toán Redlock (Redis) với công thức MIN_VALIDITY trừ trôi đồng hồ, hoặc giao thức đồng thuận etcd Raft lease. Cơ chế Quorum (N/2 + 1) và fencing token chống chia cắt mạng (split-brain) và xung đột ghi đồng thời. ...

18 tháng 6, 2026 · 12 phút · Lê Tuấn Anh
Phần 6: Gom Nhóm Vị Trí Với Uber H3 & Caching Ngữ Nghĩa (Semantic Caching)

Phần 6: Gom Nhóm Vị Trí Với Uber H3 & Caching Ngữ Nghĩa (Semantic Caching)

← Chương trước: Phần 5: UI Trực Quan Hóa Lộ Trình Bằng Mapbox & Deck.gl | Mục lục Series | Chương tiếp theo: Phần 7: Kiểm Tra Chịu Tải & Tối Ưu Hiệu Năng Cho Production → Answer-first: Caching ngữ nghĩa (Semantic Caching) gom các điểm đón/trả lân cận vào cùng một ô lục giác H3 resolution 8-9 và lưu kết quả ma trận trên Redis, giúp đạt tỷ lệ trúng cache hơn 80% và giảm 4/5 tải tính toán cho cụm routing engine. ...

15 tháng 6, 2026 · 9 phút · Lê Tuấn Anh
Redis State vs Dapr Virtual Actors Architectural Showdown

Redis State vs. Dapr Virtual Actors: Đối Đầu Khóa & Bộ Nhớ AI Agent

← Chương trước: Phần 7: Modular Monolith vs. Microservices vs. SpinKube Wasm | Mục lục Series Redis State vs. Dapr Virtual Actors: Đối Đầu Khóa Phân Tán & Quản Lý Trạng Thái AI Agent Answer-first: Redis tối ưu truy xuất cache phẳng sub-millisecond (<1ms) nhưng Redlock chịu rủi ro clock drift và tranh chấp spinlock. Dapr Virtual Actors loại bỏ khóa phân tán bằng turn-based mailbox, tự động hydrate/dehydrate và placement ring nhất quán, tối ưu cho trạng thái AI Agent và quy trình dài hạn. ...

24 tháng 8, 2026 · 45 phút · Lê Tuấn Anh
Chương 7: Thiết Kế Idempotency APIs Dành Cho Hệ Thống Thanh Toán

Chương 7: Thiết Kế Idempotency APIs Dành Cho Hệ Thống Thanh Toán

← Chương trước: Chương 6 — API Gateway vs Service Mesh | Mục lục Series | Chương tiếp theo: Chương 8 — Distributed Locking: Redlock vs ZooKeeper → Answer-first: Tính Idempotency đảm bảo một thao tác API khi thực thi nhiều lần vẫn cho ra cùng một kết quả duy nhất. Trong các giao thức thanh toán HTTP POST, hệ thống bắt buộc Client đính kèm Idempotency-Key UUID, sử dụng Redis SET NX EX nguyên tử để quản lý 3 trạng thái: NEW, IN_FLIGHT và DONE. ...

9 tháng 6, 2026 · 6 phút · Lê Tuấn Anh
Chương 8: Distributed Locking Xử Lý Tranh Chấp Race Conditions:

Chương 8: Distributed Locking Xử Lý Tranh Chấp Race Conditions: Redlock Đấu Với ZooKeeper

← Chương trước: Chương 7 — Thiết Kế Idempotency APIs | Mục lục Series | Chương tiếp theo: Chương 9 — Database Sharding & Splitting → Answer-first: Khóa phân tán (Distributed Locking) bảo vệ tài nguyên chia sẻ trên nhiều servers. Redis Redlock tối ưu độ trễ qua thuật toán đa số Quorum trên N nodes độc lập nhưng nhạy cảm với Clock Drift, trong khi Apache ZooKeeper và etcd cung cấp tính nhất quán mạnh (Linearizability) với cơ chế Watch/Event-driven. ...

9 tháng 6, 2026 · 6 phút · Lê Tuấn Anh
Dapr State Store Consistency Trade-offs Explained

Dapr State Store: Đánh Đổi Tính Nhất Quán (Strong vs Eventual Consistency)

Answer-first: Dapr State Store cung cấp sự đánh đổi linh hoạt giữa Strong và Eventual Consistency thông qua trừu tượng hóa component. Kết hợp ETag cho Optimistic Concurrency Control (OCC) cùng Redis hoặc CockroachDB giúp lập trình viên cân bằng chính xác giữa độ trễ cực thấp và tính toàn vẹn giao dịch ACID phân tán. 🇬🇧 Read the English version of this article on tanhdev.com Giới thiệu về Dapr State Management Trong phát triển ứng dụng phân tán hiện đại, quản lý trạng thái (state management) luôn là một trong những thử thách phức tạp nhất. Khi chuyển dịch sang kiến trúc microservices, mỗi dịch vụ thường yêu cầu lưu trữ và truy vấn dữ liệu một cách độc lập. Điều này dẫn đến sự phân mảnh công nghệ khi một hệ thống có thể sử dụng đồng thời Redis để làm cache, PostgreSQL để lưu trữ dữ liệu giao dịch, và Cassandra cho dữ liệu phi cấu trúc lớn. Dapr (Distributed Application Runtime) ra đời nhằm giải quyết vấn đề này thông qua cơ chế trừu tượng hóa (abstraction). ...

17 tháng 7, 2026 · 18 phút · Lê Tuấn Anh
Đồng bộ tồn kho thời gian thực E-Commerce với Kafka và Redis

Đồng Bộ Tồn Kho Thời Gian Thực: Kafka, CDC & Redis cho E-commerce

Answer-first: Đồng bộ tồn kho thời gian thực áp dụng mô hình Speed & Truth: PostgreSQL làm chân lý dữ liệu (Truth) phát sự kiện qua Debezium CDC vào Apache Kafka (phân vùng theo SKU ID), còn Redis Cluster thực thi Speed Layer với Lua script trừ kho nguyên tử kèm idempotency key chống overselling và loại bỏ dual-write. 🇬🇧 Read the English version of this article on tanhdev.com 📦 Bài viết này thuộc chuyên đề kiến trúc e-commerce quy mô lớn. Xem trọn bộ tại Series Điều Phối Đơn Hàng & Tồn Kho Phân Tán. ...

8 tháng 6, 2026 · 11 phút · Lê Tuấn Anh
Kiến trúc thuật toán giá bão Surge Pricing Uber H3 Flink

Kiến Trúc Thuật Toán Surge Pricing & Không Gian Uber H3

Answer-first: Hệ số nhân giá bão (surge multiplier) là hệ số định giá động (1.5x, 2.0x) áp dụng vào cước cơ bản khi nhu cầu đặt xe vượt nguồn cung tài xế trong ô lục giác Uber H3. Thuật toán cân bằng thị trường bằng cách thu hút tài xế và điều tiết lượng đặt xe. 🇬🇧 Read the English version of this article on tanhdev.com 🚗 Xem trọn bộ chuyên đề tại Series Kiến Trúc Hệ Thống Gọi Xe Thời Gian Thực Uber & Grab. ...

1 tháng 6, 2026 · 13 phút · Lê Tuấn Anh
Kiến trúc Shopee Flash Sale: Chống tải đột biến và Redis Cache-Ahead

Kiến Trúc Shopee Flash Sale: Chống Tải Đột Biến & Redis Cache-Ahead

Answer-first: Kiến trúc Shopee Flash Sale chịu tải hàng triệu TPS nhờ phân tách luồng qua API Gateway, chặn tải 3 lớp (CDN Edge, Redis Token Bucket, Virtual Queue), tải trước kho (pre-heating) và trừ tồn kho nguyên tử bằng Redis Lua script sub-millisecond, sau đó ghi bất đồng bộ (Cache-Ahead) vào MySQL sharded & TiDB HTAP. 🇬🇧 Read the English version of this article on tanhdev.com Đúng 00:00:00 đêm 11.11, hàng triệu người dùng tại Đông Nam Á đồng loạt nhấn nút mua hàng trên một trang sản phẩm Flash Sale duy nhất (ví dụ: 1,000 suất sản phẩm giảm giá 99%). Trong 10 giây đầu tiên, một sản phẩm duy nhất có thể chịu hàng triệu lượt truy vấn đồng thời. Nếu không có kiến trúc vững chắc, hệ thống sẽ gặp các sự cố nghiêm trọng như bán quá số lượng kho (overselling), sập máy chủ, hoặc tắc nghẽn cơ sở dữ liệu (database deadlock). ...

1 tháng 6, 2026 · 13 phút · Lê Tuấn Anh