Trƣớc hết cần xây dựng một thuật toán đơn giản để giảm thiểu lỗi dự đoán. Việc giảm thiểu E đƣợc thực hiện từ ý tƣởng đặt một lò xo giữa mỗi cặp của các nút (i, j). Chiều dài của lò xo đƣợc coi là khoảng cách giữa 2 nút trong không gian tọa độ. Năng lƣợng của lò xo là tỷ lệ thuận với bình phƣơng của khoảng cách di chuyển trong chiều dài còn lại của lò xo. Tổng của những nguồn năng lƣợng trên tất cả các lò xo chính là hàm lỗi chúng tôi muốn giảm thiểu.
Khi hàm lỗi bình phƣơng tƣơng ứng với năng lƣợng lò xo, chúng ta có thể giảm nó bằng cách mô phỏng các chuyển động của các nút theo các lực tác động của lò xo. Khi năng lƣợng ở mức tối thiểu của hệ thống lò xo tƣơng ứng với lỗi mức tối thiểu thì chƣa hẳn lỗi tối thiểu này là cực tiểu toàn cục. Bây giờ, chúng ta sẽ mô tả các thuật toán chính xác hơn. Gọi Fij là vector lực của lò xo giữa các nút i và j tác dụng trên nút i. Từ định luật Hooke chúng ta có [3] [5]:
( 2.3)
(2.4)
E = ∑ ∑ ( Lij - || xi – xj ||)2 i j
Đại lƣợng vô hƣớng ( Lij - || xi – xj ||) là khoảng cách dịch chuyển của lò xo. Đại lƣợng này cho biết độ lớn của lực tác dụng bởi lò xo trên i và j (ở đây bỏ qua hệ số lò xo). Vector đơn vị u (xi-xj) là hƣớng của lực trên nút i. Khi đó cƣờng độ lực của các vector lực lò xo tác động lên nút i trong toàn mạng sẽ là: Fi là tổng của các lực từ các nút khác trên nút i:
Để mô phỏng sự thay đổi của mạng lò xo, thuật toán xem xét trong từng khoảng thời gian nhỏ. Tại mỗi khoảng thời gian, mỗi nút xi di chuyển một khoảng nhỏ trong không gian tọa độ theo hƣớng của Fi và sau đó sẽ tính lại tất các lực. Các tọa độ vào cuối của một khoảng thời gian là:
trong đó t là độ dài của khoảng thời gian. Thuật toán cụ thể đƣợc thực hiện nhƣ sau:
Đối mỗi nút trong hệ thống, hệ thống sẽ tính toán lực trên mỗi lò xo kết nối với nút i (dòng 1) và cộng thêm vào tổng lực của nút i (dòng 2). Sau khi tất cả các lực đƣợc cộng vào với nhau, nút i sẽ đi một khoảng cách nhỏ theo hƣớng của lực (dòng 3). Quá trình này đƣợc lặp đi lặp lại cho hệ thống hội tụ đến tọa độ có tỉ lệ dự đoán lỗi tốt nhất.
Chúng ta mở rộng các thuật toán để mỗi nút tính toán và liên tục điều chỉnh tọa độ của nó dựa trên RTT đo đƣợc từ các nút. Bất cứ khi nào một nút giao tiếp với một nút khác, nó đều đo RTT đến nút kia và cũng biết đƣợc tọa độ hiện của nút đó. (2.5) ( 2.6) Fi = ∑ Fij j i xi = xi Fi t
Các đầu vào của thuật toán Vivaldi phân tán là một chuỗi các RTT mẫu. Trong mỗi mẫu nhận đƣợc, một nút cho phép bản thân đƣợc đẩy đi trong một bƣớc thời gian ngắn. Các nút liên tục giao tiếp với các nút khác, chúng hội tụ về tọa độ mà có thể dự đoán RTT tốt nhất.
Khi nút i tại tọa độ xi biết đƣợc nút j tại tọa độ xj và dự đoán thời gian khứ hồi là rtt, nó sẽ cập nhật tọa độ của nó bằng cách sử dụng các nguyên tắc cập nhật [3]:
Quy tắc này là giống nhau cho các lực lƣợng riêng lẻ đƣợc tính bên trong vòng lặp của thuật toán trên. Bởi tất cả các nút bắt đầu tại cùng một vị trí, Vivaldi phải tách chúng bằng cách nào? Vivaldi thực hiện điều này bằng cách định nghĩa u(0) là một vector đơn vị chiều dài theo một hƣớng đƣợc chọn ngẫu nhiên. Hai nút ở cùng một vị trí sẽ có một lò xo đẩy chúng ra xa nhau trong một số hƣớng tùy ý .
Thuật toán đƣợc xây dựng lại nhƣ sau [3]:
Thuật toán này đƣợc thực hiện bất cứ khi nào, khi có một RTT mới đƣợc đo. Vivaldi thực hiện với đầu vào là RTT từ nút đó đến nút xa và tọa độ của nút xa đó. Đầu tiên thủ tục sẽ tính toán các lỗi dự đoán hiện tại của nó đến nút đích (dòng 1). Các nút sẽ di chuyển theo hƣớng đi từ nút đích dựa vào mức độ của nút này dòng 2 và 3 tìm hƣớng ( vector lực đƣợc tạo ra bởi lực của lò xo) để nút di chuyển. Cuối cùng, nút di chuyển một khoảng nhỏ đến nút đích trong dòng 4, bằng cách sử dụng một bƣớc nhảy (timestep) hằng số. Thuật toán này thực hiện di chuyển trọng số trung bình một cách hiệu quả nhờ vào những mẫu gần đây nhất. Để tránh điều này, mỗi nút có thể duy trì một danh sách của tất cả các mẫu đã từng nhận đƣợc. Nhƣng chúng ta thấy rằng, kể từ khi tất cả các nút trong hệ thống liên tục cập nhật tọa độ của nó, các mẫu trƣớc mẫu cuối cùng trở nên lỗi
( 2.7)
thời. Hơn nữa, việc duy trì một danh sách nhƣ vậy sẽ không mở rộng đƣợc hệ thống khi số lƣợng các nút lớn.
Khó khăn chính trong việc thực hiện Vivaldi là đảm bảo rằng nó hội tụ đến tọa độ mà dự đoán đƣợc RTT tốt. Để giải quyết điều này, Vivaldi sẽ điều chỉnh tỷ lệ hội tụ bằng bƣớc nhảy δ: Giá trị δ lớn thì Vivaldi dùng để điều chỉnh tọa độ trong bƣớc nhảy lớn. Tuy nhiên, nếu tất cả các nút Vivaldi sử dụng các giá trị δ lớn, kết quả thƣờng dao động và không hội tụ về tọa độ hữu ích. Một thách thức nữa đó là việc xử lý các nút có một lỗi dự đoán cao trong hệ tọa độ của chúng. Nếu một nút n giao tiếp với một số nút mà khả năng dự đoán RTT không tốt thì những thông tin cập nhật của nút n dựa trên tọa độ của các nút đó sẽ làm tăng lỗi dự đoán. Chúng ta muốn có đƣợc cả hai điều này, đó là hội tụ nhanh và tránh đƣợc sự dao động. Vivaldi thực hiện điều này bằng các giá trị δ khác nhau ( phụ thuộc tọa độ của các nút nhƣ thế nào sẽ có các giá trị δ tƣơng ứng). Khi một nút vẫn đang học vị trí trong mạng ( ví dụ khi các nút tham gia lần đầu), giá trị của δ lớn sẽ giúp nó di chuyển nhanh đến một vị trí mới. Khi đó, giá trị nhỏ hơn của δ sẽ giúp tinh chỉnh vị trí của nó.
Bƣớc nhảy δ có thể sử dụng hằng số (cc <1) để thiết lập:
[
δ có thể đƣợc xem nhƣ là hệ số để các nút có thể di chuyển về vị trí hoàn hảo cho mẫu hiện tại. Ngoài ra, Vivaldi có thể thực hiện tính δ nhƣ sau:
Khi đó δ đƣợc gọi là bƣớc nhảy thích nghi. Sử dụng δ thích nghi trong trƣờng hợp một nút lấy mẫu chính xác của một nút lấy mẫu không chính xác thì nút này sẽ không di chuyển nhiều, còn một nút lấy mẫu không chính xác lấy mẫu một nút chính xác thì nó sẽ di chuyển rất nhiều và hai nút chính xác tƣơng tự sẽ phân chia sự khác biệt với nhau.
Tính toán bƣớc nhảy theo cách này sẽ cho chúng ta các thuộc tính đƣợc mong đợi đó chính là hội tụ nhanh chóng, dao động thấp và khả năng phục hồi và chống lại lỗi cao.
Thuật toán Vivaldi sử dụng bƣớc nhảy thích nghi nhƣ sau [3]:
( 2.8)
( 2.9)
Cc local error
Thủ tục Vivaldi tính trọng số của mẫu dựa trên lỗi cục bộ và lỗi của nút ở xa (dòng 1). Các thuật toán cũng phải lƣu vết các lỗi cục bộ tƣơng đối. Nó làm điều này bằng cách sử dụng trọng số di chuyển trung bình (dòng 2 và 3). Phần còn lại của thuật toán Vivaldi giống hệt với phiên bản đơn giản.
2.3.4. Tối ƣu Chord dựa trên giải thuật Vivaldi [12].
Chord sử dụng các tọa độ một cách hiệu quả để xây dựng bảng định tuyến. Trƣớc hết, mỗi nút sẽ tự động tính toán tạo độ của mình. Các nút trong hệ thống sẽ tự cập nhật tọa độ của mình đến tọa độ mới theo thuật toán Vivaldi sao cho việc dự đoán RTT chính xác nhất bằng cách một nút sẽ “ ping” đến một số nút khác để đo khoảng cách.
Một nút A sẽ duy trì một danh sách các nút ứng cử viên của nó. Việc lựa chọn Successor của nút A sẽ thực hiện đo khoảng cách từ nó đến các nút ứng viên để tìm ra nút có RTT ngắn nhất. Và nút đó sẽ đƣợc chọn làm Successor của A. Khi có một nút mới tham gia vào hệ thống, thuật toán Vivaldi sẽ đƣợc thực hiện để các nút lại tự cập nhật tọa độ của mình và Chord sẽ cập nhật lại bảng thông tin định tuyến của các nút.
Ngoài ra, cần thay đổi Chord để có thể sử dụng Vivaldi, đó là: bất cứ khi nào một nút gửi RPC yêu cầu hoặc trả lời nút khác, nó sẽ gửi tọa độ của nó vào trong RPC đó. Dựa vào thông tin có trong RPC, Vivaldi sẽ tính độ trễ tới các nút khác. Cũng nhờ vậy, Vivaldi có thể thu thập thông tin mà không làm tăng chi phí của mạng. Hơn nữa, bất cứ khi nào các nút trao đổi thông tin định tuyến, chúng sẽ gửi thêm tọa độ cũng nhƣ địa chỉ IP của chúng. Do đó, Chord luôn luôn biết tọa độ của nút mà không phải “nói chuyện” với nút đó trƣớc.
2.3.5. Nhận xét
- Vivaldi là thuật toán phân tán vì mỗi một thủ tục Vivaldi giống nhau sẽ đƣợc thực hiện trên mỗi nút. Và nó sẽ đƣợc thực hiện lại khi có một nút mới tham gia vào mạng.
- Tính hiệu quả của thuật toán: Mỗi nút cung cấp thông tin để một nút khác cập nhật tọa độ của nó. Do vậy, khi có những thay đổi cấu trúc topology thì các nút sẽ cập nhật tọa độ của chúng một cách tự nhiên và phù hợp.
- Vivaldi đã giúp Chord cải tiến đƣợc hiệu năng của mạng, tối ƣu trong quả trình tìm kiếm lặp.
CHƢƠNG 3- MÔ PHỎNG VÀ ĐÁNH GIÁ CÁC GIẢI PHÁP
Mạng ngang hàng có cấu trúc sử dụng bảng băm phân tán tạo nên một mạng phủ trên mạng vật lý. Chord là một giao thức của mạng ngang hàng có cấu trúc với không gian địa chỉ một chiều dạng vòng. Mạng ngang hàng cấu trúc Chord ngày càng thể hiện nhiều ƣu điểm nhƣ khả năng mở rộng, cân bằng tải, định tuyến, ... Tuy nhiên, việc sử dụng DHT trên Chord đã làm cho mạng phủ và mạng vật lý có sự sai khác về topology. Chính vì vậy việc tối ƣu hóa topology trên mạng phủ sẽ giúp giảm thiểu độ trễ truy vấn, tối ƣu hiệu năng của mạng. Trong chƣơng này, chúng tôi tập trung mô phỏng các giải pháp tối ƣu topology của mạng ngang hàng có cấu trúc Chord, qua đó đánh giá và so sánh các giải pháp dựa trên những kết quả mô phỏng. Tính hiệu quả của các phƣơng pháp tối ƣu đƣợc đánh giá qua độ trễ tìm kiếm, băng thông sử dụng, tỉ lệ tìm kiếm thành công.
Mục đích mô phỏng:
- Đánh giá tính hiệu quả của các giải pháp cũng nhƣ đánh giá đƣợc những cải tiến về hiệu năng của các giải pháp tối ƣu trên mạng Chord thông qua các độ đo nhƣ độ trễ tìm kiếm, băng thông sử dụng, tỉ lệ tìm kiếm thành công.
- Từ đó chọn lựa các giải pháp phù hợp để xây dựng các ứng dụng dựa trên mạng Chord.
Các vấn đề cần giải quyết:
Xây dựng topo và kịch bản mô phỏng nhằm giải quyết những vấn đề sau:
- Đánh giá ảnh hƣởng của kích thƣớc mạng tới độ trễ tìm kiếm và băng thông sử dụng của các nút cũng nhƣ tỉ lệ tìm kiếm thành công ứng với từng giao thức.
- Đánh giá ảnh hƣởng của topo mạng tới độ trễ tìm kiếm ứng với từng giao thức.
3.1. Bộ mô phỏng P2Psim
3.1.1. Mô phỏng bằng chƣơng trình máy tính. 3.1.1.1 Khái niệm mô phỏng.
Mô phỏng là sự bắt chƣớc hoạt động của một quá trình hay hệ thống thực theo thời gian. Cho dù đƣợc làm bằng tay hay thực hiện trên máy tính, mô phỏng bao gồm việc tạo ra một mô hình nhân tạo của hệ thống và khảo sát mô
hình này để rút ra các kết luận liên quan đến các tính chất hoạt động của hệ thống thực. Nhƣ vậy, hành vi của hệ thống theo thời gian đƣợc khảo sát bằng cách tạo ra một mô hình mô phỏng dựa trên các giả thiết về hoạt động của hệ thống thực. Các giả thiết này có thể đƣợc biểu diễn dƣới dạng các mối quan hệ toán học, luận lý hay ký hiệu giữa các thực thể (hay đối tƣợng) của hệ thống [1]. 3.1.1.2 Nhu cầu sử dụng mô phỏng
Việc nghiên cứu, khảo sát hoạt động của các hệ thống thực nhằm nâng cao hiểu biết và ứng dụng hiệu quả vào đời sống là một nhu cầu rất lớn. Thực ra, cách tốt nhất để khảo sát một hệ thống là thực hiện các thí nghiệm ngay trên các hệ thống thực và thay đổi hệ thống thực để tiến hành các thí nghiệm khác nhau. Mô phỏng mặc dù không phải là cách tốt nhất để khảo sát một hệ thống nhƣng với những ƣu điểm vốn có của mình nó đã trở thành một trong những phƣơng pháp phổ biến để nghiên cứu các hệ thống thực [1]. Những thuận lợi và khó khăn khi sử dụng mô phỏng:
Thuận lợi:
- Mô phỏng cho phép khảo sát, đánh giá hệ thống dƣới nhiều điều kiện khác nhau và dƣới các khía cạnh khác nhau
- Các bản thiết kế cho hệ thống đề nghị có thể đƣợc so sánh thông qua mô phỏng để xem xét hệ thống nào thoả mãn tốt nhất các yêu cầu đặt ra
- Trong mô phỏng, chúng ta có thể duy trì điều khiển trên các điều kiện thử nghiệm cụ thể tốt hơn khi thực hiện với hệ thống thực.
Khó khăn:
- Mô hình mô phỏng thƣờng tốn chi phí cao và mất nhiều thời gian để phát triển.
- Ngƣời ta thƣờng ỉ lại vào kết quả mô phỏng. Nếu mô hình mô phỏng không biểu diễn chính xác cho hệ thống thực, nó có thể gây ra các hậu quả rất lớn.
- ...
3.1.2. Giới thiệu về bộ mô phỏng P2Psim
Trong những năm gần đây, mô phỏng mạng đang dần phát triển, cho phép mô phỏng trên các hệ thống P2P. Hiện nay, bộ mô phỏng mạng NS-2 cũng đã đƣợc sử dụng để thử nghiệm giao thức P2P. Ngoài ra, các bộ mô phỏng mạng
khác nhƣ OMNeT + +, OverSim, P2Psim cũng đã đƣợc thiết kế riêng để thực hiện cho hệ thống P2P. Trong phần này chúng ta sẽ cùng tìm hiểu về bộ mô phỏng mạng ngang hàng P2P đó là P2Psim. Đây là bộ mô phỏng đƣợc sử dụng khá phổ biến để mô phỏng giao thức mạng ngang hàng. P2PSim là một mô phỏng dựa trên sự kiện, đƣợc phát triển bởi MIT Pdos Lab, là một phần của dự án IRIS, một dự án nghiên cứu về mạng ngang hàng [9]. Trong quá trình phát triển dự án nhóm nghiên cứu đã công bố nhiều bài báo có giá trị khoa học cao sử dụng bộ mô phỏng P2Psim để lấy kết quả phân tích:
- “Bandwidth-efficient management of DHT routing tables”, đƣợc trình bày trong Hội nghị quốc tế về chuyên đề thiết kế và thực hiện hệ thống mạng ngang hàng lần thứ 2.
- “Comparing the performance of distributed hash tables under churn” đƣợc trình bày trong Hội thảo quốc tế lần thứ 3 về hệ thống Peer-to-Peer.
- “Designing a DHT for low latency and high throughput.” trong kỷ yếu của Hội nghị chuyên đề về thiết kế và thực hiện hệ thống mạng ngang hàng.
- “Vivaldi: A Decentralized Network Coordinate System.” trong kỷ yếu của Hội thảo ACM SIGCOMM lần 4.
- …
Đây là bộ công cụ mô phỏng khá phổ biến trong mô phỏng mạng ngang hàng và đƣợc nhiều ngƣời nghiên cứu sử dụng nên trong phần mô phỏng của chúng tôi cũng lựa chọn P2Psim để mô phỏng và nghiên cứu.
3.2. Thực nghiệm mô phỏng và kết quả
3.2.1. Thực nghiệm 1: Mô phỏng Chord, láng giềng gần và giải thuật Vivaldi 3.2.1.1 Cấu hình mô phỏng 3.2.1.1 Cấu hình mô phỏng
- Kích thƣớc mạng lần lƣợt là 128, 256, 512, 1024 nút.