routing table
(c) Bảng routing table của node 3 và node 11
Mapping Items Onto Nodes
Như chúng ta thấy trên hình 2.2, một item được lưu trên node đầu tiên mà theo sau nó theo chiều kim đồng hồ trong không gian ID. Các item với ID tương ứng 2, 3, 6, 10,13 được lưu trong các node trên mạng như sau: {2,3} được lưu tại node 3; {6} được lưu tại
Luận văn thạc sỹ KHMT Chương 2. Các cơ chế bảng băm phân tán trong mạng ngang hàng
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
44
node 9; {10} được lưu tại node 11; và {13} được lưu tại node 0.
Lookup Process
Quá trình tìm kiếm là kết quả tự nhiên của cách chia không gian ID. Cả việc chèn và tìm kiếm dữ liệu đều dựa trên việc tìm ID successor của một ID. Ví dụ, khi node 11 muốn chèn một item mới với ID là 8, lookup được chuyển tiếp tới node 3 là node đứng trước gần node 8 nhất trong bảng finger của node 11. Node lại thực hiện quá trình tương tự, nó chuyển tiếp yêu cầu tới node 5 là node đứng trước gần 8 nhất trong bảng finger của nó. Node 5 thấy rằng 8 nằm giữa nó và successor của nó (node 9), do đó nó trả về kết quả 9 theo đường đi ngược lại. Sau khi nhận được câu trả lời, tầng ứng dụng trên node 11 sẽ liên lạc với tầng ứng dụng trên node 9 và yêu cầu lưu một số giá trị với key là 8. Bất kỳ node nào muốn tìm kiếm key 8 đều thực hiện quá trình tương tự và trong khơng quá M chặng, một node sẽ tìm ra node lưu các dữ liệu ứng với key 8. Nói chung, trong điều kiện thơng thường, một tìm kiếm sẽ hồn thành trong O(log2(N)) chặng.
Joins, Leaves and Maintenance
Khi node n muốn join vào mạng, nó phải tìm ID của mình thơng qua một số contact trong mạng và chèn bản thân nó vào vịng giữa successor s của nó và predecessor của s sử dụng một thuật toán stabilization chạy định kỳ. Bảng định tuyến của n được khởi tạo bằng cách copy bảng định tuyến của s hoặc yêu cầu s tìm các finger của n. tập các node cần điều chỉnh bảng định tuyến sau khi n join vào mạng nhờ các node này đều chạy thuật toán stabilization định kỳ. Nhiệm vụ cuối cùng là chuyển một phần các item đang lưu trên node s có ID nhỏ hơn hoặc bằng n sao node n. Việc di chuyển dữ liệu này được thực hiện bởi tầng ứng dụng của n và s.
Giả mã của các quá trình tìm kiếm successor của node n, khởi tạo bảng định tuyến của n, cập nhật bảng finger của các node liên quan, quá trình stabilization như sau:
//yêu cầu node n tìm successor của id n.find_successor(id);
Luận văn thạc sỹ KHMT Chương 2. Các cơ chế bảng băm phân tán trong mạng ngang hàng
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
45
return n’.successor;
// yêu cầu node n tìm predecessor của id n.find_predecessor(id);
n’=n;
while (id ∉ (n’, n’.successor])
n’=n’.closest_preceding_finger(id); return n’; // trả về finger gần nhất đứng trước id n.closest_preceding_finger(id); for i = m downto 1 if (finger[i].node ∈ (n; id)) return finger[i].node; return n;
Thuật tốn 2.1. Giả mã tìm node successor của ID n
#define successor finger[1].node // node n join vào mạng;
// n’ là một node tùy ý trong mạng n.join(n’)
if (n’)
init_finger_table(n’); update_others();
// chuyển key trong khoảng (predecessor,n] từ successor
else // n là node duy nhất trên mạng for i = 1 to m
finger[i].node = n; predecessor = n ;
// khởi tạo bảng finger table của node
Luận văn thạc sỹ KHMT Chương 2. Các cơ chế bảng băm phân tán trong mạng ngang hàng
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
46 n.init_finger_table(n’) finger[1].node = n’.fin_successor(finger[1].start); predecessor = successor.predecessor; successor.predecessor = n; for i = 1 to m-1 if (finger[i+1].start ∈ [n, finger[i].node)) finger[i+1].node = finger[i].node; else finger[i+1].node=n’.find_successor(finger[i+1].start); // cập nhật n vào các node có finger table that đổi
n.update_others()
for i = 1 to m
//tìm node p cuối cùng có finger thứ i là n
p = find_predecessor(n-2i-1);
p.update_finger_table(n.,i);
//nếu s là finger thứ i của n, cập nhật s vào bảng finger của n n.update_finger_table(s,i)
if (s ∈ [n, finger[i].node)) finger[i].node = s;
p = predecessor; // lấy node đầu tiên đứng trước n p.update_finger_table(s,i);
Thuật toán 2.2. Giả mã cho hoạt động join vào mạng của một node
n.join(n’)
predecessor = nil;
successor = n’.find_successor(n);
// định kỳ kiểm tra successor đứng ngay n và báo cho successor //biết về n
Luận văn thạc sỹ KHMT Chương 2. Các cơ chế bảng băm phân tán trong mạng ngang hàng
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
47 x = successor.predecessor; if ( x ∈ (n, successor)) successor = x; successor.notify(n); // n’ nghĩ n’ là predecessor của n n.notify(n’)
if (predecessor is nil or n’ ∈ (predecessor,n))
predecessor = n’ ;
//định kỳ cập nhật các finger trong bảng finger table
n.fix_finger()
i = random index > 1 into finger []
finger[i].node = find_successor(finger[i].start);
Thuật tốn 2.3. Giả mã cho q trình stabilization
Hình 2.3 cho chúng ta thấy một ví dụ về quá trình join vào mạng của một node. Giả sử node 21 có successor là node 32, trên node 32 đang lưu các key 24 và 30. Node 26 join vào mạng, sau quá trình tìm kiếm, node 26 biết node 32 là successor của mình, nó trỏ con trỏ successor của mình vào node 32 và báo cho node 32 biết. Node 32 sau khi được báo thì trỏ con trỏ predecessor vào node 26. Node 26 copy các key tương ứng với nó (key 24) từ node 32. Đến định kỳ, N21 chạy quá trình stabilize, lúc này con trỏ successor vẫn trỏ vào node 32. Node 21 hỏi node 32 về predecessor của node 32, lúc này predecessor của 32 là 26. Sau khi nhận được câu trả lời, N21 trỏ con trỏ successor vào node 26 và báo cho node 26 biết nó là predecessor của node 26. Node 26 trỏ con trỏ predecessor vào node 21
Luận văn thạc sỹ KHMT Chương 2. Các cơ chế bảng băm phân tán trong mạng ngang hàng
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
48
Hình 2.8. Quá trình một node join vào mạng
Quá trình rời khỏi mạng có báo trược được thực hiện như sau: node sắp rời khỏi mạng chuyển các key nó đang lưu sang successor của nó rồi báo cho các node predecessor và successor. Bảng định tuyến của các node liên quan sẽ được cập nhật khi các node này chạy thuật tốn stabilization.
Hình 2.4 dưới đây cho chúng ta một ví dụ về bảng định tuyến của các node khi có sự join/leave. Ban đầu mạng có 3 node với ID là 0, 1, 3, bảng định tuyến của chúng được cho thấy trên hình vẽ.
Sau đó node 6 join vào mạng rồi node 3 rời khỏi mạng, bảng định tuyến của các node và sự thây đổi bảng định tuyến được thể hiện trong hình vẽ với những phần thay đổi có
Luận văn thạc sỹ KHMT Chương 2. Các cơ chế bảng băm phân tán trong mạng ngang hàng
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
49
màu đen, những phần không đổi có màu xám.
Hình 2.9. (a) Bảng finger và vị trí của key sau khi node 6 join. (b)Bảng finger và vị trí của key sau khi node 3 leave. của key sau khi node 3 leave.
Replication and Fault Tolerance
Các node rời khỏi mạng đột ngột có hai tác động tiêu cực. Thứ nhất là dẫn đến mất dữ liệu lưu trên các node này, thứ hai một phần của vòng bị mấtl liên kết dẫn đến một số ID sẽ khơng được tìm thấy. Có thể xảy ra tình huống một dãy các node liền nhau cùng rời khỏi mạng đột ngột. Chord giải quyết vấn đề này bằng cách cho mỗi node lưu một danh sách log2(N) node theo sau nó trong khơng gian ID. Danh sách này có hai mục đích, thứ nhất là nếu một node phát hiện successor của nó khơng hoạt động, nó sẽ thay thế bằng node ngay cạnh trong successor list, thứ hai, mọi dữ liệu được lưu trên một node nào đó cũng được lưu trên các node trong successor list. Dữ liệu chỉ bị mất hay vịng chỉ bị đứt khi có log2(N) + 1 node liên tiếp fail đồng thời.
Upper Services and Applications
Một số ứng dụng như cooperative file-system [14], một ứng dụng đọc/ghi hệ thống file và một DNS đã được xây dựng dựa trên Chord. Đồng thời, một thuật toán broadcast cũng được phát triển cho Chord
Luận văn thạc sỹ KHMT Chương 2. Các cơ chế bảng băm phân tán trong mạng ngang hàng
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
50
Cài đặt chính của Chord được thực hiện bằng nghôn ngữ C++. Thêm nữa, một C++ discrete-event simulator cũng đã được xây dựng. Naanou là một cài đặt C# của Chord với một ứng dụng chia sẻ file được xây dựng dựa trên nó.
Luận văn thạc sỹ KHMT Chương trình thử nghiệm
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
51
Chƣơng 3. Chƣơng trình thử nghiệm
3.1. Bài tốn thực tế
Hầu hết các DHTs được thiết kế để hoạt động với các peer là máy tính. Đây là mơi trường có độ ổn định khá cao, tức là khoảng thời gian từ lúc một node gia nhập cho đến khi rời khỏi mạng tương đối dài. Trong môi trường này, các DHTs hoạt động với hiệu năng tương đối cao.
Hiệu năng của một DHTs được đánh giá thông qua hai tham số chính là tỷ lệ tìm kiếm dữ liệu thành cơng khi dữ liệu có trên mạng và độ trễ tìm kiếm.
Vài năm trở lại đây các sản phẩm cho người sử dụng có thể nối mạng phát triển hết sức mạnh mẽ và đa dạng, các sản phầm khơng chỉ có máy tính mà cịn có các thiết bị như điện thoại, PDA, tivi, …. Cũng giống như người sử dụng máy tính, người sử dụng các thiết bị này cũng có nhu cầu chia sẻ, khai thác nguồn tài nguyên hết sức phong phú trên mạng P2P, đặc biệt là các tài nguyên như video, audio. Tuy nhiên thời gian kết nối mạng của các thiết bị này thường rất ngắn, thậm chí có thể tính bằng giây, dẫn đến sự bất ổn định của mạng. Các DHTs vốn được thiết kế để hoạt động với các peer là máy tính lúc này khơng đáp ứng được u cầu về hiệu năng do khoảng thời gian các peer ở trên mạng quá ngắn. Một mạng như vậy người ta gọi là mạng có churn rate cao.
Một bài toán mới đặt ra cho cộng đồng nghiên cứu P2P là xây dựng các mạng P2P thích nghi được với môi trường churn rate cao. Một trong những giải pháp được nhiều người quan tâm là cải tiến các DHTs hiện có để chúng hoạt động hiệu quả ngay cả trong mơi trường có churn rate cao. Việc đưa ra được giải pháp cải tiến hiệu năng cần căn cứ vào một số cơ sở, một trong những cơ sở quan trọng là việc đánh giá hiệu năng của các DHTs trong môi trường mới.
Việc đánh giá hiệu năng của các DHTs nhằm tạo cơ sở cho việc đưa ra các giải pháp cải tiến hiệu năng của chúng đồng thời giúp các ứng dụng lựa chọn, sử dụng các DHTs hiệu quả hơn.
Luận văn thạc sỹ KHMT Chương trình thử nghiệm
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
52
Đánh giá hiệu năng của các DHT bao gồm nhiều khía cạnh:
- Xác định ngưỡng churn rate mà các DHT hoạt động tốt.
- Phân tích ảnh hưởng của tham số thiết kế đến hiệu năng của DHT. - So sánh hiệu năng của các DHT khác nhau.
- Đánh giá tính khả mở của các DHT.
Các đánh giá được thực hiện trong dải churn rate rộng từ cao đến thấp, đặc biệt chú trọng đến trường hợp churn rate cao. Khi churn rate càng cao, độ ổn định của mạng càng thấp thì hiệu năng của các DHTs càng giảm. Do đó một trong những nhiệm vụ đầu tiên của phần đánh giá hiệu năng là xác định ngưỡng churn rate mà các DHT hoạt động với hiệu năng cao.
Đánh giá ảnh hưởng của các tham số thiết kế đến hiệu năng một DHTs cho phép xác định các tham số quan trọng đối với hiệu năng của DHT và xác định khoảng giá trị của các tham số trong đó DHTs làm việc tốt.
3.2. Khảo sát các simulator mô phỏng mạng overlay
Cộng đồng nghiên cứu sử dụng khá nhiều simulator khác nhau, có simulator đang được phát triển, có simulator khơng được phát triển tiếp.
Simulator Ngôn ngữ Trạng thái License
P2Psim C++ Active GPL
PeerSim Java Active LGPL
Query-Cycle
Simulator Java Inactive Apache
Narses Java Inactive GPL-like
Neurogrid Java Inactive GPL
GPS Java Inactive Open-Source, No
License
Overlay Weaver Java Active Apache
Luận văn thạc sỹ KHMT Chương trình thử nghiệm
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
53
PlanetSim Java Active LGPL
Bảng 3.1. Trạng thái phát triển của các simulator
Đặc điểm của các simulator như sau:
Simulator Kiến trúc Tính dễ dùng
Tính khả mở (max nodes)
P2Psim Discrete-event cho mạng P2P có cấu trúc Rất ít tài liệu 3000 node
PeerSim
Query-Cycle hoặc
Discrete – event cho mạng khơng cấu trúc. Có thể mơ phỏng node j oining, departing và failing.
Chỉ có mơ phỏng Query -
Cycle là có tài liệu 106 node
Narses Discrete-event, flow - based
topology có thể điều chỉnh
600 node, tùy thuộc vào
topology bên dưới 600 node
Overlay Weaver
Giả lập phân tán và một số giải thuật cho
structured overlay
Tài liệu về API và mã nguồn
tốt 4000 node
PlanetSim Mô phỏng discrete - event, sử dụng API chung Có tài liệu về thiết kế và API
100.000 node Neurogrid Discrete-event cho mạng khơng có cấu trúc, có thể chỉnh sửa để sử dụng cho mạng có cấu trúc
Có tài liệu mở rộng trên web 300.000 node
Luận văn thạc sỹ KHMT Chương trình thử nghiệm
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
54
Simulator Thống kê Underlying network
P2Psim Cung cấp một lượng hữu hạn
thống kê.
end-to-end time graph, G2 graph, GT-ITM, random, và Euclidean
PeerSim Có thể cài đặt các component
để thống kê dữ liệu Khơng được mơ hình hóa
Narses Có hỗ trợ nhưng phải cài đặt Một số topology
Overlay Weaver Không thể thu thập thống kê Không được mô hình hóa
PlanetSim Khơng có cơ chế thu thập thống
kê nhưng có thể xem trực quan Một số ít topology
Neurogrid Cần sửa mã nguồn Khơng được mơ hình hóa
Bảng 3.2. Đặc điểm của các simulator
3.3. Phần mềm mô phỏng P2PSim
P2PSim là phần mềm mã nguồn mở, đa tiến trình, discrete event để mô phỏng mạng overlay có cấu trúc với nhiều topology khác nhau như end-to-end time graph, G2 graph, GT-ITM, random, và Euclidean. P2PSim do một nhóm nghiên cứu mạng P 2P tại Đ ạ i h ọ c MIT phát triển. P2PSim được nhiều nhóm nghiên cứu sử dụng để nghiên cứu DHTs.
Luận văn thạc sỹ KHMT Chương trình thử nghiệm
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
55
Nó có thể mơ phỏng sáu loại giao thức DHTs khác nhau: Chord, Accordion, Koorde, Kelips, Tapestry, Kademlia. P2PSim hoạt động trên hệ điều hành Unix. P2Psim giúp hiểu mã nguồn của các giao thức mạng ngang hàng và so sánh sự khác nhau giữa các giao thức về độ tiện lợi, khả năng thực hiện.
Số node mà P2PSim có thể mơ phỏng phụ thuộc vào giao thức thiết kế và tối đa có thể lên đến 3000 node (giao thức Chord).
Cài đặt
- P2Psim được cài đặt và dịch trên hệ điều hành Unix. Để cài đặt ta cần lấy file nguồn p2psim-0.3.tar.gz tại địa chỉ web:
http://pdos.csail.mit.edu/p2psim/howto.html.
- Để chạy P2PSim cần các gói GCC2.95.3. Để cài đặt GCC ta thực hiện các
bước sau: $ cp gcc-2.95.3.tar.gz /usr/local $ tar –zxvf gcc-2.95.3.tar.gz $ mv gcc-** gcc $ cd gcc $ ./configure --prefix=/usr/local/gcc $ make bootstrap $ make install $ export CC=/usr/local/gcc/bin/gcc $ export CXX=/usr/local/gcc/bin/g++