0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Định lý CAP trong hệ thống phân tán: Hiểu rõ hơn về 'Chọn hai'

Đăng vào 1 tháng trước

• 7 phút đọc

Định lý CAP trong hệ thống phân tán

Khi lần đầu tiên chúng ta gặp định lý CAP, nó thường được giới thiệu với một câu slogan hấp dẫn: "Tính nhất quán, Tính khả dụng, Tolerance phân vùng - chọn hai."

Đây là một cách dễ nhớ, nhưng như nhiều câu nói ngắn gọn khác, nó đơn giản hóa thực tế. Thực tế, CAP là về việc hiểu các sự đánh đổi trong hệ thống phân tán và đánh giá những sắc thái của nó sẽ giúp bạn trở thành một kỹ sư tốt hơn. Trong bài viết này, chúng ta sẽ đi sâu hơn vào phần giải thích bề mặt và xem cách nó áp dụng cho các hệ thống mà chúng ta làm việc, sử dụng ví dụ gần gũi: Máy ATM ngân hàng.

Ví dụ về Máy ATM

Mạng lưới ATM là một ví dụ thực tế về hệ thống phân tán. Ở đây:

  • Máy chủ trung tâm của ngân hàng đóng vai trò là nguồn thông tin xác thực.
  • Mỗi máy ATM là một nút trong hệ thống.

Cùng nhau, chúng tạo thành một hệ thống phân tán nơi số dư tài khoản của bạn cần phải nhất quán trên tất cả các máy ATM. Bây giờ, hãy tưởng tượng bạn đến một máy ATM để gửi hoặc rút tiền.

  • Trong trường hợp lý tưởng, máy ATM liên lạc thành công với máy chủ của ngân hàng.
  • Giao dịch của bạn diễn ra, và cập nhật được phản ánh trên tất cả các máy ATM trong mạng.

Đây là một kịch bản không có phân vùng — các nút (ATM) hoàn toàn kết nối với máy chủ, và cả tính nhất quán và tính khả dụng đều được duy trì một cách tự nhiên.

Định lý CAP là gì?

Định lý CAP là một nguyên tắc cơ bản trong các hệ thống phân tán cho chúng ta biết về các sự đánh đổi mà chúng ta phải thực hiện khi hệ thống của chúng ta bị phân vùng. Để hiểu đúng nó, chúng ta cần bắt đầu với một phần quan trọng nhất:

Phân vùng là gì?

Hãy tưởng tượng bạn có nhiều máy chủ cần giữ cho đồng bộ. Nếu một sự cố mạng ngăn cản một máy chủ liên lạc với máy chủ khác, hệ thống được cho là "phân vùng".

Điều này không phải là trường hợp hiếm hoi bởi trong các hệ thống phân tán quy mô lớn, phân vùng là không thể tránh khỏi do:

  • Sự cố mạng
  • Khoảng cách địa lý
  • Tăng độ trễ

Điều này có nghĩa là gì trong ngữ cảnh ATM?

Một phân vùng xảy ra khi một máy ATM mất kết nối với máy chủ trung tâm của ngân hàng.

  • Máy ATM không thể xác minh số dư tài khoản mới nhất của bạn trong thời gian thực.
  • Bất kỳ khoản gửi hoặc rút tiền nào thực hiện tại máy ATM này sẽ không ngay lập tức đồng bộ với phần còn lại của hệ thống.

Hiệu quả, máy ATM này bị "cắt đứt" khỏi phần còn lại của mạng lưới phân tán.

Vì phân vùng là không thể tránh khỏi, chúng ta cần hệ thống của mình có "Tolerance phân vùng". Vậy nên, sự đánh đổi thực tế luôn giữa Tính nhất quán (C) và Tính khả dụng (A).

Tolerance phân vùng có nghĩa là hệ thống tiếp tục hoạt động mặc dù bị phân vùng do sự cố mạng.

CP - Tính nhất quán và Tolerance phân vùng

Trong một hệ thống CP, lựa chọn thiết kế là đảm bảo Tính nhất quán và Tolerance phân vùng ngay cả khi điều đó có nghĩa là hy sinh Tính khả dụng trong thời gian phân vùng.

Ví dụ ATM cho CP

Hãy tưởng tượng bạn đến một máy ATM trong thời gian phân vùng:

Máy ATM cố gắng kết nối với máy chủ ngân hàng trung tâm, nhưng kết nối thất bại (phân vùng), máy ATM sẽ từ chối giao dịch của bạn. Ở đây, máy ATM cố tình hy sinh "Tính khả dụng" để bảo vệ "Tính nhất quán."

Tại sao? Bởi vì cho phép bạn rút tiền mà không xác minh tài khoản của bạn có thể gây ra các rủi ro như rút tiền gấp đôi hoặc số dư không hợp lệ.

AP - Tính khả dụng và Tolerance phân vùng

Trong một hệ thống AP, thiết kế đảm bảo Tính khả dụng và Tolerance phân vùng ngay cả khi điều đó có nghĩa là hy sinh Tính nhất quán trong thời gian phân vùng.

Ví dụ ATM cho AP

Hãy tưởng tượng bạn đến một máy ATM trong thời gian phân vùng:

