Che dấu lỗi bằng sự dư thừa

Một phần của tài liệu Đề cương Hệ Phân Tán (Có đáp án) (Trang 27 - 33)

7. Tính nhất quán và sử dụng bản sao

8.3.Che dấu lỗi bằng sự dư thừa

Nếu một hệ thống được coi là có khả năng chịu lỗi, nó phải có khả năng che giấu những lỗi xảy ta với các tiến trình khác. Kỹ thuật chính để che giấu lỗi là sử dụng sự dư thừa. Có 3 loại có thể thực hiện được là: dư thừa về thông tin (information redundancy), dư thừa về thời gian (time redundancy) và dư thừa về vật lý (physical redundancy).

• Dư thừa thơng tin: dùng một số bit dư thừa được thêm vào để cho phép phục hồi lại dữ liệu từ dữ liệu lỗi. Chẳng hạn Hamming code có thể được thêm vào dữ liệu được truyền đi để bù lại nhiễu trên đường truyền.

• Dư thừa thời gian (Time redundancy): một hành động được thực hiện, sau đó nếu cần thiết nó sẽ được thực hiện lại một lần nữa. Các giao dịch sử dụng phương pháp này. Nếu một giao dịch bị bỏ qua, nó có thể được thực hiện lại mà khơng có tổn hại gì. Dư thừa thời gian tỏ ra đặc biệt hữu ích khi lỗi là tạm thời hoặc khơng liên tục.

• Dư thừa vật lý (Physical redundancy): các tiến trình hoặc thiết bị dự phòng được thêm vào giúp cho hệ thống hồn thiện để chống lại thiếu sót hoặc hoạt động sai chức năng của một số thiết bị, có thể được thực hiện dựa theo phần cứng hoặc phần mềm. Chẳng hạn các tiến trình dự phịng có thể được thêm vào hệ thống để đề phòng trường hợp nếu có một số nhỏ trong số chúng gặp vấn đề, hệ thống vẫn có thể hoạt động chính xác. Nói cách khác, bằng cách sao chép các tiến trình, có thể đạt được khả năng chịu lỗi cao.

Ở hình vẽ trên, tín hiệu sẽ đi qua A,B,C theo thứ tự. Nếu một trong 3 thiết bị đó bị lỗi, kết quả cuối cùng có thể khơng chính xác.

Trong hình b, mỗi thiết bị được sao chép lại thành 3 bản. Tín hiệu lúc này sẽ khơng chỉ đi qua thiết bị A mà đi qua 3 thiết bị A1, A2, A3 giống hệt thiết bị A. Các tín hiệu ra sẽ được đưa và các bộ chọn (voter)V1, V2, V3. Đó là các mạch điện có 3 đầu vào và 1 đầu ra. Mỗi mạch so sánh này sẽ so sánh 3 tín hiệu A1, A2, A3 nếu 2 trong 3 output qua 3 thiết bị trên là giống nhau thì sẽ lấy tín hiệu đó, cón nếu cả 3 tín hiệu khác nhau thì đầu ra sẽ khơng xác định. Thiết kế như vậy được gọi là dư thừa module bậc ba TMR (Triple Modular Redundancy).

Giả sử rằng thiết bị Az nào đó bị lỗi, vẫn cịn 2 thiết bị khác hoạt động đúng và hệ thống vẫn là tin cậy. Về bản chất, việc Az bị lỗi là hồn tồn được che giấu, vì vậy tín hiệu vào cho B1, B2, B vẫn chính xác như trường hợp Az không hề bị lỗi.

Một điều nữa là tại sao tại mỗi module phải có tận 3 bộ chọn? Hiển nhiên là các bộ chọn này cũng là các thiết bị bình thường và cũng có khả năng xảy ra lỗi. Việc thiết kế 3 bộ chọn như vậy nhằm mục đích khi một thiết bị hỏng sẽ không ảnh hưởng đến sự hoạt động của hệ thống.

Mặc dù khơng phải mọi hệ phân tán có khả năng chịu lỗi đều sử dụng TMR nhưng kỹ thuật đó là rất phổ biến để cung cấp một cái nhìn rõ ràng về một hệ thống có khả năng chịu lỗi.

Phục hồi tiến trình

Ta sẽ tập trung vào cách thức tiến hành để có thể đạt được khả năng chịu lỗi trong hệ phân tán. Phần trên ta đưa ra cách thức ngăn chặn lỗi xảy ra, tiếp theo ta sẽ xem xét những vấn đề thiết kế chung của nhóm các tiến trình, và tìm hiểu thế nào là một nhóm có khả năng chịu lỗi và xem xét cách thức hoạt động khi một hoặc một vài tiến trình trong nhóm bị lỗi.

