1. Trang chủ >
  2. Công Nghệ Thông Tin >
  3. Cơ sở dữ liệu >

CHƯƠNG I: KHÁI NIỆM VÀ HÌNH THỨC HÓA SÓNG ĐỆ QUY PHÂN TÁN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.44 MB, 78 trang )


 

xét đệ quy phân tán được thực thi ở xa là được thực hiện bởi một bộ xử lý ở xa bằng sử

dụng một RPC.

Điểm thú vị nhất của lập trình đệ quy phân tán là phong cách tự nhiên, nó đưa ra

các thuật toán phân tán. Kiểu lập trình đệ quy phân tán không hạn chế số lượng các

máy tính đơn lẻ phân tán. Sự giải quyết vấn đề phân tán sử dụng sóng tính toán lan

truyền hoặc khái niệm phân tán lặp thể hiện trong giải pháp phân tán đệ quy cùng mới

các tin nhắn phức tạp.

Các bài toán đòi hỏi khối lượng tính toán lớn được giải quyết trên các hệ thống tính

toán song song. Các hệ thống này có thể là các máy tính song song siêu máy tính với

phần mềm và phần cứng đồng nhất, chuyên dụng, cũng có thể là các máy tính không

đồng nhất kết nối với nhau thông qua một mạng truyền thông. Trên các máy tính song

song, việc phân tải tính toán được thực hiện dựa trên giả thiết là topo mạng và số

lượng bộ vi xử lý đều đã được biết trước khi thực hiện chương trình. Trên hệ thống các

máy tính không đồng nhất, những thông tin này không có sẵn, chương trình song song

phải tự tìm kiếm các thông tin và phân phối tải tính toán theo các thông tin thu được.

Trong các trường hợp như vậy, cần một cơ chế tường minh hoặc ẩn để thu thập các

thông tin về tình trạng của các bộ vi xử lý, điều khiển việc phân phối các công việc

cho các bộ vi xử lý. Đồng thời, khi các thông số của hệ thống thay đổi, cũng cần có cơ

chế đảm bảo việc phân phối công việc phù hợp với sự thay đổi đã xảy ra. Thông

thường, việc này được thực hiện bằng các hệ thống hỗ trợ lập trình phân tán.

Tuy nhiên, phân phối công việc ở mức thấp có nhược điểm là không tận dụng được

các đặc điểm của bản thân thuật toán để thực hiện có hiệu quả trên cấu hình mạng. Để

giải quyết nhược điểm này, cần có những cấu trúc bậc cao cho phép chương trình có

thể thu thập các thông tin về các bộ vi xử lý và điều khiển (ở mức cao) quá trình phân

phối công việc. Cơ chế sóng phân tán cho phép thu thập các thông tin về hệ thống.

Trong lập trình tuần tự, lời gọi thủ tục cho phép phân chia công việc thành các công

việc nhỏ hơn để thực hiện. Việc sử dụng cơ chế lời gọi thủ tục cho phép xây dựng các

thuật toán rõ ràng, đơn giản, mạnh, nhưng lại làm giảm hiệu năng của thuật toán do sử

dụng ngăn xếp hệ thống để lưu trữ các thông tin trung gian. Các giải thuật phân tán đệ

qui thừa kế được khả năng biểu diễn, tính đơn giản, rõ ràng của các giải thuật đệ qui

tuần tự và tránh được việc sử dụng ngăn xếp nên không ảnh hưởng đến hiệu năng của

giải thuật. Các giải thuật phân tán đệ qui sử dụng cấu trúc lời gọi thủ tục từ xa (Remote

Procedure Call - RPC) để thực hiện việc gọi các thủ tục trên các bộ vi xử lý khác nhau.



Trang 10 



 

Việc kết hợp cấu trúc lời gọi thủ tục từ xa với cơ chế sóng phân tán cho phép xây dựng

các giải thuật phân tán đệ qui rõ ràng, đơn giản, cho phép thu thập thông tin của hệ

thống và điều khiển quá trình phân tán công việc trong hệ thống.

