Tiếng Việt

Khám phá chuyên sâu về giao dịch phân tán và giao thức cam kết hai pha (2PC). Tìm hiểu kiến trúc, ưu, nhược điểm và ứng dụng thực tế.

Giao dịch phân tán: Đi sâu vào cam kết hai pha (2PC)

Trong thế giới ngày càng kết nối với nhau, các ứng dụng thường cần tương tác với dữ liệu được lưu trữ trên nhiều hệ thống độc lập. Điều này dẫn đến khái niệm giao dịch phân tán, nơi một thao tác logic duy nhất yêu cầu các thay đổi được thực hiện trên nhiều cơ sở dữ liệu hoặc dịch vụ. Đảm bảo tính nhất quán của dữ liệu trong các tình huống như vậy là tối quan trọng, và một trong những giao thức nổi tiếng nhất để đạt được điều này là Cam kết hai pha (2PC).

Giao dịch phân tán là gì?

Giao dịch phân tán là một chuỗi các thao tác được thực hiện trên nhiều hệ thống, phân tán về mặt địa lý, được coi là một đơn vị nguyên tử duy nhất. Điều này có nghĩa là hoặc tất cả các thao tác trong giao dịch phải thành công (cam kết), hoặc không có thao tác nào thành công (hủy bỏ). Nguyên tắc "tất cả hoặc không có gì" này đảm bảo toàn vẹn dữ liệu trên toàn bộ hệ thống phân tán.

Hãy xem xét một kịch bản nơi một khách hàng ở Tokyo đặt vé máy bay từ Tokyo đến London trên một hệ thống hãng hàng không và đồng thời đặt phòng khách sạn ở London trên một hệ thống đặt phòng khách sạn khác. Hai thao tác này (đặt vé máy bay và đặt phòng khách sạn) lý tưởng nhất là nên được coi là một giao dịch duy nhất. Nếu việc đặt vé máy bay thành công nhưng việc đặt phòng khách sạn thất bại, hệ thống lý tưởng nhất nên hủy việc đặt vé máy bay để tránh để khách hàng gặp khó khăn ở London mà không có chỗ ở. Hành vi phối hợp này là bản chất của một giao dịch phân tán.

Giới thiệu giao thức Cam kết hai pha (2PC)

Giao thức Cam kết hai pha (2PC) là một thuật toán phân tán đảm bảo tính nguyên tử trên nhiều trình quản lý tài nguyên (ví dụ: cơ sở dữ liệu). Nó liên quan đến một điều phối viên trung tâm và nhiều người tham gia, mỗi người chịu trách nhiệm quản lý một tài nguyên cụ thể. Giao thức hoạt động trong hai giai đoạn riêng biệt:

Giai đoạn 1: Giai đoạn Chuẩn bị

Trong giai đoạn này, điều phối viên khởi tạo giao dịch và yêu cầu mỗi người tham gia chuẩn bị để cam kết hoặc hủy bỏ giao dịch. Các bước liên quan như sau:

  1. Điều phối viên gửi Yêu cầu Chuẩn bị: Điều phối viên gửi một thông báo "chuẩn bị" đến tất cả những người tham gia. Thông báo này báo hiệu rằng điều phối viên đã sẵn sàng để cam kết giao dịch và yêu cầu mỗi người tham gia sẵn sàng thực hiện điều đó.
  2. Người tham gia Chuẩn bị và Phản hồi: Mỗi người tham gia nhận yêu cầu chuẩn bị và thực hiện các hành động sau:
    • Nó thực hiện các bước cần thiết để đảm bảo rằng nó có thể cam kết hoặc hủy bỏ giao dịch (ví dụ: ghi nhật ký redo/undo).
    • Nó gửi một "phiếu bầu" trở lại cho điều phối viên, chỉ ra "sẵn sàng cam kết" (phiếu bầu "có") hoặc "không thể cam kết" (phiếu bầu "không"). Phiếu bầu "không" có thể là do hạn chế về tài nguyên, lỗi xác thực dữ liệu hoặc các lỗi khác.

Việc người tham gia đảm bảo rằng họ có thể cam kết hoặc hủy bỏ các thay đổi sau khi đã bỏ phiếu "có" là rất quan trọng. Điều này thường liên quan đến việc lưu trữ các thay đổi vào bộ nhớ ổn định (ví dụ: đĩa).

Giai đoạn 2: Giai đoạn Cam kết hoặc Hủy bỏ

Giai đoạn này được điều phối viên khởi xướng dựa trên các phiếu bầu nhận được từ những người tham gia trong giai đoạn chuẩn bị. Có hai kết quả có thể xảy ra:

Kết quả 1: Cam kết

Nếu điều phối viên nhận được phiếu bầu "có" từ tất cả những người tham gia, nó sẽ tiếp tục cam kết giao dịch.

  1. Điều phối viên gửi Yêu cầu Cam kết: Điều phối viên gửi một thông báo "cam kết" đến tất cả những người tham gia.
  2. Người tham gia Cam kết: Mỗi người tham gia nhận yêu cầu cam kết và áp dụng vĩnh viễn các thay đổi liên quan đến giao dịch vào tài nguyên của họ.
  3. Người tham gia Xác nhận: Mỗi người tham gia gửi một thông báo xác nhận trở lại cho điều phối viên để xác nhận rằng thao tác cam kết đã thành công.
  4. Điều phối viên Hoàn tất: Sau khi nhận được xác nhận từ tất cả những người tham gia, điều phối viên đánh dấu giao dịch là đã hoàn tất.

