#distributed-systems #architecture #backend

Hiểu về Hệ thống Phân tán: Hướng dẫn Thực hành

Tìm hiểu các nguyên tắc cơ bản của hệ thống phân tán, bao gồm thuật toán đồng thuận, định lý CAP và các mẫu thiết kế thực tế.

2 phút đọc
Mục lục

Giới thiệu

Hệ thống phân tán có mặt ở khắp nơi. Mỗi khi bạn gửi tin nhắn, thanh toán hoặc xem video, bạn đang tương tác với các hệ thống phân tán. Nhưng điều gì khiến chúng trở nên thách thức?

Định lý CAP

Định lý CAP phát biểu rằng một hệ thống phân tán chỉ có thể đảm bảo hai trong ba đặc tính:

  • Consistency (Nhất quán): Mọi lần đọc đều nhận được dữ liệu mới nhất
  • Availability (Sẵn sàng): Mọi yêu cầu đều nhận được phản hồi
  • Partition Tolerance (Chịu phân vùng): Hệ thống tiếp tục hoạt động dù mạng bị phân vùng
// Ví dụ: Chọn nhất quán thay vì sẵn sàng
async function writeWithConsistency(key: string, value: string) {
  const ackCount = await Promise.all(
    replicas.map((r) => r.write(key, value))
  );

  const majority = Math.floor(replicas.length / 2) + 1;
  if (ackCount.filter(Boolean).length < majority) {
    throw new Error("Không đạt được đồng thuận");
  }
}

Thuật toán Đồng thuận

Raft

Raft là thuật toán đồng thuận được thiết kế để dễ hiểu. Nó tách biệt các yếu tố chính:

  1. Bầu chọn Leader - Một node được bầu làm leader
  2. Sao chép Log - Leader gửi entries cho followers
  3. An toàn - Nếu server đã áp dụng một log entry, không server nào khác áp dụng entry khác cho cùng index

Circuit Breaker Pattern

Ngăn chặn lỗi lan truyền bằng cách phát hiện khi service không khỏe:

class CircuitBreaker {
  private failures = 0;
  private state: "closed" | "open" | "half-open" = "closed";

  async call<T>(fn: () => Promise<T>): Promise<T> {
    if (this.state === "open") {
      throw new Error("Circuit đang mở");
    }

    try {
      const result = await fn();
      this.onSuccess();
      return result;
    } catch (error) {
      this.onFailure();
      throw error;
    }
  }
}

Kết luận

Xây dựng hệ thống phân tán về cơ bản là đánh đổi. Hiểu được các đánh đổi này — nhất quán vs. sẵn sàng, độ trễ vs. throughput — là điều phân biệt kỹ sư giỏi và kỹ sư xuất sắc.