I. KHÁI NIỆM SÓNG ĐỆ QUY

Phần này sẽ đưa ra khái niệm sóng đệ quy, đây là một phương pháp lập trình để viết

những thuật toán phân tán. Cũng chú ý là thuật toán này được dùng để phát triển cho

các máy tính có kiến trúc bộ nhớ kiểu MIMD trong họ các hệ thống phân tán.

Một kỹ thuật cho việc thiết kế thuật toán phân tán là sóng đệ quy liên quan đến một

khái niệm tính toán khuếch tán (diffusing computation). Một sóng quảng bá thông tin

đến tất cả các địa điểm trong mạng, sau đó thu thập thông tin và chuyển ngược về nơi

đã phát đi thông tin quảng bá. Tuy nhiên đường thông tin về không nhất thiết phải

giống như đường thông tin quảng bá.



d



d



b



a



e



c



b



f



h



g



a



f



e



c



h



g



Hình 1: Pha đi và pha về trong sóng đệ quy phân tán

Trong hình, khi một sóng tới node h, sóng sẽ ngược lại nơi xuất phát. Để hiểu về khái

niệm sóng, chúng ta sẽ đi theo 3 cách nhìn:

• Cái nhìn về tổng quan về lịch sử khái niệm sóng đệ quy

• Một công cụ đồng bộ hóa.

• Cuối cùng là một định nghĩa chính thức của thuật toán sóng.



Trang 11 



 

1. Lịch sử phát triển:

Thuật toán sóng đầu tiên, vào năm 1982 Chang đã đưa ra trong một bài báo, một mô tả

thuật toán phân tán Echo. Bài báo này đã mô tả nguyên lý tương tự như sóng nhưng

thuật ngữ sóng chưa được đề cập đến. Mô tả thuật toán tiếng vọng được tạo nên bởi

các nguyên lý:

• Hoạt động cơ bản của thuật toán tiếng vọng là gửi đi các tin nhắn từ node

này đến node khác trong một mạng.

• Để đi qua hết mạng, có hai giai đoạn: một giai đoạn được tạo ra do các

khám phá (explorer), một giai đoạn dội lại được sinh ra bởi tiếng vang

(echo).

• Khi một sóng duyệt đến node đầu tiên, node tiếp theo sẽ phát đi các node

khác ngoại trừ node mà đã gửi tin nhắn khám phá đi (node này được gọi là

node hàng xóm đầu tiên). Một khám phá truyền đi các tiếng vang một cách

có hệ thống khi gặp một node đã đến bởi một khám phá khác.

• Khi đến đồng thời một node từ các khám phá khác nhau, node đó sẽ chọn

khám phá đầu tiền, các khám phá khác coi như là các tiếng vọng.

• Một node có thể truyền đi tiếng vọng đến hàng xóm đầu tiên chỉ khi nó nhận

được tiếng vọng của tất cả khám phá nó gửi đi.

• Tất cả khám phá và tiếng vọng mang theo thông tin về các node mà chúng

viếng thăm.

Thuật toán tiếng vọng hoạt động một cách song song và không đồng bộ sử dụng các

tin nhắn mang thông tin. Chúng có thể bắt đầu hoặc kết thúc trong một hoặc nhiều

node, các node phải hợp tác, nhất quán và khởi tạo các phần độc lập tham gia vào thuật

toán. Với dạng thuật toán này, Chang đã mang tới một kỹ thuật mới trong tính toán

phân tán là tính toán dạng sóng. Sau đó Raynal và Helary đã thể hiện thuật toán sóng

đầu tiên như một công cụ đồng bộ bằng cách đưa ra một định nghĩa chính thức cho

sóng.

2. Sóng như một công cụ đồng bộ hóa:

Raynal và Helary đã thể hiện một thuật toán để giải quyết vấn đề về graph, nó bao

gồm việc xây dựng một cây bao phủ cho mạng các bộ xử lý. Cây phải được xây dựng

với khoảng cách giữa các node n và node gốc trong mạng là giống nhau. Kết thúc quá

