2.2.1. Bài toán tuyển chọn
Bài toán tuyển chọn là bài toán chọn một nút đứng đầu từ tập các ứng cử viên khi các nút ban đầu chỉ biết định danh của chính nó. Nút đứng đầu là một thành viên của N được tất cả các nút khác thừa nhận đứng riêng nhằm thực hiện một số tiến trình đặc biệt. Một giải thuật giải quy được bài ết toán tuyển chọn nếu nó thoả m ãn những iđ ều kiện sau:
• Trạng ái k th ết thúc gồm hai trạng thái: được tuyển chọn và không được tuyển chọn. Khi một tiến ình đã mtr ở ột ạng ái tr th thì c bác ước ính toán t sau nó v ẫn ở trong trạng thái ày n .
• Trong mỗi lần thực hiện chỉ duy nhất một tiến trình kết thúc ở trạng thái được tuyển chọn, các tiến trình còn lại ở trạng thái không được tuyển chọn.
Tầm quan trọng của bài toán tuyển chọn trong môi trường phân tán bắt nguồn từ các trường hợp khi phối hợp tập trung phải diễn ra do kỹ thuật phân tán giải quyết một bài toán cụ thể không có hoặc cách tiếp cận tập trung đem lại hiệu năng hấp dẫn hơn. Từ quan điểm điều khiển nhiều giải thuật phân tán thực sự là tập trung: có một tiến trình phối hợp thực hiện một số chức năng nhất định thay cho các tiến trình khác khi được yêu cầu (mô hình khách chủ).
Giải thuật được thực hiện với các tin phục vụ duy nhất cho mục đích gửi yêu cầu và nhận kết quả. Những giải thuật này có nhược điểm lớn là thất bại trong tiến trình phối hợp tập trung sẽ dẫn đến thất bại của toàn bộ giải thuật. Nhược điểm này được giải quyết khi các tiến trình còn lại thoả thuận với nhau lựa chọn một trong số chúng đảm nhận vai trò điều phối viên.
C ác giải thuật tuyển chọn đã được nghiên cứu kỹ khi G là vòng. Dù chỉ xét trên một dạng đồ thị đơn giản nghiên cứu lý thuyết vẫn cho thấy rất nhiều tính chất cơ bản của giải thuật tuyển chọn. Giải thuật đầu tiên được đưa ra là của Lelann (1977) với độ phức tạp thông tin O n( 2). Năm 1980 Hirschberg và Sinclair đưa ra giải thuật cho một vòng song hướng. Số nút trên vòng không
dụng vòng song hướng để giảm độ phức tạp thông tin. Tuy nhiên năm 1982, Dolev, Klawe và Rodeh tuyển chọn cho vòng đơn hướng với độ phức tạp thông tin là 2nlogn O n + ( ) qua đó gián tiếp bác bỏ giả thiết của Hirschberg và Sinclair. Cùng năm này Franklin đưa ra một giải thuật khác cho vòng song hướng với độ phức tạp thông tin là 2nlog + (n O n) nhỏ hơn kết quả trước đó của Hirschberg và Sinclair. Sau đó là cuộc chạy đua tìm kiếm các giải thuật nhằm giảm độ phức tạp xuống hơn nữa. Dolev giảm xuống còn 1.5nlog + n O n( ) so với 2nlog + (n O n) lúc đầu. Peterson lại đưa xuống 1.44nlog + ( ) n O n rồi lại Dolev đưa xuống 1.33nlog + ( ). Cuối cùng Burns chỉ ra rằng giới n O n hạn dưới cho nhân tử trước nlogn là 0.15 đạt được khi n = 2m cho cả vòng đơn hướng và song hướng.
Phần dưới đây chúng i lấy ột tô m ví d v ụ ề giải thuật tuyển chọn th ng ô qua giải thuật ChangRoberts (1979) biến đổi t ừ gi thu Lelann. Giải thuật ải ật hoạt động dựa trên nguyên lý “tiêu diệt có chọn lọc”. Vòng được giả định là vòng đơn hướng. Các tiến trình không biết kích thước của vòng (số nút trên vòng). Khởi đầu các nút gửi định danh của nó cho nút lân cận theo hướng của vòng bằng cách khởi động tự phát hoặc khởi động sau khi nhận được tin đầu tiên. Mỗi nút khi nhận được tin chứa một định danh của nút nào đó sẽ so sánh với định danh của chính mình. Nếu định danh tới lớn hơn định danh của nó nút sẽ bác bỏ khả năng nó là nút đứng đầu v định danh được tiếp tục truyền à đi trên vòng. Nút nh ận lại được định danh của nó (lúc n ày định danh đi đã được một vòng mà ôkh ng bị ti u diệt ê ) sẽ tuyên bố mình là nút đứng đầu. Giải thuật kết thúc và chỉ có một nút là nút đứng đầu.
Giải thuật ChangRoberts:
Biến:
initiated i = false leader i = false
Thông điệp nhận: tin i = nil Hành động nếu n i thuộc N0:
initiated i = true
gửi id i tới nút nj bên phải
Thông điệp nhận: tin i = id k
Hành động:
if not initiated i then
initiated i = true
gửi id i tới nút nj bên phải
if id i < id kthengửi id k tới nút n j bên phải else
if id i = id k then
leader i = true
gửi thông điệp finish tới nút n j bên phải
Thông điệp nhận: tin i = finish
Hành động:
if not leader i then
gửi thông điệp finish tới nút n j bên phải
Kết thúc
2.2.2. Bài toán đồng thuận
B ài toán đồng thuận là m b ột ài toán phối ợp ơ ản h c b yêu cầu ác tiến c trình có cùng một d ữ ệu li ra chung dựa ên một tậptr các d ữ li v có ệu ào thể xung khắc. Bài toán có ể được hth ình thức hoá như sau. Xét m h ột ệ thống trong đó m ỗi tiến trình pi có m ột biến trạng thái đặc biệt xi là d ữ liệu ào v và yi là d ữ liệu ra hay quyết định. Ban đầu xi nhậngi trá ị ừ t một t có ập thứ ự t c yòn i không xác định. Mọi quyết định ên ytr i ôkh ng thể đảo ngược. Một ời giải cho l b ài toán đồng thuận phải đảm ảo những đ ều kiện sau. b i
• Kết thúc: trong mỗi lần thực hiện yi đều có giá trị cuối với mỗi tiến trình không lỗi.
• Đồng thuận: trong mỗi lần thực hiện nếu yi và yj được gán giá trị thì yi = yj cho mọi tiến trình không lỗi pi và pj. Điều này có nghĩa mọi tiến trình không có lỗi không quyết định những giá trị xung khắc nhau.
• Xác thực: trong mỗi lần thực hiện với một giá trị v tuỳ ý nào đó nếu xi=v với mọi tiến trình pi và yi được quyết định trong một số tiến trình không có lỗi pi thì yi = v. Điều này có nghĩa nếu mọi tiến trình có cùng dữ liệu vào thì bất cứ giá trị quyết định nào cũng phải là dữ liệu vào này.
Khi một tiến trình là ất ạith b không có ràng buộc n ào được cho trước trên quyết định ủa tiến trình n . c ày
Dưới đây là m ột giải thuật đồng thuận đơn giản trong trường ợp ệ h h thống có ất b á th ại ph huỷ với độ tin cậy f. H ống ệ th được ả thiết có đồ ị gi th đầy đủ (m n ỗi út đều nối đến m nút khác). Mỗi tiến trình s có mọi ẽ ột tập các gi trá ị mà nó ết t t bi ồn ại trong hệ thống. Ban đầu ập ày t n chỉ chứa gi trị đầu á v c nóào ủa . Sau mỗi chu kỳ tiến trình ập nhật ập ày ằng ách ết ối ới c t n b c k n v
m t ọi ập nhận được ừ c t ác tiến trình kh ác và truyền ôth ng đại chúng nh ững gì m c ới ập nhật ào ập ày ới ọi tiến trình khác. Qu trình tiếp diễn trong f+1 v t n t m á chu kỳ. Sau đó m ỗi tiến trình ẽ ác định y l gi trị nhỏ nhất trong tập gi tr s x à á á ị c nó. ủa
Giải thuật Consensus: Biến:
Vi = { x i }
Thông điệp nhận: s ≥ 0 Hành động:
Gửi mọi v trong V mà n i chưa gửi tới mọi tiến trình Nhận các tập S j từ mọi n j
ThayV bằng tập V hợp với mọi tập S j
if s = f then y = min(V) Kết thúc
Bảng 2.3. Giải thuật Consensus
Chương 3: