Nghi thức thỏa thuận hai pha (Two-phase commit – 2PC)

Một phần của tài liệu (LUẬN văn THẠC sĩ) ứng dụng máy trạng thái trong quản lý giao tác (Trang 39 - 43)

3. Bố cục của luận văn

2.2.3. Nghi thức thỏa thuận hai pha (Two-phase commit – 2PC)

Nghi thức thỏa thuận hai pha có thể gọi với nhiều tên khác nhau như: ủy thác hai pha, giao thức cam kết hai pha, cam kết hai giai đoạn...

Nghi thức thỏa thuận hai pha tương tự như sơ đồ bỏ phiếu nhất trí trong cuộc sống đời thường. Nó được chia thành hai pha: pha biểu quyết (voting

phase) và pha quyết định (decision phase). Trong trường hợp mạng không có sự cố, thì hoạt động của hai pha diễn ra như trong hình 2.8 và 2.9 như sau:

Pha biểu quyết: gồm hai bước thực hiện:

Bước 1: Điều phối viên gửi một bản tin thông báo yêu cầu biểu quyết tới tất cả các thành viên.

Bước 2: Sau khi nhận được bản tin yêu cầu biểu quyết của điều phối viên, nếu có thể thực hiện được thì thành viên đó sẽ gửi lại cho điều phối viên phiếu thuận chấp nhận biểu quyết (vote-commit), nếu không, sẽ gửi lại cho điều phối viên phiếu chống (vote-abort).

Pha quyết định: gồm hai bước thực hiện:

Bước 1: Điều phối viên tập hợp tất cả các biểu quyết của các thành viên. Nếu tất cả đều bỏ phiếu thuận (vote-commit) thì điều phối viên sẽ gửi một quyết định cập nhật (commit) tới tất cả các thành viên. Tuy nhiên, chỉ cần một thành viên gửi phiếu chống thì điều phối viên quyết định hủy giao dịch trên và sẽ gửi một quyết định hủy bỏ (abort) cho tất cả các thành viên trong nhóm.

Bước 2: Các thành viên sau khi đã gửi phiếu thuận tới điều phối viên sẽ đợi phản hồi từ điều phối viên. Nếu nó nhận về quyết định cập nhật (commit) thì thỏa thuận sẽ được cập nhật, còn nếu nhận được thông báo abort thì thỏa thuận sẽ không được cập nhật.

Còn trong trường hợp mạng gặp sự cố, khi một thành viên đánh dấu quá hạn (time-out) trong trạng thái chờ cập nhật (Willing-to-commit), nó chuyển sang trạng thái khôi phục (Recover), từ đó đưa ra thông báo giúp đỡ (help- me) để tìm kiếm sự giúp đỡ từ các thành viên khác.

Hình 2. 8. Sơ đồ trạng thái của thành viên trong thỏa thuận hai pha

Khi gửi thông báo help- me, thành viên này có thể nhận được trả lời của các thành viên khác như sau:

1. Một thành viên trong trạng thái Commited sẽ trả lời commit. Nó có thể thực hiện điều đó một cách an toàn bởi vì nó đã nhận được một thông báo commit của điều phối viên, vì thế biết rằng tất cả các thành viên khác đều đã biểu quyết thỏa thuận.

2. Một thành viên đang trong trạng thái Aborted có thể gửi thông báo abort bởi vì nó biết rằng giao dịch T phải hủy bỏ.

3. Một thành viên chưa biểu quyết (nghĩa là đang trong trạng thái Initial) có thể giải quyết vấn đề này bằng cách quyết định hủy bỏ,vì thế nó cũng trả lời abort và gửi phiếu chống (Vote- abort) đến điều phối viên.

4. Một thành viên ở trạng thái chờ thỏa thuận (Willing- to- commit) không có khả năng giải quyết vấn đề này, vì thế nó không trả lời.

Hoặc sau khi gửi thông báo help me mà không nhận được thông báo nào của các thành viên còn lại thì nó biết chắc rằng các thành viên khác bị mất liên lạc với nó, hoặc cũng gặp sự cố giống nó. Và thành viên này rơi vào trạng thái Blocked (bị phong tỏa)

Hình 2. 9. Sơ đồ trạng thái của điều phối viên trong thỏa thuận hai pha

Về phần điều phối viên sẽ đánh dấu quá hạn nếu sau khi gửi bản tin thông báo (begin-vote), nó không thấy một hay nhiều thành viên gửi biểu quyết sau khoảng thời gian đã ấn định. Như vậy, điều phối viên quyết định hủy bỏ và gửi thông báo abort đến tất cả các thành viên còn liên lạc được. Tuy nhiên, các thành viên bị mất liên lạc với điều phối viên vào lúc này sẽ không nhận được thông báo, chúng vẫn bị phong tỏa nếu chúng đã nhận được thông báo begin- vote, đã gửi vote-commit và không thể khôi phục thành công khi chúng quá hạn.

Trường hợp quá hạn cuối cùng có thể xảy ra nằm trong Hình 2.8. Ở đó thành viên đã sẵn sàng tiếp nhận thông báo, nhưng trong thời gian đó, nó không nhận được yêu cầu biểu quyết. Rất có thể điều phối viên đã gặp sự cố

hoặc bị mất liên lạc với thành viên này. Chính thành viên này sẽ quyết định hủy bỏ.

Tuy nhiên trong sơ đồ hình 2.9 không trình bày là nếu sau đó, thành viên này nhận được thông báo begin- vote từ điều phối viên, khi đó nó chỉ cần quyết định hủy bỏ (abort). Đó là điều thiếu sót cần bổ sung cho thỏa thuận hai pha. Một số điểm cần bổ sung như sau:

1. Một giao dịch có thể đã chuyển đến trạng thái Aborted hoặc Commited và vẫn được yêu cầu giúp đỡ qua thông báo help- me. Ở đây không có gì sai vì với giả định rằng một giao dịch bất hoạt sẽ trả lời những thông báo này. Trong thực tế, hệ thống sẽ dựa vào nhật ký để trả lời.

2. Ở trạng thái bị phong tỏa, giao dịch cần lập lại thông báo giúp đỡ (help- me) sau mỗi khoảng thời gian nào đó, với hy vọng bây giờ có thể một nút đã bị sự cố hoặc mất liên lạc nhận ra thông báo giúp đỡ này. Trong nhiều hệ thống, một nút sau khi khôi phục lại từ một sự cố sẽ thông báo sự hiện diện của nó bằng một cách nào đó, bởi vì nó cần biết điều gì xảy ra đối với những giao dịch có liên quan đến nó và những mục chúng đã thay đổi. Vì vậy một giao dịch con bị phong tỏa có thể gửi lại thông báo giúp đỡ (help- me) khi một nút có một giao dịch con thành viên bắt lại được giao dịch.

Một phần của tài liệu (LUẬN văn THẠC sĩ) ứng dụng máy trạng thái trong quản lý giao tác (Trang 39 - 43)

Tải bản đầy đủ (PDF)

(71 trang)