trình xử lý, bất kỳ process nào cũng biết kiến trúc cây mới và khoảng cách với node

gốc, ID của người tiền nhiệm và người kế thừa.

Node gốc là node khởi tạo, nó sẽ gửi đến mỗi láng giềng một tin nhắn. Sau một lúc,

nó nhận lại các tin nhắn ngược lại. Một quá trình tượng tự lại tiếp tục, sự gia tăng số

Trang 12 



 

lần gửi được thể hiện như một làn sóng. Mỗi thông điệp sẽ mang thông tin cần thiết

cho bất kỳ process để nhận diện được node tiền nhiệm và node kế thừa. Trong thực tế,

khi nó quay trở lại với 3 loại cờ được thiết lập: đã được đánh dấu, tiếp tục hoặc đã

hoàn thành. Phụ thuộc vào giá trị cờ từ một tiến trình x, tiến trình y có thể xóa nó đi

khỏi danh sách node kế thừa hoặc thêm nó vào danh sách node tiền nhiệm. Thuật toán

kết thúc khi node gốc nhận được cờ đã hoàn thành của các node kế thừa.

Khái niệm sóng như trình bày của thuật toán cho thây hai loại đồng bộ hóa: Đồng

bộ hóa địa phương: một tiến trình phải chờ cho đến khi nhận được tin nhắn lại của

những node hàng xóm. Đồng bộ hóa tổng thể: Quá trình khởi tạo của node gốc không

thể bắt đầu một vòng mới nếu nó không nhận được tin nhắn của tất cả các node kế

nhiệm.

II. Công cụ thực hiện sóng đệ quy phân tán:

Trước khi đến khái niệm sóng đệ quy thì ta phải xem khái niệm thủ tục, trong quá trình

thực thi thủ tục này gọi n các thực thi của nó ở xa một cách đồng thời. Từ đây nó thực

hiện một sóng đệ quy dẫn đầy một cây như sau:

• Gốc cây là nơi đầu tiên gọi thủ tục.

• Gốc và các lá liên quan đến khối thủ tục chờ tất cả các lời gọi đệ quy song song

dừng.

• Lá liên quan đến thực thi hiện tại của thủ tục hoặc liên quan đến sự dừng thực

thi không có lời gọi đệ quy.

Một thủ tục sóng đệ quy thường được gắn với một cấu trúc dữ liệu. Cấu trúc dữ liệu

bao gồm nhận diện tiến trình hiện tại, một tập các nhận diện các tiến trình trên các

node kế cận… Chúng ta giả sử tất cả các giao tiếp và đồng bộ giữa các tiến trình trên

các node đã được giải quyết bởi kiến trúc lời gọi thủ tục từ xa RPC (chuyển giao điều

khiển và các tham số đầu vào) và thủ tục thoát (trở về lời gọi thủ tục liên quan với

chuyển giao tham số đầu ra), không có dữ liệu bổ sung hoặc tin nhắn được truyền giữa

các thực thi ở xa của thủ tục trên các bộ xử lý khác nhau.

Để có thể thực hiện được các giải thuật sóng đệ quy, chúng ta cần có một số công cụ

được sử dụng để biểu diễn. Công cụ này bao gồm câu lệnh par để thực hiện gọi thủ tục

trên nhiều các tiến trình và cách thức gọi các tiến trình trên các bộ xử lý khác từ bộ xử

lý hiện tại.

Chúng ta xem xét n sự thực thi từ xa song song của một thủ tục, đầu tiên chúng ta cần

đưa ra một cấu trúc điều khiển chương trình cho thực thi đồng thời của n nhiệm vụ trên

cùng một bộ xử lý, chúng ta sử dụng lệnh par



Trang 13 



 

par







in







do



Instruction block;

enddo;



Với mỗi tập giá trị tham số trong miền khối lệnh được định nghĩa trong câu

lệnh par sẽ được thực thi trong các tiến trình khác nhau trong các node trên miền. Câu

lệnh này kết thúc khi tất cả các luồng trên các tiến trình từ xa kết thúc và lệnh tiếp