Thiết kế

Phương pháp chính để xây dựng một hệ thống tin cậy là tổ chức vài tiến trình giống hệt nhau vào một nhóm và cùng có khả năng nhận khi bản tin được gửi đến. Theo cách này, nếu một tiến trình trong nhóm lỗi, các tiến trình khác có thể thay thế và đưa ra kết quả đúng cho cả nhóm.

Nhóm các tiến trình có thể là động. Những nhóm mới có thể được tạo ra và các nhóm cũ có thể bị loại bỏ. Một tiến trình có thể tham gia hoặc ra khỏi một nhóm trong suốt q trình hoạt động của hệ thống. Một tiến trình có thể là thành viên của vài nhóm trong cùng một thời điểm. Do đó cần có những cơ chế để quản lý nhóm và quản lý các thành viên trong nhóm.

Một tiến trình có thể tham gia vào một nhóm trong nhiều nhóm mà nó có mặt và trong trường hợp có nhiều nhóm cùng u cầu thực hiện một cơng việc nào đó, nó sẽ được tự do lựa chọn.

• Nhóm phẳng: tất cả các tiến trình là ngang bằng nhau. Khơng có tiến trình chủ và mọi quyết định đều được thực hiện dựa theo tập thể.

• Nhóm phân cấp (Hierarchical Group): có một tiến trình đóng vài trị điều phối và tất cả các tiến trình khác cùng tn thủ. Trong mơ hình này, khi một yêu cầu cho

một cơng việc nào đó được đưa đến, dù là yêu cầu của client bên ngoài hay của các tiến trình trong nhóm đó đều được gửi đến ttt diều phối. Tiến trình điều phối sau đó quyết định tiến trình nào trong nhóm thích hợp nhất để thực hiện và sẽ chuyển đến nó.

Mỗi loại trong mơ hình trên đều có những ưu và nhược điểm của nó. Nhóm phẳng là cân đối, nếu một trong những tiến trình đó bị lỗi, cả nhóm chỉ đơn giản là bị thu hẹp lại, nhưng vẫn có thể tiếp tục hoạt động. Nhược điểm của tổ chức này là quá trình đưa ra quyết định khá phức tạp. Chẳng hạn để quyết định bất kỳ một điều gì, đều phải tiến hành lựa chọn ý kiến giữa tất cả thành viên trong nhóm, dẫn đến tăng thời gian trễ và tốn tài nguyên.

Kiến trúc phân tầng có những đặc điểm ngược lại. Mất đi tiến trình điều phối dẫn đến tồn bộ nhóm ngừng hoạt động nhưng khi tiến trình điều phối hoạt động nó có thể tự đưa ra quyết định mà không làm phiền đến các thành viên khác.

Nhân bản và che giấu lỗi

Nhóm các tiến trình là một phần trong giải pháp xây dựng hệ thống chịu lỗi. Nói cụ thể, có một nhóm các tiến trình giống hệt nhau cho phép chúng ta che giấu một hoặc nhiều tiến trình lỗi trong nhóm. Nói cách khác, chúng ta có thể sao chép các tiến trình và tổ chức chúng thành một nhóm nhằm thay thế một tiến trình đơn lẻ (dễ bị lỗi) bằng một nhóm (có khả năng chịu lỗi hơn). Có 2 cách để đạt được sự sao chép như vậy: giao thức

primary-based (primary-based protocols) hoặc các giao thức ghi bản sao (repilcated-write protocol).

Một vấn đề chính trong sử dụng nhóm các tiến trình để tăng tính chịu lỗi là cần có bao nhiêu bản sao của tiến trình thì đủ? Để đơn giản hóa, chúng ta chỉ quan tâm đến các hệ thống ghi bản sao (replicated-write system). Một hệ thống được gọi là chịu lỗi k (k-fault tolerance) nếu nó có thể hoạt động đúng với k tiến trình bị lỗi. Nếu có k tiến trình bị lỗi thì cần có k+1 tiến trình khác khơng bị lỗi để quá trình lựa chọn kết quả vẫn diễn ra chính xác.

Thoả thuận trong hệ thống gặp lỗi

