Ideal isn't real: Stress testing CockroachDB's resilience

Bài tóm tắt Cockroach Labs 2025 3. Quy mô lớn Độ khó: Trung bình

Cockroach Labs · 2025 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Bài của nhà cung cấp quảng bá benchmark do chính họ đặt ra và sản phẩm của họ; kết quả nằm trong dashboard tương tác, bài không nêu con số. Mọi nhận định dưới đây là theo Cockroach Labs.

Bối cảnh

  • Benchmark kiểu TPC-C chỉ đo tốc độ khi mọi thứ hoàn hảo; theo Cockroach Labs, doanh nghiệp trung bình gặp 86 sự cố mỗi năm (khảo sát 2025 của chính họ).
  • Họ đề xuất phương pháp "Performance under Adversity": một test liên tục chạy tải OLTP (TPC-C) và lồng bảy giai đoạn lỗi tăng dần, đo throughput, latency, tỉ lệ lỗi qua từng giai đoạn. Cụm thử 15 node, nhiều region, bản 25.1.

Thay đổi chính (các giai đoạn và cơ chế được nêu)

  • Baseline: chỉ có tải TPC-C (mỗi giao dịch khoảng 14 câu SQL; QPS ≈ tpmC × 14/60).
  • Áp lực nội bộ: backup, CDC, đổi schema online (quét hoặc ghi lại bảng), rolling upgrade (rút kết nối, chuyển lease, restart, node quay lại nhận snapshot; client kết nối lại dồn dập). Đối phó bằng admission control: ưu tiên traffic của client hơn việc nền, và tiết lưu truy cập CPU/IO trước khi tài nguyên quá tải.
  • Disk stall: trên EBS/SSD/PD có thể 20–30 lần mỗi giờ trong một cụm (theo bài); ghi WAL bị chặn gây timeout và "grey failure". Mỗi node có nhiều đĩa, WAL tự chuyển sang đĩa khác trong 100 ms.
  • Phân vùng mạng: ở 25.1 dùng epoch lease để chặn leaseholder cũ (phía thiểu số không gia hạn được lease, thao tác của leaseholder cũ bị từ chối); từ 25.2 dùng leader lease: leader Raft đồng thời giữ lease, một thẩm quyền duy nhất cho đọc và ghi.
  • Restart node ngẫu nhiên (3 node): chuyển lease; nếu quá 5 phút thì rebalance range; admission control ưu tiên tải chính hơn rebalance.
  • Mất zone, mất region: dời traffic sang zone/region còn lại; rebalance range có back-pressure để không làm đói query.

Vì sao

  • Theo Cockroach Labs, mọi giai đoạn chỉ có đỉnh latency ngắn và throughput gần như không đổi; CPU và đĩa ổn định suốt lần chạy. Bài không đưa số liệu để đối chiếu ngoài dashboard của chính họ.

Bài học cho SWE

  • Kiểm hệ dưới tải và lỗi cùng lúc: việc khôi phục (snapshot, rebalance, kết nối lại) tự nó là một nguồn tải lớn, có thể làm hỏng hệ hơn chính lỗi ban đầu.
  • Thao tác bảo trì thường ngày (backup, đổi schema, nâng cấp) là "lỗi" phải đưa vào kịch bản test, không chỉ máy chết và mạng đứt.
  • Việc nền cần được tiết lưu theo tài nguyên còn trống, không theo tốc độ cố định.

Liên quan