theo sau lệnh par sẽ được thực hiện tiếp theo.

Khi thực hiện lệnh par chúng ta cần biết vị trí các node nơi tiến trình được thực hiện,

hay nói các khác là biết thông tin về các tiến trình khác để thực hiện, do vậy cần định

nghĩa ID cho các tiến trình mà mỗi thủ tục thực thi từ xa, chúng ta xem xét cấu trúc

thực hiện lời gọi thủ tục ở xa của một thủ tục (tên là ) trên một tiến trình

từ xa (tiến trình có ID là proc_id):

() on



Một tiến trình sẽ được gán cho một giá trị ID để nhận biết và các giá trị ID này tạo

thành một miền định nghĩa các tiến trình.

Việc thực thi của sóng đệ quy được xây dựng một mô hình cây của các tiến trình đang

hoạt động trong mạng và quan tâm đến quan hệ giữa tiến trình gọi và tiến trình được

gọi, theo ngôn ngữ thông dụng thì là quan hệ cha con, ở đây node gốc của cây chính là

khởi đầu của sự tính toán.

Với hai cấu trúc ở trên chúng ta có thể biểu diễn các lời gọi phân tán đệ quy như trong

cấu trúc sóng đệ quy dưới đây.

type processor_identifier is …;





kiểu định nghĩa cho một tên bộ xử



procedure recursive_wave () is



i: processor_identifier;

processor_group : setof processor_identifier;

begin

--Khối lệnh A tính toán tuần tự



--Tiếp theo là lệnh điều kiện if then else thực hiện dừng sóng

--đệ quy khi các điều kiện



Trang 14 



 

--thỏa mãn

if <điều_kiện> then



--Lệnh par sau đó cho phép thực thi đồng thời trên mỗi

-- bộ xử lý của một nhóm

-- lời gọi đệ quy của thủ tục hiện tại

par i in processor_group do

;

--f() thể hiện toán tử thực hiện trên các

--tham số bởi phần

--đầu của thủ tục

recursive_wave (f) on i;

;

enddo;

;

endif;

;

end recursive_wave;



III. Các dạng sóng đệ quy phân tán

1. Sóng đệ quy tuần tự:

Sóng đệ quy tuần tự là loại sóng đơn giản nhất sử dụng một lời gọi đệ quy trong một

hệ thống phân tán là gọi cùng một thủ tục trên chỉ một tiến trình trên một bộ xử lý

khác từ xa. Cây thực thi được giản lược thành một chuỗi các nhóm thủ tục trên một

chuỗi các tiến trình. Tại bất kì một thời điểm chỉ có một thủ tục chạy gọi một thủ tục

đệ quy trên một tiến trình khác. Trong lập trình phân tán, topology liên quan đến sóng

đệ quy tuần tự là virtual ring, mỗi bộ xử lý được biết đến với bộ xử lý kế cận (bộ xử lý

sẽ được gọi đệ quy) và bộ xử lý đã gọi bộ xử lý hiện tại. Bởi vậy sóng đệ quy tuần tự

được định nghĩa bởi cấu trúc sau:

type processor_identifier is …;





kiểu định nghĩa cho một tên bộ xử



successor: processor_id;

--Khai báo các bộ xử lý kế cận

procedure seq_rec_wave () is



Trang 15 



 



begin



if <điều_kiện> then



seq_rec_wave(f()) on successor;

;

endif;

;

end seq_rec_wave;



Trong trường hợp này cây thực hiện của thuật toán trở thành một chuỗi và chỉ có một

tính toán thực sự duy nhất tại tiến trình cuối của chuỗi. Có một số ví dụ sẽ sử dụng

sóng đệ quy tuần tự như bài toán election, termination detection … được thực hiện trên

giao thức virtual ring. Phần này sẽ được chi tiết trong chương III khi bàn về ứng dụng

sóng đệ quy phân tán trong xử lý bài toán election.

2. Sóng đệ quy trên cây bao phủ