Việc tổ chức các tiến trình giống nhau và cùng nhóm giúp tăng khả năng chịu lỗi. Nếu một client có thể đưa ra quyết định của nó theo cơ chế bỏ phiếu, nó vẫn có thể đưa ra quyết định đúng nếu k trong số 2k+1 tiến trình hoạt động sai (k+1 tiến trình cịn lại vẫn hoạt động chính xác). Nói chung một vấn đề khó khăn đặt ra là khi chúng ta yêu cầu một nhóm các tiến trình đưa ra một sự thống nhất, chẳng hạn như lựa chọn ra một tiến trình điều phối, thực hiện một giao dịch, phân chia cơng việc cho các tiến trình trong nhóm .... Nếu tất cả sự truyền thơng và các tiến trình là hồn hảo thì dễ dàng đạt được sự thống nhất như vậy, nhưng nếu chúng khơng hồn hảo thì sẽ nảy sinh những vấn đề khó khăn. Mục tiêu chung của thuật toán thoả thuận phân chia (distributed agreement algorithm) là có tất cả những tiến trình khơng lỗi đạt được sự đồng thuận trong một số vấn đề, và thực hiện sự đồng thuận ấy trong một số nhất định các bước. Trong thực tế, các giả thuyết khác nhau về hệ thống bên dưới (underlying system) yêu cầu các giải pháp khác nhau. Turek và Shasha (1992) phân thành những trường hợp sau:

• Đồng bộ hay khơng đồng bộ: hệ thống đồng bộ khi các tiến trình cùng hoạt động trong chế độ lock-step, có nghĩa là với hằng số c thì nếu bất kỳ tiến trình nào thực hiện c+1 bước thì các tiến trình khác cũng đã thực hiện ít nhất 1 bước. Hệ thống khơng thực hiện đồng bộ gọi là hệ khơng đồng bộ.

• Độ trễ về truyền thơng (Communication delay) là có giới hạn hay khơng? Độ trễ có giới hạn nếu và chỉ nếu chúng ta biết rằng mỗi bản tin được gửi đi với thời gian tối đa được xác định trước.

• Việc chuyển các bản tin là có trật tự hay khơng? Nói cách khác chúng ta phân biệt tình huống liệu các bản tin từ cùng một bên gửi có được nhận theo đúng thứ tự nó được gửi hay khơng, với tình huống khơng có cơ chế nào đảm bảo điều đó.

• Việc truyền các bản tin là đơn điểm (unicasting) hay đa điểm (multicasting). Với các điều kiện trên, việc đạt được sự đồng thuận giữa các tiến trình xảy ra như trong hình vẽ dưới đây. Trong tất cả các trường hợp khác, khơng có bất kỳ giải pháp nào. Hầu hết các hệ phân tán trong thực tế đều giả sử rằng các tiến trình hoạt động khơng đồng bộ, các bản tin được truyền đơn điểm (unicast), và độ trễ có giới hạn. Do đó, chúng ta phải truyển các bản tin theo đúng thứ tự, giống như trong TCP. (adsbygoogle = window.adsbygoogle || []).push({});

Phát hiện lỗi

Muốn che giấu lỗi, trước tiên chúng ta phải phát hiện được chúng. Phát hiện lỗi là một trong phần quan trọng của tính chịu lỗi, các thành viên khơng lỗi phải có khả năng xác định những thành viên cịn lại bị lỗi hay khơng. Có 2 phương pháp chính :

• Chủ động: tiến trình gửi bản tin dạng “cịn sống khơng ?” (“are you alive?”) tới mỗi thành viên khác

Phương pháp thụ động chỉ có ý nghĩa khi chắc chắn rằng có đầy đủ các kết nối giữa các tiến trình. Trong thực tế, thường sử dụng phương pháp chủ động.

Các lý thuyết về phát hiện lỗi đều sử dụng cơ chế time-out để kiểm tra xem liệu một tiến trình có bị lỗi khơng, nhưng phương pháp này sẽ đưa đến kết quả khơng chính xác trong hệ thống mạng khơng tin cậy.

Việc phát hiện lỗi cũng có thể thực hiện bằng cách trao đổi thông tin đều đặn với các tiến trình lân cận. Các tiến trình đều đặn thơng báo các dịch vụ mà nó đang cung cấp nên mỗi tiến trình sẽ biết về mỗi tiến trình khác và có thể xác định một tiến trình có bị lỗi hay khơng.

Một vấn đề quan trọng khác là cần phân biệt được giữa các lỗi thuộc về hệ thống mạng với lỗi của các tiến trình. Một cách để xử lý vấn đề này là khơng để một tiến trình đơn lẻ tự ý quyết định tiến trình lân cận nó có lỗi hay khơng. Thay vào đó, khi một nút phát hiện một khơng gửi tin được đến một nút lân cận, nó sẽ yêu cầu các nút lân cận khác xác định xem liệu chúng có thể gửi tin đến nút đó khơng, sau đó sẽ thơng báo kết quả đến nút này.

Một phần của tài liệu Đề cương Hệ Phân Tán (Có đáp án) (Trang 27 - 33)