CHƯƠNG 4: MÔ PHỎNG VÀ ĐÁNH GIÁ HIỆU NĂNG ĐẢM BẢO AN
4.2. Xây dựng thủ tục định tuyến
[5] đã đề xuất ý tưởng cho mô hình mạng Chord kép mà chưa xây dựng thủ tục định tuyến cụ thể, dưới đây là các đề xuất của luận văn nhằm xây dưng thủ tục định tuyến cụ thể và hiệu quả.
Mô hình mạng Chord kép có thể truy vấn theo 2 chiều nên một câu hỏi được đặt ra là: để tìm successor của 1 khóa thì nên đi theo chiều nào?
Viết gọn công thức tính cho mỗi chỉ mục tại hình 3.1 và hình 3.2 x.finger[i] = {𝑥 − 2𝑖−12 (i lẻ, 0 ≤ i ≤ 2m-2)
𝑥 + 22𝑖 (i chẵn, 0≤ i ≤ 2m-2) Hình 4.2. Cấu trúc chỉ mục phân tán Chord kép
Giả sử tại nút x cần truy vấn để tìm nút chịu trách nhiệm về khóa k, định vị nút successor(k). Xây dựng thủ tục tìm nút successor(k).
Để tìm kiếm theo mỗi chiều, bảng chỉ mục tại mỗi nút được chia làm 2 phần, phần theo chiều thuận và phần theo chiều ngược.
- Nút x sẽ khởi tạo và đặt truy vấn cùng một lúc theo cả hai chiều (chiều thuận và chiều ngược)
- Nếu theo mỗi chiều truy vấn tìm thấy ngay định danh successor(k) quá trình sẽ dừng, kết quả được trả về cho nút x. Hình 4.4 dưới đây cho thấy theo chiều ngược, nút N2 tìm thấy ngay định danh successor(K29)=N30 - Ngược lại x sẽ tìm nút có định danh n và n’ gần với nút successor(k) nhất tương ứng theo mỗi chiều. Chiều thuận sẽ tìm nút có định danh n nhỏ hơn gần nhất với khóa k hoặc nút tham chiếu cuối cùng trong bảng thuận. Chiều ngược sẽ tìm nút n’ có định danh lớn hơn gần khóa k nhất hoặc nút tham chiếu cuối cùng trong bảng ngược.
- Tiếp theo, so sánh giá trị n và n’ với giá trị khóa k cần tìm. Nếu |n - k| ≤
|n’ - k| truy vấn sẽ được chuyển cho nút n, ngược lại truy vấn chuyển tiếp đến n’. Hình 4.4 phía dưới cho thấy bước tiếp theo của quá trình tìm kiếm khóa K3 của nút N11 sẽ chuyển tiếp đến nút N8.
- Quá trình tiếp tục tại nút n hoặc n’.
Dưới đây là sơ đồ khối mô tả thủ tục định tuyến:
Hình 4.3. Sơ đồ khối thủ tục định tuyến trong mô hình mạng Chord kép
Ví dụ minh họa xây dựng thủ tục định tuyến
Hình 4.4. Mô tả quá trình tìm kiếm khóa K3 và khóa K29
Giả sử tại nút N2 có yêu cầu truy vấn tìm kiếm khóa K29 đang được lưu tại nút N30, successor(K29) = N30. Bảng chỉ mục theo chiều thuận của N2 gồm {N4, N8, N10} để tìm successor (K29) truy vấn được chuyển đến nút N10, tuy nhiên trong bảng chỉ mục theo chiều ngược của N2 gồm {N2, N30} đã có tham chiếu đến N30. Như vậy N2 chỉ cần 1 bước chuyển để tìm được successor (K29).
Tại nút N11 có yêu cầu tìm khóa K3, successor (K3) = N4. N11 cần định vị nút N4 trên vòng Chord kép. Tập nút tham chiếu theo chiều thuận của N11 gồm {N12, N14, N16, N20} do không có nút nào thỏa mãn điều kiện bằng hoặc nhỏ hơn gần nhất so với K3 nên theo chiều này, truy vấn được chuyển đến nút N20.
Theo chiều ngược, nút N11 có tập nút tham chiếu gồm {N10, N8} và truy vấn tìm K3 được chuyển cho N8 vì N8 lớn hơn K3 gần nhất.
Tiến trình so sánh |N20-K3| và |N8 - K3|, dễ thấy |N20 - K3| > |N8 - K3|.
Truy vấn được chuyển đến N8. Nút N8 có tập nút tham chiếu theo chiều ngược là {N8, N4}. Tới đây quá trình định tuyến kết thúc do N8 đã định vị được successor (K3) = N4, kết quả trả về cho N11.
Phần tiếp theo mô tả việc tìm successor theo mỗi chiều.
Mỗi bảng chỉ mục (cả hai chiều) tại mỗi nút trong Chord kép có 2m-1 chỉ mục trong đó chiều thuận chứa m chỉ mục, quá trình tìm successor được mô tả theo thuật toán sau:
N2
N4 N5
N8
N10 N11 N12
N14 N17 N16
N18 N20
N21 N22
N30 N31 N28
N26
N24
K3 K29
//ask node n to find successor of id in clockwise n.find_successor(id)
if (id (n, n.sucessor]) then return n.sucessor else
n’=closest_preceding_node(id) return n’.find_successor(id) endif
end.
n.closest_preceding_node(id) for (i=m down to 1)
if(finger[i] (n, id)) then return finger[i]
endif return n end.
Chiều ngược chỉ chứa m-1 chỉ mục, quá trình tìm successor như sau:
//ask node n to find successor of id in anti-clockwise n.ac_find_successor(id)
if (id (n.predecessor, n]) then return n.predecessor else
n’=ac_closest_preceding_node(id) return n’.ac_find_successor(id) endif
end.
n.ac_closest_preceding_node(id) for (i=1 to m-1)
if(finger[i] ≥ id)) then return finger[i]
endif
return finger[m-1]
end end.