Máy ATM cố gắng kết nối với máy chủ ngân hàng trung tâm nhưng kết nối thất bại (phân vùng). Thay vì từ chối giao dịch của bạn, máy ATM vẫn cho phép bạn rút tiền. Ở đây, máy ATM cố tình hy sinh "Tính nhất quán" để bảo vệ "Tính khả dụng".

Tại sao? Bởi vì hệ thống chọn cách tiếp tục hoạt động, ngay cả khi điều đó có nghĩa là giao dịch rút tiền của bạn có thể không ngay lập tức phản ánh vào số dư tài khoản của bạn, gây ra sự không nhất quán tạm thời như số dư âm.

Vượt qua cái nhìn đơn giản “Chọn hai”

Định lý CAP thường bị đơn giản hóa để đảm bảo chỉ hai trong ba thuộc tính: "Tính nhất quán, Tính khả dụng, và Tolerance phân vùng".

Các hệ thống thực tế không chỉ đơn giản nằm trong các loại CP hoặc AP. Chúng thường nằm ở đâu đó ở giữa, cung cấp "tính nhất quán một phần" hoặc "tính khả dụng một phần" tùy thuộc vào tình huống.

Tính nhất quán một phần là gì?

Tính nhất quán không phải lúc nào cũng có nghĩa là hoàn toàn cập nhật hoặc hoàn toàn sai. Nhiều hệ thống nhằm đạt được tính nhất quán cuối cùng, nơi dữ liệu có thể tạm thời không chính xác nhưng cuối cùng sẽ hội tụ trên các nút khi phân vùng được giải quyết.

Tính khả dụng một phần là gì?

Tính khả dụng không chỉ đơn thuần là về một hệ thống hoàn toàn trực tuyến hoặc hoàn toàn ngoại tuyến. Trong nhiều trường hợp, các hệ thống nhằm đạt được tính khả dụng một phần — chúng giữ một số tính năng hoạt động trong khi hạn chế những tính năng khác trong thời gian phân vùng. Điều này cho phép người dùng có thể sử dụng ít nhất một số chức năng thay vì phải đối mặt với sự cố hoàn toàn.

Quay lại ví dụ ATM của chúng ta:

Ngay cả khi máy ATM bị phân vùng, nó vẫn có thể cho phép gửi tiền. Sau khi gửi tiền, số dư của bạn có thể trông không chính xác trong một thời gian ngắn, nhưng nó cuối cùng sẽ được cập nhật khi kết nối được khôi phục. Trong trường hợp này, máy ATM là một phần khả dụng vì nó tiếp tục cung cấp một số chức năng. Đồng thời, nó cũng là một phần nhất quán vì nó cố tình hạn chế việc rút tiền để tránh các vấn đề như số dư âm.

Kết luận

Định lý CAP không phải là việc chọn hai thuộc tính và bỏ qua thuộc tính thứ ba. Nó là về việc hiểu cách các hệ thống phân tán hành xử dưới sự cố và thực hiện các sự đánh đổi có mục đích. Trong thực tế, các hệ thống hiếm khi cung cấp tính nhất quán hoặc khả dụng tuyệt đối. Thay vào đó, chúng hoạt động trong sự kết hợp của cả hai — chấp nhận sự không nhất quán tạm thời để bảo vệ khả dụng, trong khi hạn chế các hoạt động rủi ro trong thời gian phân vùng để duy trì an toàn.

Các phương pháp tốt nhất

  • Hiểu rõ các yêu cầu hệ thống: Đánh giá các yêu cầu về tính nhất quán và khả dụng cho ứng dụng của bạn.
  • Kiểm tra các kịch bản phân vùng: Thực hiện kiểm tra cho các tình huống phân vùng và chuẩn bị các giải pháp.
  • Theo dõi và giám sát: Sử dụng các công cụ giám sát để theo dõi trạng thái hệ thống và phát hiện sớm các sự cố.

Những cạm bẫy thường gặp

  • Bỏ qua tính nhất quán: Nhiều nhà phát triển không chú ý đến tính nhất quán có thể dẫn đến các vấn đề dữ liệu nghiêm trọng.
  • Thiếu kế hoạch phục hồi: Không chuẩn bị cho tình huống phân vùng có thể khiến hệ thống gặp khó khăn khi khôi phục.

Mẹo hiệu suất

  • Tối ưu hóa kết nối mạng: Đảm bảo rằng mạng giữa các nút là ổn định để giảm thiểu các phân vùng.
  • Sử dụng caching: Áp dụng các giải pháp caching để cải thiện tốc độ truy cập dữ liệu trong thời gian phân vùng.

Câu hỏi thường gặp

  1. Định lý CAP có thể áp dụng cho hệ thống nào?
    • CAP có thể áp dụng cho bất kỳ hệ thống phân tán nào, bao gồm các dịch vụ web, cơ sở dữ liệu phân tán, và mạng lưới máy chủ.
  2. Tôi nên chọn CP hay AP cho ứng dụng của mình?
    • Điều này phụ thuộc vào yêu cầu cụ thể của ứng dụng. Nếu tính nhất quán là quan trọng hơn, hãy chọn CP; nếu tính khả dụng là ưu tiên, hãy chọn AP.
  3. Có cách nào để đạt được cả ba yếu tố không?
    • Trong thực tế, rất khó để đạt được cả ba yếu tố đồng thời, nhưng có thể có các giải pháp kết hợp giúp cải thiện hiệu suất và độ tin cậy.
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào