Articles
Ghi chú ngắn, không formal. Xếp theo chủ đề — trong mỗi nhóm theo thứ tự đọc gợi ý. Vào nhanh theo triệu chứng: Bạn đang gặp gì?
0 · Cửa vào
Theo triệu chứng — không cần biết tên pattern trước
1 · Concurrency & parallel
Deal / do · block · coroutine · event loop · workers vs line
- Concurrency vs parallel — dealing with vs doing
- Blocking vs non-blocking — chờ mà kẹt, hay chờ vẫn chạy việc khác
- Coroutine — tạm dừng khi chờ, chạy tiếp đúng chỗ
- Event loop — ai resume sau await, ai bị kẹt khi sync
- Cooperative vs preemptive — nhường chỗ vs bị OS cắt
- Thread pool / offload — CPU và sync I/O ra ngoài loop
- Data vs task parallelism — hai cách “doing”
- Parallel workers vs assembly line — làm trọn job hay chia stage
- Structured concurrency — task con sống chết theo scope cha
2 · Schedule & limit work
Pool · inventory · rate · bulkhead · shed · stampede
- Promise.all theo batch vs pool — job rảnh chạy luôn
- Single-flight — 10 caller, 1 work in-flight
- Unbounded in-flight — Promise queue ăn RAM im lặng
- In-flight = inventory — mỗi việc đang bay là một khoản nợ
- Backpressure — đừng chỉ tăng concurrency
- Rate limit vs pool — trần thời gian khác trần số bay
- Bulkhead — một dependency chết không kéo sập cả process
- Load shedding — đôi khi đúng là từ chối request
- Cache stampede — TTL về 0, mọi người bắn cùng lúc
3 · Gọi service — fail & recover
Retry · cancel · breaker · idempotency · hedge · pool DB · SLO
- Retry + backoff + jitter — đừng thundering herd
- Retry cái gì, bỏ cái gì — và khi retry tự đấm mình
- Timeout budget — deadline xuyên tầng
- Cancellation — hết giờ thì phải dừng việc, không chỉ báo lỗi
- Circuit breaker — fail-fast khi dependency chết
- Breaker failure modes — flap, half-open, fail-open / closed
- Idempotency — retry không nhân đôi side-effect
- Idempotency key — sai scope là retry vẫn nhân đôi
- Exactly-once thực dụng — at-least-once + idempotent handler
- Hedging — bắn thêm một request để lấy cái về trước
- TOCTOU trong async JS — check rồi act đã muộn
- Connection pool hết chỗ — chậm mà CPU vẫn rảnh
- Tracing — nhìn timeout budget trên chuỗi span
- SLO / error budget — retry có đốt reliability không
4 · Queue, job & messaging
Channel · recover · lag · order · saga · DLQ · truth (stale/wrong)
- BullMQ visualization — queue nhìn là hiểu
- Queue vs stream — message mất hay chỉ offset?
- Write vs read vs shared channel — fail ưu tiên gì?
- Stale · thiếu · sai — ba kiểu data hỏng (và “chưa chắc”)
- Order budget — order tuyệt đối đắt, order “đủ dùng” rẻ hơn
- Partition key & ordering — thứ tự trong một key
- Visibility timeout / lease — worker chết job không mất
- Competing consumers — N worker một queue
- Fan-out vs work queue — broadcast hay một người làm
- Consumer lag — offset trễ là tín hiệu sản phẩm
- Unblock — đừng đóng băng cả hàng vì một message hỏng
- Poison message & DLQ — job hỏng không kẹt mãi
- DLQ triage — cất rồi làm gì, redrive thế nào
- Ignore khi nào là đúng — bỏ message không phải lúc nào cũng sai
- Resend message — single group OK, shared thì cẩn
- Shared channel multi-tenant — recover đụng group khác
- Outbox & inbox — side-effect không “nửa vời”
- Dual-write vs outbox — ảo tưởng atomic qua hai hệ
- Saga / compensation — bù trừ side-effect dài hạn
- Async recovery playbook — chọn strategy theo channel
5 · Memory & runtime
RSS · heap · cgroup · GC
6 · Site notes
Không thuộc series systems