Các pattern liên kết với nhau như thế nào
Các pattern này không tồn tại đơn lẻ. Insight thú vị nhất là cách các hệ thống production kết hợp chúng lại với nhau.
Khám phá tương tác — click vào hệ thống bất kỳ để xem nó dùng pattern nào và vì sao:
Chuỗi kết hợp
Insight mạnh nhất không phải là pattern nào tồn tại — mà là cách chúng móc nối trong các hệ thống thực.
React Reconciler: Từ Flag tới Frame
Bitmask → flag mã hoá việc cần làm
↓
Dirty Flag → bỏ qua subtree không đổi
↓
Min Heap → chọn việc ưu tiên cao nhất trước
↓
Cooperative Scheduling → yield mỗi 5ms để tránh giật
↓
Diff / Patch → tính thay đổi cây tối thiểu
↓
Double Buffering → xây workInProgress tree, hoán đổi nguyên tử
↓
Batch Processing → flush mọi update state trong một commitPostgreSQL: Từ ghi tới khôi phục
Write-Ahead Log → mọi thay đổi được log trước khi áp dụng
↓
Checkpointing → snapshot định kỳ giới hạn replay khi crash
↓
B+ Tree → index tối ưu cho đĩa cho truy vấn khoảng
↓
MVCC → reader thấy snapshot nhất quán, không bao giờ chặn writer
↓
LRU Cache → buffer pool giữ page nóng trong bộ nhớ
↓
Bloom Filter → bỏ qua tra index với key không cóKafka Broker: Từ Producer tới Consumer
Batch Processing → gom thông điệp, fsync theo nhóm
↓
Write-Ahead Log → segment log append-only trên đĩa
↓
Ring Buffer → queue event I/O kích thước cố định
↓
Backpressure → consumer chậm tín hiệu cho producer điều tiết
↓
Consistent Hashing → gán partition qua các broker
↓
Tombstone → compaction log loại bỏ bản ghi lỗi thờiGo Runtime: Lập lịch + Bộ nhớ
Work Stealing → P rảnh lấy goroutine từ queue của P bận
↓
Semaphore → GOMAXPROCS giới hạn số thread OS đồng thời
↓
Object Pool → sync.Pool tái chế object hay cấp phát
↓
Free List → mspan theo dõi slot tự do trong size class
↓
Arena Allocator → stack frame cấp phát kiểu bump pointer
↓
Copy-on-Write → slice append chỉ copy khi vượt capacityBức tranh lớn hơn
Hiểu từng pattern riêng lẻ là hữu ích. Hiểu cách chúng kết hợp là điều phân biệt kỹ sư senior với junior.
Khi gặp vấn đề hiệu năng, bạn không nghĩ "tôi cần một bitmask." Bạn nghĩ "tôi cần theo dõi nhiều trạng thái với chi phí thấp (bitmask), bỏ qua việc không đổi (flag cho subtree), xử lý việc tăng dần (cooperative scheduling), ưu tiên việc gấp (min heap) và tránh cấp phát trên hot path (double buffering)."
Đó là cái mà team React đã xây. Đó là điều Redis, Go, Linux, PostgreSQL và Kafka đều thể hiện. Cùng những pattern đó kết hợp lại theo các cấu hình khác nhau để giải các bài toán khác nhau.
Tóm tắt: Pattern xuyên các hệ thống
| Pattern | React | Redis | Go Runtime | Linux | PostgreSQL | Kafka |
|---|---|---|---|---|---|---|
| Bitmask | ✅ | ✅ | ✅ | |||
| Min Heap | ✅ | ✅ | ✅ | |||
| Cooperative Scheduling | ✅ | ✅ | ||||
| Diff / Patch | ✅ | |||||
| Double Buffering | ✅ | |||||
| Batch Processing | ✅ | ✅ | ✅ | ✅ | ||
| Dirty Flag | ✅ | |||||
| Observer | ✅ | |||||
| Skip List | ✅ | |||||
| LRU Cache | ✅ | ✅ | ✅ | |||
| Trie | ✅ | ✅ | ||||
| Bloom Filter | ✅ | |||||
| Work Stealing | ✅ | |||||
| Free List | ✅ | ✅ | ||||
| Semaphore | ✅ | ✅ | ||||
| Object Pool | ✅ | |||||
| Flyweight | ✅ | |||||
| Rate Limiter | ✅ | ✅ | ||||
| Arena Allocator | ✅ | |||||
| State Machine | ✅ | |||||
| Ring Buffer | ✅ | ✅ | ||||
| Backpressure | ✅ | ✅ | ||||
| Vtable | ✅ | |||||
| Reference Counting | ✅ | |||||
| Copy-on-Write | ✅ | ✅ | ✅ | |||
| Tombstone | ✅ | |||||
| MVCC | ✅ | |||||
| Write-Ahead Log | ✅ | ✅ | ||||
| B+ Tree | ✅ | ✅ | ||||
| Checkpointing | ✅ | ✅ | ||||
| Event Loop | ✅ | ✅ | ✅ | |||
| Iterator | ✅ | ✅ | ||||
| Tagged Union | ✅ | ✅ | ||||
| Retry Backoff | ✅ | |||||
| Consistent Hashing | ✅ | ✅ |
Pattern neo trong các hệ thống khác
11 pattern còn lại sống chủ yếu trong các hệ thống ngoài sáu cái phía trên:
| Pattern | Hệ thống chính |
|---|---|
| LSM Tree | LevelDB, RocksDB — engine ghi cốt lõi cho các KV store hiện đại |
| Merge Iterator | LevelDB, RocksDB — gộp K-luồng trong compaction |
| Logical Clock | etcd (term/index Raft), LevelDB (sequence number) |
| Merkle Tree | Git (toàn vẹn object), ZFS (checksum block) |
| Actor Model | Erlang/OTP, Akka — concurrency truyền thông điệp |
| Circuit Breaker | Netflix Hystrix, gobreaker — phục hồi trong microservice |
| Middleware Chain | Interceptor gRPC-Go, mô hình hành tây Koa.js |
| Registry | TensorFlow (op registry), gRPC-Go (đăng ký service) |
| Dependency Graph | Cargo (phân giải build), pnpm (lập lịch workspace) |
| Visitor | LLVM (InstVisitor), compiler Vue (biến đổi AST) |
| Interning | rustc (interning symbol), CPython (cache string/int) |