Vì vậy, hiện nay hệ phân tán gặp một số thách thức về đồng bộ như sau: làm sao đồng bộ về thời gian trong hệ thống, trong khi mỗi quốc gia có các múi giờ khác nhau; tại [r]
(1)MỘT GIẢI PHÁP PHÁT HIỆN CÁC SỰ KIỆN SONG SONG TRONG CÁC TIẾN TRÌNH CỦA ỨNG DỤNG PHÂN TÁN
Nguyễn Hoàng Hà
Khoa Công nghệ thông tin, Trường Đại học Khoa học, Đại học Huế Email: nhha@husc.edu.vn, nhha76@gmail.com
Ngày nhận bài: 27/4/2020; ngày hoàn thành phản biện: 4/5/2020; ngày duyệt đăng: 14/7/2020
TÓM TẮT
Khác với hệ thống tập trung, liệu chức hệ phân tán lưu trữ máy tính thuộc vùng địa lý khác thời điểm có nhiều cơng việc thực cách đồng thời Vì vậy, để phát kiện song song tiến trình nhằm tối ưu thời gian thực hệ thống thách thức lớn Trước đây, người ta sử dụng thời gian thực để phát kiện song song Khi truyền nhận liệu nút hệ phân tán, thời gian thực có độ trể lớn nên độ xác khơng cao Bài báo nghiên cứu đồng hóa thời gian logic hệ phân tán nhằm phát kiện thực song song ứng dụng phân tán
Từ khóa: đồng hóa thời gian, xử lý phân tán, thuật toán Lamport, thuật toán Vector Clock
1. MỞ ĐẦU
Hệ phân tán hệ thống có chức liệu phân tán trạm (máy tính) kết nối với mạng máy tính *2]
Trong hệ phân tán, liệu chức lưu trữ máy tính vị trí địa lý khác nhiều cơng việc thực đồng thời Vì vậy, hệ phân tán gặp số thách thức đồng sau: đồng thời gian hệ thống, quốc gia có múi khác nhau; thời điểm có nhiều tiến trình cộng tác nhau; kiện tiến trình trao đổi thơng tin với Vì vậy, để xác định kiện tiến trình thực đồng thời với kiện tiến trình khác Đây thách thức lớn
(2)giải thuật sử dụng đồng hồ UTC làm mốc thời gian để đồng Nhưng hai thuật toán áp dụng mạng nội có độ trễ thấp, sử dụng mạng diện rộng độ xác khơng cao độ trể thời gian lớn
Năm 2016, Đặng Hồng Vỹ *1+ sử dụng thuật tốn Lamport để đồng hóa thời gian logic hệ phân tán Nghiên cứu xác định quan hệ phần tiến trình, cịn nhiều trường hợp chưa xác định tiến trình xảy trước, tiến trình xảy sau chưa xác định kiện xảy đồng thời
Yan Cai ; W.K Chan [3] sử dụng thuật toán Vector Clock để đồng thời gian logic Nghiên cứu xác định quan hệ phần, quan hệ trước sau tiến trình chưa xác định kiện xảy đồng thời
Bài báo nghiên cứu thuật tốn Vector Clock [4], từ đưa mơ hình, giải thuật cài đặt thử nghiệm nhằm đưa kiện xảy đồng thời Từ xác định kiện cài đặt song song với nhằm tối ưu thời gian hệ thống
2. MƠ HÌNH HỆ THỐNG
a Mơ hình tiến trình
Một hệ thống xử lý phân tán gồm n tiến trình, ký hiệu: P={p1, p2, <, pn}
Trên tiến trình gồm m kiện xảy tiến trình đó, gọi Ei kiện xảy
ra tiến trình i (i=1 n), ký hiệu Ei={ei1, ei2<, eim}, eix kiện x (x=1 m) xảy tiến trình i Các kiện tiến trình trao đổi thơng tin với kiện tiến trình khác Mỗi kiện trì nhãn thời gian [1]
b Quan hệ “xảy trước”
Cho eix (i=1 < n, x=1<m), ejy (j=1 < n, y=1 m) hai kiện hệ thống
xử lý phân tán ký hiệu: quan hệ “xảy trước”[1]
- Nếu eix ejy xảy tiến trình ( i=j), eix đến trước ejy, thì: eix ejy
- Nếu eix việc gửi gói tin từ tiến trình Pi, ejy việc nhận gói tin
tiến trình Pj, eix ejy
- Nếu eix ejy ejy eit (t=1 m) eix eit c Nhãn thời gian
(3)lý Mỗi kiện eix tiến trình C gán cho số timestamp tương
đương C(eix) Bộ đếm C(eix) tăng trước kiện tiến trình Đối với
mỗi kiện eix , ejy ta ln có: eix ejy C(eix) <C(ejx)[1]
Ta định nghĩa lại tình trạng đồng hồ dựa quan hệ “xảy trước” bao gồm hai điều kiện sau:
Nếu eix eiy hai kiện tiến trình pi eix ejy C(eix) <C(ejy)
Nếu eix kiện gửi gói tin từ tiến trình pi ejy kiện nhận gói tin
thì C(eix) <C(ejy)
d Giải pháp trật tự phần
Trong ứng dụng hệ phân tán, dựa vào quan hệ “xảy trước” ta xác định trật tự phần kiện Trật tự thỏa mãn điều kiện:
Nếu eix ejy hai kiện trạm eix thực trước ejx
eix ejx
Nếu eix phát thơng điệp trạm ejx thu thơng điệp eix
ejx
e Đồng hồ vector
Nếu nhãn thời gian số nguyên ta kết luận: eix ejy C(eix)
<C(ejx) Nếu C(eix) < C(ejx) chưa a xảy trước b, rút quan hệ phụ
thuộc nhân từ nhãn thời gian hai kiện eix , ejy xảy đồng thời Để
khắc phục nhược điểm ta sử dụng đồng hồ vector [3]
Mỗi tiến trình sử dụng vector gồm n thành phần chứa số tự nhiên (nhãn thời gian): Pi trì vector: Vi*1,<,n+
Vi[i]: chứa nhãn thời gian tiến trình i Ví dụ V1=,1,0,0} V1[1]=1, V1[2]=0, V1[3]=0;
Vi[j]: chứa nhãn thời gian tiến trình j xảy tiến trình i
3. THUẬT TỐN VECTOR CLOCK
Ý tưởng thuật toán
(4)tiến trình trì vector Khi tiến trình trao đổi với giá trị vector thay đổi [3]
Thuật toán Vector Clock Đầu vào:
- P={p1, p2, <, pn}; - Ei={ei1, ei2<, eim};
- Tập vector Vi (i=1 n);
Đầu ra: Tập vector Vi chứa nhãn thời gian kiện tiến trình Thuật tốn:
1 Khởi tạo: Vi[j]=0, i=1 n, j=1 n
2 Foreach pi
3 Foreach eix
4 If Pi gửi kiện eix đến Pj then
5 Pi thay đổi giá trị Vi[i]=Vi[i]+1 ;
6 Pi gửi thông báo kèm theo Vi*i+ đến Pj;
7 Khi Pj nhận kiện từ Pi, Pj cập nhật lại Vj:
8 Vj[k]=max(Vj[k],Vi[k]), k=1 n, j<>k;
9 Vj[j]=Vj[j]+1;
Phân tích độ phức tạp thuật toán Vector Clocks
- Để đưa nhãn thời gian cho kiện tiến trình ta phải duyệt qua
các n tiến trình nên độ phức tạp: O(n)
- Mỗi tiến trình ta phải duyệt qua kiện để xác định kiện gửi, kiện
nhận nên độ phức tạp: O(M) với M số kiện lớn tiến trình
- Với kiện ta phải duyệt qua phần tử vector nên độ phức tạp:
O(n)
Như vậy, độ phức tạp thuật toán Vector Clocks O(n)*O(M)*O(n)
=O(n2*M)
(5)hiện song song để tối ưu thời gian thực hệ thống Để giải vấn đề ta cần tìm quan hệ nhân kiện tiến trình
4. QUAN HỆ NHÂN QUẢ GIỮA CÁC SỰ KIỆN
Dựa tập vector Vi chứa nhãn thời gian kiện tiến trình Ta xác định được:
- Hai vector thành phần tương ứng vector
nhau:
Vi=Vj, Vi*k+=Vj*k], k=1,<,n
- ViVj, Vi*k] Vj[k], k=1,<,n
- Sự kiện có nhãn thời gian Vi xảy trước kiện có nhãn thời gian Vj
Vi<Vj, Vi<Vj thỏa mãn hai điều kiện: ViVj k để Vi[k]<Vj[k]
Như vậy, kiện có nhãn thời gian Vi xảy đồng thời với kiện có nhãn thời
gian Vj nếu: Not(ViVj) Not(VjVi)
5. THUẬT TỐN PVectorClock
Dựa mơ hình phần 4, báo xây dựng thuật toán PVectorClock để xác định kiện xảy đồng thời tiến trình
Thuật tốn PVectorClock:
Đầu vào: Tập vector Vi đầu thuật toán Vector Clock; Đầu ra: Tập S chứa vector xảy đồng thời;
Thuật toán:
1 Function isconcurrent(v[], w[]) //Hàm kiểm tra v,w xảy đồng thời hay không Begin
2 greater:=false, less:=false;
3 for i:=0 to n
4
if v[i] > w[i] then
greater := true;
else
if v[i] < w[i] then
(6)9 10
if greater=true and less=true then
return true; // v w đồng thời
else
return false; // v w không đồng thời
11 End;
12 S= ;
13 Foreach pi
14 Si= ;
15 Foreach pj
16 If isconcurrent(Vi, Vj) then
17 Si=Si Vj
18 S=S Si
Phân tích thuật toán độ phức tạp thuật toán PVectorClock
- Để tìm vector xảy đồng thời ta phải duyệt qua n tiến trình nên
độ phức tạp: O(n)
- Mỗi tiến trình ta phải duyệt qua tiến trình có trao đổi liệu với
nên độ phức tạp: O(n)
- Để kiểm tra hai kiện có xảy đồng thời hay khơng, ta phải phải duyệt
qua phần tử vector nên độ phức tạp: O(n)
Như vậy, độ phức tạp thuật toán PVectorClock O(n)*O(n)*O(n) =O(n3)
Cài đặt mơ thuật tốn PVectorClock
Thuật tốn cài đặt ngơn ngữ lập trình Java (NetBean 8.2, JDK 1.8); hệ điều hành Window Ultimate; xử lý Intel(R) Core ™ i5-4200U CPU @ 1.60 GHz 2.30 GHz; RAM: 4.00Gb
Phần mô thuật tốn trường hợp, trường hợp mơ tiến trình, 12 kiện Trường hợp mơ tiến trình 19 kiên
Trường hợp 1:
- Thuật tốn Vector Clock mơ 02 tiến trình, tiến trình có
(7)Hình 1. Kết Thuật toán Vector Clock cho tiến trình
- Sau mơ phỏng, thuật toán PvectorClock xác định tập kiện
song song tiến trình, cụ thể sau:
Sự kiện có nhãn thời gian *1, 0+ thực song song với kiện có nhãn thời gian *0,1+, *0,2+ Sự kiện có nhãn thời gian *5, 2+ thực song song với kiện có nhãn thời gian *2,3+, *2,4+, <
Tập kiện thực song song với thể Hình
Hình 2. Tập kiện thực song song với tiến trình
Trường hợp 2:
- Thuật toán Vector Clock mơ 04 tiến trình, số kiện
Yan Cai ; W.K Chan