Kết quả 2: Hủy bỏ

Nếu điều phối viên nhận được dù chỉ một phiếu bầu "không" từ bất kỳ người tham gia nào, hoặc nếu nó hết thời gian chờ phản hồi từ một người tham gia, nó sẽ quyết định hủy bỏ giao dịch.

  1. Điều phối viên gửi Yêu cầu Hủy bỏ: Điều phối viên gửi một thông báo "hủy bỏ" đến tất cả những người tham gia.
  2. Người tham gia Hủy bỏ: Mỗi người tham gia nhận yêu cầu hủy bỏ và hoàn tác bất kỳ thay đổi nào đã được thực hiện để chuẩn bị cho giao dịch.
  3. Người tham gia Xác nhận: Mỗi người tham gia gửi một thông báo xác nhận trở lại cho điều phối viên để xác nhận rằng thao tác hủy bỏ đã thành công.
  4. Điều phối viên Hoàn tất: Sau khi nhận được xác nhận từ tất cả những người tham gia, điều phối viên đánh dấu giao dịch là đã hoàn tất.

Ví dụ minh họa: Xử lý đơn hàng Thương mại điện tử

Hãy xem xét một hệ thống thương mại điện tử nơi một đơn hàng liên quan đến việc cập nhật cơ sở dữ liệu tồn kho và xử lý thanh toán thông qua một cổng thanh toán riêng biệt. Đây là hai hệ thống riêng biệt cần tham gia vào một giao dịch phân tán.

  1. Giai đoạn Chuẩn bị:
    • Hệ thống thương mại điện tử (điều phối viên) gửi yêu cầu chuẩn bị đến cơ sở dữ liệu tồn kho và cổng thanh toán.
    • Cơ sở dữ liệu tồn kho kiểm tra xem các mặt hàng được yêu cầu có còn trong kho không và đặt chúng. Sau đó, nó bỏ phiếu "có" nếu thành công hoặc "không" nếu hết hàng.
    • Cổng thanh toán trước khi ủy quyền thanh toán. Sau đó, nó bỏ phiếu "có" nếu thành công hoặc "không" nếu việc ủy quyền thất bại (ví dụ: không đủ tiền).
  2. Giai đoạn Cam kết/Hủy bỏ:
    • Kịch bản Cam kết: Nếu cả cơ sở dữ liệu tồn kho và cổng thanh toán đều bỏ phiếu "có", điều phối viên sẽ gửi yêu cầu cam kết đến cả hai. Cơ sở dữ liệu tồn kho giảm vĩnh viễn số lượng hàng tồn kho, và cổng thanh toán xử lý khoản thanh toán.
    • Kịch bản Hủy bỏ: Nếu cơ sở dữ liệu tồn kho hoặc cổng thanh toán bỏ phiếu "không", điều phối viên sẽ gửi yêu cầu hủy bỏ đến cả hai. Cơ sở dữ liệu tồn kho giải phóng các mặt hàng đã đặt và cổng thanh toán hủy việc ủy quyền trước.

Ưu điểm của Cam kết hai pha

Nhược điểm của Cam kết hai pha

Các giải pháp thay thế cho Cam kết hai pha

Do những hạn chế của 2PC, một số phương pháp thay thế đã xuất hiện để quản lý giao dịch phân tán. Bao gồm các:

Ứng dụng thực tế của Cam kết hai pha

Mặc dù có những hạn chế, 2PC vẫn được sử dụng trong nhiều tình huống mà tính nhất quán mạnh mẽ là một yêu cầu quan trọng. Một số ví dụ bao gồm:

Triển khai Cam kết hai pha

Việc triển khai 2PC đòi hỏi sự xem xét cẩn thận các yếu tố khác nhau, bao gồm:

Các cân nhắc Toàn cầu đối với Giao dịch Phân tán

Khi thiết kế và triển khai các giao dịch phân tán trong môi trường toàn cầu, một số yếu tố bổ sung cần được xem xét:

Kết luận

Các giao dịch phân tán và giao thức Cam kết hai pha (2PC) là những khái niệm thiết yếu để xây dựng các hệ thống phân tán mạnh mẽ và nhất quán. Mặc dù 2PC cung cấp một giải pháp đơn giản và được áp dụng rộng rãi để đảm bảo tính nguyên tử, những hạn chế của nó, đặc biệt là về chặn và điểm lỗi duy nhất, đòi hỏi phải xem xét cẩn thận các phương pháp thay thế như Saga và tính nhất quán cuối cùng. Hiểu được sự đánh đổi giữa tính nhất quán mạnh mẽ, tính khả dụng và hiệu suất là rất quan trọng để lựa chọn phương pháp phù hợp cho nhu cầu ứng dụng cụ thể của bạn. Hơn nữa, khi hoạt động trong môi trường toàn cầu, các cân nhắc bổ sung về độ trễ mạng, múi giờ, cá nhân hóa dữ liệu và tuân thủ quy định phải được giải quyết để đảm bảo sự thành công của các giao dịch phân tán.