Bước mở rộng tiếp theo sau sóng đệ quy tuần tự là việc thực hiện sóng đệ quy trên một

cây bao phủ với giả thiết là đã có một cây bao phủ logic trên hệ thống phân tán, khi đó

một tiến trình sẽ có duy nhất một tiến trình cha trừ gốc và một tiến trình con trừ các lá.

Có rất nhiều thuật toán hiệu quả để xây dựng một cây bao phủ (tham khảo [10], [11])

Sự tính toán được khởi tạo từ gốc của cây bao phủ, lời gọi đệ quy kết thúc khi sóng

đến lá cây vì lá không có node con. Định nghĩa bởi mã như sau:

type processor_identifier is …;





kiểu định nghĩa cho một tên bộ xử



sons: setof processor_id;

procedure str_wave () is



i: processor_id;

begin



if



not empty (sons) then



par i in sons do



Trang 16 



 

;

str_wave(f()) on i;

;

enddo;

;

endif;

;

end str_wave;



3. Sóng đệ quy ngập lụt:

Sóng đệ qui ngập lụt cho phép có thể thực hiện trên các hệ thống mà topology chưa

được biết trước. Bằng sóng đệ qui ngập lụt, chúng ta có thể nhận được các thông tin về

tình trạng của hệ thống. Do đó sóng đệ qui ngập lụt thông thường là giai đoạn đầu tiên

của các giải thuật phân tán. Kỹ thuật truyền thông báo ngập lụt đã được sử dụng trong

rất nhiều giải thuật phân tán. Cấu trúc của sóng đệ qui ngập lụt có dạng như trong cấu

trúc dưới.

Một vấn đề với các giải thuật sử dụng kỹ thuật ngập lụt nói chung và sóng đệ qui ngập

lụt nói riêng là quản lý việc lan tỏa của sóng đệ qui. Có nhiều chiến lược quản lý khác

nhau, mỗi chiến lược đều có điểm mạnh và điểm yếu riêng. Cấu trúc sóng đệ qui cho

phép ứng dụng các chiến lược khác nhau bằng cách thay đổi cách tính tập hợp lân cận

neighbor.



type processor_identifier is …;





kiểu định nghĩa cho một tên bộ xử



ego: processor_id;

--Khai báo processor_id hiện tại

neighbours: setof processor_id;

--Khai báo các hàng xóm của bộ xử lý hiện tại

procedure flooding_rec_wave (visited_processors:setof processor_id;

) is

i: processor_id;

processor_to_visit: setof processor_id;

--Các bộ xử lý tiếp theo sẽ được reach

begin

;



Trang 17 



 

--Bộ xử lý tiếp theo được reach không phải là bộ xử lý hàng xóm

--đã viếng thăm

processors_to_visit:=

visited_processors);



neighbours







