Thỏa thuận phân tán và nghi thức thỏa thuận đơn giản

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 34 - 39)

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

2.2.2. Thỏa thuận phân tán và nghi thức thỏa thuận đơn giản

- Thỏa thuận phân tán (Distributed commit) là nghi thức giúp thực hiện truy cập tài nguyên (dữ liệu) và đảm bảo CSDL có đầy đủ các tính chất đã liệt kê ở trên.

- Thỏa thuận (commit): được hiểu là sự nhất trí của các bên tham gia thỏa thuận về thực hiện công việc V nào đó. Kết thúc của thỏa thuận thường là một trong hai khả năng loại trừ nhau sau đây:

 Khả năng thứ nhất: Các bên đều đồng ý thực hiện V.  Khả năng thứ hai: Các bên đều đồng ý không thực hiện V.

Luận văn tập trung tìm hiểu về nghi thức hỏa thuận cụ thể như sau.

Giả sử có n điểm trên mạng chứa cùng một bản sao của đơn vị dữ liệu A. Tại nút mạng i phát sinh một nhu cầu cập nhật đơn vị dữ liệu A. Do yêu cầu về nhất quán dữ liệu ta thấy A chỉ được cập nhật sau khi n điểm chứa bản sao của A cùng đồng ý cập nhật đơn vị dữ liệu A. Như vậy, chỉ cần một điểm không đồng ý cập nhật đơn vị dữ liệu A thì thao tác cập nhật sẽ được hủy bỏ.

Dưới đây là một số thí dụ về yêu cầu cập nhật.

A là tài khoản của khách hàng A trong mạng ngân hàng. Khi số dư của A lúc đầu là 20 triệu, được thay đổi, thí dụ như nhận thêm 5 triệu tiền lương tại một điểm giao dịch T của ngân hàng. Giả sử có 10 điểm giao dịch của ngân hàng cùng chứa bản sao A. Khi đó T không thể đơn phương cập nhật 20 triệu thành 25 triệu, vì như vậy 9 bản sao còn lại sẽ không chứa cùng số dư

của A. T phải phát sinh một yêu cầu cập nhật. Tại điểm giao dịch T sẽ gửi các yêu cầu cập nhật số dư của tài khoản A tới 10 điểm giao dịch chứa bản sao của A (kể cả chính nó) trong hệ thống của ngân hàng. Sau đó, nếu như cả 10 điểm giao dịch đều có phản hồi là đồng ý cập nhật số dư cho tài khoản A thì tài khoản A sẽ được cập nhật số dư từ 20 triệu lên 25 triệu. Nếu có một trong số các điểm giao dịch không đồng ý cập nhật thì việc cập nhật tài khoản của A sẽ bị hủy bỏ. Và lúc này số dư trong tài khoản của A vẫn giữ nguyên là 20 triệu.

Giả sử chuyến tàu hỏa hãng K được bán vé tại 10 điểm trong toàn quốc. Một khách hàng tại điểm bán vé số 3 mua một vé Toa 5, Ghế 17 (T5G17). Tại 10 điểm bán vé này đều có chứa bản sao về tình trạng bán vé của các toa tàu. Khi khách hàng tại điểm bán vé số 3 có yêu cầu mua vé T5G17 thì tại điểm này nó chưa thể bán vé ngay cho khách hàng, mà tại đây sẽ phát sinh một yêu cầu cập nhật tình trạng vé T5G17. Tại điểm bán vé số 3 gửi yêu cầu cập nhật tới các điểm bán vé của hãng chứa các bản sao về tình trạng bán vé. Nếu tất cả các điểm bán vé phản hồi lại là vé T5G17 chưa bán, thì khách hàng có thể mua được số ghế này. Nếu một trong các điểm bán vé không phản hồi lại mà điểm bán vé số 3 vẫn quyết định bán vé T5G17 cho khách hàng thì có khả năng vé này đã được bán rồi và khi đó sẽ xảy ra tình trạng 1 ghế mà được bán nhiều hơn 1 lần.

Bài toán được phát biểu tổng quát như sau.

Giả sử một bản sao dữ liệu A có tại có một giao dịch T khởi hoạt tại một vị trí và sinh ra những giao dịch con tại n vị trí khác nhau. Coi thành phần của T thực hiện tại vị trí gốc của nó là một giao dịch con của giao dịch toàn cục T; vì thế T đơn thuần chỉ chứa các giao dịch con, mỗi giao dịch thực hiện tại một vị trí khác nhau. Ta gọi giao dịch con thực hiện ở vị trí gốc là điều phối viên (coordinator), còn các giao dịch khác là thành viên (participant).

Yêu cầu đặt ra: A chỉ được cập nhật khi và chỉ khi n điểm cùng đồng ý cập nhật. Chỉ cần một điểm không đồng ý thì việc cập nhật sẽ bị hủy bỏ.

Để giải quyết yêu cầu đặt ra ở trên ta đi tìm hiểu về mô hình thỏa thuận đơn giản. Trong mô hình thỏa thuận đơn giản, khi mạng thông suốt, không có sự cố, thỏa thuận cập nhật diễn ra đơn giản như sau:

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

Chú thích:

Initial Trạng thái khởi đầu Commit Quyết định thỏa thuận

Vote-commit Phiếu thuận Abort Quyết định hủy bỏ

Vote-abort Phiếu chống Commited Thỏa thuận cập nhật

Willing to commit Chờ thỏa thuận Aborted Thỏa thuận không cập nhật

