Chaos Testing a Distributed System with Jepsen
Bài tóm tắt Appian 2019 3. Quy mô lớn Độ khó: Trung bình
Appian · 2019 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Phần 1 của series; phần 2: Appian 2019. Phần 3 (các lỗi tìm được và cách sửa) được hẹn nhưng không thấy trong sheet hay trên blog. Bài lấy từ Wayback.
Bối cảnh
- Data store của Appian (nền tảng low-code) chọn Consistency khi phải đánh đổi theo CAP và cam kết linearizability: ghi xong thì mọi lần đọc bắt đầu sau đó phải thấy giá trị đó hoặc mới hơn; cộng read-your-own-writes, monotonic reads/writes.
- Các bảo đảm này đã được test kỹ trên một node. Cấu hình HA đặt ra bài toán mới: ghi chỉ đi vào leader, replica chỉ phục vụ đọc và tự đuổi theo giao dịch theo nhịp riêng. Khi leader chết phải bầu leader mới nhanh dưới tải nặng; replica có thể chưa kịp có giao dịch mới nhất, nên read-your-own-writes phải được kiểm dưới nhiều kiểu lỗi.
Thay đổi chính
- Chọn Jepsen: sinh ngẫu nhiên thao tác đọc/ghi, ghi lại thời điểm và thời lượng từng thao tác, đồng thời gây lỗi (mạng, giết thành phần, tải ngẫu nhiên); sau đó dùng model Knossos để chứng minh lịch sử thao tác có linearizable hay không.
- Chạy Jepsen trong Docker để ai cũng chạy được bằng
docker-compose up, cả local lẫn CI: containerjepsen-controlđiều phối (setup, sinh dữ liệu, gây lỗi), 5 containerjepsen-nXchạy hệ cần test, container cho tác nhân gây lỗi (nemesis). - Đọc kết quả qua
jepsen.logvàtimeline.html: cột đầu là sự kiện của nemesis, các cột sau là từng worker. Xanh là thành công, đỏ là thất bại (trạng thái không đổi), cam là không xác định; exception không được xử lý bị Jepsen coi là không xác định vì nó không biết trạng thái đã đổi hay chưa.
Vì sao
- Theo Appian, chaos test bắt được race condition khó thấy khi phát triển; phần khó của HA không nằm ở logic một node mà ở failover và độ trễ của replica.
Bài học cho SWE
- Kiểm bảo đảm nhất quán bằng lịch sử thao tác cộng một model, không bằng assertion từng bước: lỗi chỉ lộ ra khi xét thứ tự các thao tác chồng nhau.
- Thao tác "không xác định" là trạng thái thật trong hệ phân tán; checker phải xét cả hai khả năng.
Liên quan
- Appian 2019 · TigerBeetle 2026 (Jepsen là kiểm từ ngoài vào; TigerBeetle bổ sung kiểm từ trong ra) · DoorDash 2022
- Kiểm thử độ tin cậy (chaos, fault injection, mô phỏng tất định)
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (4)