(neighbours



and



--Nếu tập này không rỗng, flooding sẽ được thực hiện tiếp

if



processors_to_visit <> empty_set then



par i in processors_to_visit do

;

flooding_rec_wave(f()) on i;

;

enddo;

;



endif;

;

end flooding_rec_wave;



IV. MÔ HÌNH TOÁN CỦA SÓNG ĐỆ QUY PHÂN TÁN:

1. Mô hình toán:

Để thuận tiện trong việc giá các giải thuật xây dựng bằng sóng đệ quy phân tán, cần có

một mô hình toán học hình thức cho các giải thuật này. Các giải thuật vừa có tính chất

đệ quy, vừa có tính chất phân tán, vừa có tính chất đệ qui do đó mô hình toán của sóng

đệ quy phải phản ánh cả hai tính chất này.

Sóng đệ quy R có thể được định nghĩa bởi một tập 4 thành phần sau:

V = {D,S,P,R}



Thành phần D: định nghĩa tập các dữ liệu cục bộ tại tiến trình i, có thể có nhiều các

thực thi thủ tục đệ quy đồng thời. Mỗi sự thực thi thủ tục sẽ liên quan đến một tập dữ

liệu. Trong môi trường đệ quy cùng một dữ liệu có thể được sử dụng bởi các thủ tục

khác nhau. DLij là dữ liệu cục bộ của mức thực thi tiến trình j trên tiến trình i. DLij được

xây dựng từ hai tập dữ liệu:

Dữ liệu của tiến trình: dữ liệu cục bộ của tiến trình i DS i



Trang 18 



 

Dữ liệu thực thi: dữ liệu phù hợp cho mỗi lần thực thi tại tiến trình j được gọi từ tiến

trình i là DEi j

Bởi vậy ta có:

DLij = DSi ∪ DEi j



Trong quá trình thực thi thủ tục, các giá trị của dữ liệu cục bộ có thể điều chỉnh bởi các

mã cục bộ. D là hàm thể hiện các điều chỉnh này, nó phụ thuộc hai tham số: các giá trị

của các biến cục bộ được điều chỉnh tại mức thực thi cấp k, DLki và các giá trị tham số

đầu vào của thủ tục gọi là VP. Vậy có thể định nghĩa hàm D như sau:

DLij = D( DLki ,VP)



Thành phần S: lệnh par kích hoạt trên một loạt các tiến trình, thành phần S sẽ tạo

một tập chỉ mục các tiến trình này. Tập này được tính toán với các giá trị cục bộ

DLi của tiến trình đang hoạt động hiện tại và các giá trị tham số đầu vào VP. Vậy hàm

S được định nghĩa như sau:

{< DOMAIN > }=S(DL i ,VP)



Thành phần P: Nó đưa ra một tập các tham số của lời gọi thủ tục từ xa, cái mà sẽ

được gửi đến tiến trình k từ tiến trình i. Tập này được tính toán với các dữ liệu cục bộ

của i, các giá trị tham số đầu vào và ID của tiến trình được gọi k. Vậy hàm P được

định nghĩa như sau:

{PARAMETER − VALUES } = P ( DLi , VP , k )



Thành phần R: Tính toán giá trị trả về cho tiến trình gọi. Giá trị này được gửi đến

tiến trình, nó được tính toán với các giá trị cục bộ, các giá trị tham số đầu vào và tập

các giá trị thu thập được từ các tập tiến trình con của tiến trình hiện tại là Rsons . Vậy

hàm H được định nghĩa như sau:

< RETURN − VALUE >= R ( DLi , VP , Rsons )



Rsons là một tập được tạo bởi kết quả của các tiến trình con của tiến trình i. Nếu i không



phải node thông thường mà là lá thì Rsons là tập rỗng.



Trang 19 



 

2. Ví dụ về mô hình toán sóng đệ quy phân tán:



Hình 2: Ví dụ về mô hình sóng đệ quy phân tán

Tiến trình i thực hiện một RPC trên các node lân cận j,k,l. Mỗi RPC có các giá trị tham

số khác nhau:

{u,v,w} cho j

{u’,v’,w’} cho k

{u’’,v’’,w’’} cho l

Tập các node lân cận được sinh ra bởi hàm S và hàm P đưa ra các giá trị tham số của

RPC cho mỗi tiến trình. Tiến trình k,l không thực hiện bắt kỳ lời gọi đệ quy nào, các

tiến trình này là hai lá của cây. Khi k,l kết thúc tính toán, kết quả được gửi về tiến trình

i (tiến trình cha của k và l trên cây). Mỗi kết quả được tính toán bởi hàm H.

Tiến trình j thực hiện một RPC trên các site x, y, z được tính toán bởi hàm S với các

giá trị tham số được tính toán bởi P:

{A,B,C} cho x

{A’,B’,C’} cho y

{A’’,B’’,C’’} cho z

Sau đó kết quả được gửi về tiến trình j.

3. Xây dựng giải thuật trên mô hình toán:

Dựa trên mô hình toán đã trình bày ở phần 1, cùng với cấu trúc sóng đệ quy phân tán ở

phần II, chúng ta đưa ra được giải thuật trên mô hình toán như sau:



Trang 20 



Xem Thêm
Tải bản đầy đủ (.pdf) (78 trang)

×