Thuật toán Ứng dụng — DP, String, Big Data & hơn nữa
~14 phútThuật toán phân tánAll-Access

Gossip protocol — lan truyền trạng thái

Mỗi node định kỳ trao đổi thông tin với vài node ngẫu nhiên; trạng thái lan toàn cụm theo cấp số nhân. Membership của Cassandra.

TL;DR: Gossip protocol mô phỏng cách dịch bệnh lây lan: mỗi giây mỗi node chọn ngẫu nhiên vài peer, trao đổi trạng thái (push/pull/push-pull). Sau O(log N) vòng, thông tin đã lan tới toàn bộ cụm N node, không cần server trung tâm, không có điểm chết duy nhất (single point of failure). Ưu điểm: mỗi node chỉ xử lý k message mỗi vòng dù cụm to bao nhiêu. Ứng dụng chính: cluster membership và failure detection (phát hiện node chết) bằng SWIM, giao thức ping gián tiếp, hoặc phi-accrual của Cassandra, bộ phát hiện chấm điểm nghi ngờ theo lịch sử heartbeat, cùng service discovery. Nhược điểm: eventual consistency (không phải strong), lượng message tăng theo N, khó debug khi tin sai đã lan rộng.

Hãy hình dung một cụm Cassandra vài trăm node cần biết node nào còn sống, node nào chết, mà không có master node nào chứa danh sách đó. Giải pháp: mỗi node định kỳ "buôn chuyện" với vài node ngẫu nhiên, chia sẻ danh sách thành viên. Sau vài giây, mọi node đều biết trạng thái toàn cụm. Đó là gossip protocol (giao thức tin đồn), lấy cảm hứng từ cách dịch bệnh lây trong cộng đồng.

1. Ý tưởng dịch tễ: tại sao "lây nhiễm" hoạt động

Dịch tễ học chia người thành ba nhóm; gossip mượn nguyên mô hình đó:

Dịch tễGossip
Susceptible (chưa nhiễm)Node chưa biết tin
Infected (đang lây)Node đã có tin mới, đang gossip với peer
Removed (hết lây)Node ngừng kể tin vì đã lan xong
Một lần tiếp xúcMột lần push, pull hoặc push-pull
Một đợt lâyMột vòng gossip (round), thường 1 giây

Sau mỗi vòng gossip (1 giây), mỗi node infected tiếp xúc k node ngẫu nhiên. Nếu một node susceptible tiếp xúc infected → trở thành infected. Số node biết tin tăng gấp đôi mỗi vòng (nếu k=1 và toàn bộ peer chưa biết) → hội tụ (mọi node cùng biết tin) sau O(log N) vòng.

Ví dụ số liệu: cụm 1024 node, k=1 gossip mỗi giây:

  • Lúc đầu: 1 node biết.
  • Sau vòng 1: 2 node; sau vòng 2: 4 node.
  • Sau vòng 9: ~512 node; sau vòng 10: ~1024 node, tức cả cụm.

Đó là con số lý tưởng, khi mọi lần chọn đều trúng một node chưa biết tin. Đến những vòng cuối, nhiều lần chọn rơi vào node đã biết, nên thực tế (mô phỏng 1024 node, k=1, chỉ push) cỡ 18 vòng mới phủ hết, vẫn cùng bậc O(log N). Kẻ bảng "vòng, số node biết" như trên cũng là một cách làm bảng trace; nếu cần ôn, xem Bảng trace.

So với broadcast trực tiếp (1 node gửi tới N-1 node): O(N) message từ 1 nguồn, tạo nút thắt cổ chai (bottleneck) tại node đó. Với gossip, tải chia đều: mỗi node chỉ xử lý k message/vòng.

Thử ngẫmvới k=1 và mỗi vòng số node biết tin nhân đôi, cụm 2^20 node (khoảng một triệu) cần mấy vòng ở mức lý tưởng, và cụm to gấp nghìn lần 1024 node chậm hơn bao nhiêu vòng?

All-Access Pass

Phần còn lại của bài dành cho All-Access Pass

Bạn vừa đọc phần xem trước. Hai bài đầu của mỗi khoá luôn đọc trọn miễn phí.

  • Đọc trọn mọi bài trong 6 khoá System Design và dữ liệu phân tán
  • AI Mentor trả lời theo toàn bộ nội dung bài
  • Trả một lần, không tự gia hạn, không tự trừ tiền

Trọn đời

1.690.000 ₫

Trả một lần, dùng mãi mãi

Gói năm

699.000 ₫

365 ngày · ≈ 58.000 ₫/tháng

Thanh toán bằng thẻ Visa/Master/JCB qua Polar. Xem bảng giá

Đã mua? Đăng nhập để đọc tiếp

Bài này có giúp bạn hiểu bản chất không?

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Thảo luận & góp ý

Hỏi đáp về bài này

Bài tiếp theo

Raft — đồng thuận leader & log replication