Ủy thác 3 pha:

Một phần của tài liệu fault tolerance-làm rõ đối với web-based systems (Trang 30)

Một nhược điểm của ủy thác 2 pha là tại pha thứ nhất, máy chủ phải

nhận được phản hồi của tất cả các site con ( xem tình trạng của nó là sẵn sàng Commit hay Abort ) thì mới quyết định có thực hiện ủy thác hay ko ở pha thứ 2. Tuy nhiên trên thực tế có những trường hợp máy site gặp sự cố bất thường trước khi nó kịp gửi phản hồi cho máy chủ, trong TH này sẽ khiến toàn bộ hệ thống bị “down” do máy chủ không biết nên quyết định thế nào.

Ủy thác 3 pha khắc phục nhược điểm này bằng cách có thêm 1 bước đệm goi là PRECOMMIT. Trong quá trình đợi để nhận phản hồi từ các site con, chỉ cần có 1 site gửi lại VOTE_ABORT ngay lập tức máy chủ sẽ quyết định ABORT (hủy bỏ) quá trình ủy thác ( khác với 2 pha là phải đợi tất cả phản hồi đến rồi mới quyết định ).

Trường hợp các site lần lượt gửi về VOTE_COMMIT, máy chủ sẽ để hệ thống trạng thái PRECOMMIT. Và sau khi tất cả các site đều đã sẵn sàng thì GLOBAL_COMMIT mới được máy chủ gửi đi.

Ngoài ra các khâu khác đều như 2 pha .

8.6_ Recovery ( Sự phục hồi ):

Phục hồi lỗi ( recovery error ) là một trong những cách hiệu quả của việc giúp tăng khả năng chịu lỗi (fault tolerance ) của hệ thống phân tán. Có 2 dạng phục hồi lỗi chính :

Backward recovery : tư tưởng của nó là đưa trạng thái của hệ thống ở thời điểm hiện tại về trạng thái tại thời điểm trước khi lỗi xảy ra. Để là được điều đó, buộc ta cần thiết phải ghi lại trạng thái của hệ thống ở các thời điểm liên tục ( time to time ). Mỗi thời điểm lưu trữ lại đó người ta gọi là “checkpoint”.

Forward recovery: khi hê thống rơi vào trạng thái lỗi, thay vì đưa hệ thống trở lại trạng thái trước khi lỗi, cách này lại đưa hệ thống nhảy sang một trạng thái mới mà ở đó hệ thống lại hoạt động bt. Vấn đề chính trong phương pháp này là phải dự đoán trước được khi nào lỗi có thể xảy ra. Chỉ có vậy nó mới sẵn sàng chuyển hệ thống sang trạng thái mới.

Sự khác nhau giữa backward và forward chính là sự tin cậy trong truyền thông. Thông thường cách tốt nhất để phục hồi lỗi trong quá trình truyền thông là bảo bên gửi gửi lại những gói tin đã bị mất trong quá trình truyền ( bảo bằng cách chuyển về trạng thái trước lỗi, xem những gói nào bị mất, yêu cầu truyền lại )  chính là tư tưởng của backward  backward tin cậy hơn trong truyền thông.

Cách thứ 2 là sử dụng phương pháp erasure correction. Tư tưởng của nó là gói tin bị mất có thể được khôi phục lại dựa trên những gói tin khác. Như việc nó quy định bao nhiêu gói tin sau có thể phục hồi được gói tin trước, hệ thống cứ truyền cho đến khi thành công  chính là tư tưởng của forward.

Trong hệ phân tán thường áp dụng backward recovery. Nhược điểm của backward:

tạp.

- Với phương pháp backward đưa ra không có sự đảm bảo rằng sau khi trở lại trạng thái trước lỗi, lỗi lại không tiếp tục xảy ra 

dễ bị rơi vào tình trạng loop recovery.

- Không phải lúc nào cũng có những trạng thái trước khi lỗi để ta quay lại ( giống như đi rút tiền, máy gặp sự cố, ít có cơ hội quay lại trạng thái trước khi ấn nút rút để tiếp tục rút tiền).

1. Stable storage :

Để có thể khôi phục trạng thái trước lỗi của hệ thống, buộc phải lưu trữ những thông tin cần thiết cho sự khôi phục. Có 3 cách lưu trữ những thông tin này :

- Lưu trữ trong RAM ( nhưng bị xóa khi mất điện )

- Lưu trữ trong đĩa ( vẫn sống khi CPU lỗi nhưng mất khi khi đĩa hỏng)

- Sử dụng Stable storage.

Stable strorage :

- Được thực hiện như 2 đĩa thông thường. Mỗi khối trong đĩa 2 sẽ được copy giống hệt như khối ở đĩa 1. Khi một khối ở đĩa 1 được cập nhật thì nó cũng được cập nhật ở đĩa 2 ( sau khi đã cập nhật xong ở đĩa 1).

Hình a : 2 đĩa sao chép y nguyên nhau.

Hình b : trường hợp hệ thống gặp lỗi khi đĩa 1 đã được update còn đĩa 2 chưa được update. . Để tiến hành phục hồi, nó so sánh 2 đĩa với nhau từng khối một, thấy sự sai khác nó lại cập nhật để 2 cái giống nhau.

Hình c: trường hợp có những khối tự động lỗi. Khi đó sẽ có 1 checksum error được từ khối ổn định trước nó. Nếu lỗi được phát hiện, khối bị lỗi sẽ được khôi phuc lại theo đĩa còn lại.

Stable storage luôn đảm bảo tính tin cậy do nó được ghi đồng thời, sau đó được chek lại  ít khả năng có lỗi xảy ra.

Một phần của tài liệu fault tolerance-làm rõ đối với web-based systems (Trang 30)