Trạng thái của các thành viên tham gia thỏa thuận đơn giản được thể hiện trong hình 2.6. Trong hình 2.6, ở trạng thái khởi đầu, thành viên Ti (thành viên tại nút mạng i) khi nhận được một thông báo đề nghị thỏa thuận cập nhật sẽ gửi phiếu thuận (Vote-commit) hoặc phiếu chống (Vote-abort) tới điều phối viên. Nếu phiếu chống được gửi đi, chắc chắn rằng thỏa thuận sẽ không được cập nhật. Lúc này có thể dừng giao dịch. Còn trong trường hợp, thành

viên Ti gửi phiếu thuận (Vote-commit) đến điều phối viên, thì nó cũng chưa biết chắc chắn rằng thỏa thuận có được cập nhật hay không. Bởi vì biết đâu có một thành viên nào khác đã gửi vote-abort tới điều phối viên và lúc này thành viên ở nút mạng i phải chờ quyết định từ điều phối viên.

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

Chú thích:

Trạng thái của điều phối viên khi tham gia thỏa thuận đơn giản được minh họa trong hình 2.7. Theo dõi hình 2.7, có thể phân tích thành hai trường hợp như sau:

Initial Trạng thái khởi đầu Commit Quyết định thỏa thuận

Vote-commit Phiếu thuận Abort Quyết định hủy bỏ

Vote-abort Phiếu chống Commited Thỏa thuận cập nhật

Must commit Chắc chắn thỏa thuận Aborted Thỏa thuận không cập nhật

Trường hợp 1: nếu điều phối viên nhận được một phiếu chống (vote-abort) từ một thành viên khác, nó biết chắc rằng việc thỏa thuận chắc chắn sẽ phải hủy bỏ (Must Abort), vì vậy điều phối viên sẽ gửi quyết định hủy bỏ (abort) đến tất cả các thành viên, vì thế thỏa thuận sẽ không được cập nhật.

Trường hợp 2: nếu điều phối viên nhận được phiếu thuận (vote-commit) từ tất cả các thành viên (bao gồm cả chính nó) thì nó biết rằng thỏa thuận cập nhật có thể thực hiện. Khi đó điều phối viên sẽ gửi quyết định thỏa thuận (commit) đến tất cả các thành viên. Giờ thì tất cả các thành viên đều biết rằng thỏa thuận cập nhật đã được đồng ý, vì thế tại vị trí của mỗi thành viên sẽ diễn ra quá trình cập nhật.

Các tình huống khó khăn có thể xảy ra đối với nghi thức thỏa thuận đơn giản.

(1) Điều phối viên chờ mãi không thấy hồi âm. Tình huống này có thể xảy ra khi một thành viên nào đó bị ngắt mạng, máy hỏng, nhiễm virus, chưa thể quyết định được vì đang bị vướng vào tác vụ khác.

(2) Bỏ phiếu thuận nhưng không nhận được thông báo cuối cùng …

Khi xảy ra sự cố như trên, thực hiện với nghi thức thỏa thuận đơn giản có thể dẫn tới tình trạng phong tỏa (blocking). Có nhiều tình huống gây ra tình trạng này, thí dụ như:

Giả sử một thành viên tại nút mạng i tham gia vào quá trình thỏa thuận cập nhật. Khi thành viên Ti này gửi phiếu thuận (vote-commit) đến cho điều phối viên và chuyển qua trạng thái chờ (Willing-to-commit), sau một thời gian dài thành viên tại nút i cũng không nhận được bất kì thông báo nào từ điều phối viên. Như vậy, Ti phải ở lại trong trạng thái này và giữ khóa trên bản sao của đơn vị dữ liệu A; nghĩa là Ti bị phong tỏa. Trong trường hợp Ti bị phong tỏa:

1. Nếu Ti quyết định thỏa thuận mà không có hướng dẫn của điều phối viên, rất có thể một thành viên khác đã quyết định hủy bỏ, nhưng vì điều phối viên gặp sự cố nên không thể thông báo cho Ti biết được. Nếu Ti thỏa thuận, một thành viên khác có thể đọc bản sao này của A là bản sao không được phép thay đổi; khi đó nó chính là dữ liệu rác.

2. Nếu Ti quyết định hủy bỏ không có hướng dẫn của điều phối viên, rất có thể điều phối viên đã nhận được phiếu thuận (vote- commit) từ tất cả các thành viên khác nhưng sau đó mạng bị treo, làm mất liên lạc giữa Ti và điều phối viên. Tuy nhiên một số thành viên khác không bị mất liên lạc với điều phối viên nên đã nhận được thông báo commit và ghi giá trị mới vào bản sao của chúng. Vì vậy những bản sao của A không còn giữ các giá trị giống nhau nữa.

Qua những phân tích ở trên ta thấy, khi sử dụng nghi thức thỏa thuận cập nhật đơn giản để quản lý các giao dịch sẽ có những nhược điểm như sau:

Nhược điểm: Nếu một thành viên nào đó gặp sự cố không thực hiện được việc gửi phiếu thuận hoặc phiếu chống tới điều phối viên cũng không thể báo cáo lại tiến trình cho điều phối viên. Việc này dẫn tới việc các bản sao của mục dữ liệu A có thể không đồng nhất sau khi cập nhật.

Để xử lý trường hợp mạng gặp sự cố và một thành viên Ti nào đó rơi vào trạng thái phong tỏa, người ta đã sử dụng một thuật toán biến thể của nghi thức đơn giản nêu trên, đó là nghi thức thỏa thuận hai pha, ba pha. Vậy nghi thức thỏa thuận hai pha, ba pha là gì ta cùng tìm hiểu phần bên dưới.

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 34 - 39)

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

(71 trang)