Cải tiến việc phân vùng sao cho hiệu quả. Với ý tưởng phân vùng là chính thì trong chương trình mô phỏng đã sử dụng việc phân vùng dựa vào việc chia đều các khoảng (tức là các node cùng cấp trong cùng cây multicast sẽ có các vùng kiểm soát nhằm xác định node con đều nhau).
48 trang |
Chia sẻ: lylyngoc | Lượt xem: 2535 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Luận văn Truyền tin multicast đa luồng thờigian thực trên mạng ngang hàng có cấu trúc, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ần dữ liệu chia sẻ trong mạng. Với cấu trúc
này, khi một máy cần tìm một dữ liệu, nó chỉ cần áp dụng một giao thức chung để xác
định nút mạng nào chịu trách nhiệm cho dữ liệu đó và sau đó liên lạc trực tiếp đến nút
mạng đó để lấy kết quả.
Phát triển trên mạng ngang hàng có cấu trúc sẽ tận dụng ưu điểm là khả năng dễ
mở rộng do cấu trúc liên kết rõ ràng; việc tìm kiếm thông tin nhanh hơn. Giao thức tìm
kiếm chung trong mạng sẽ đảm bảo thông tin được tìm kiếm chính xác. Đây là một lợi
thế rất quan trọng khi áp dụng mạng ngang hàng có cấu trúc để triển khai truyền tin
multicast, do truyền tin multicast yêu cầu khả năng định tuyến của mạng phủ để xây
dựng nên cây multicast.
Ngoài ra, tài nguyên được phân bố một cách hợp lý để không có một máy tính
nào lưu giữ quá nhiều dữ liệu dẫn đến quá tải thông tin định tuyến. Do mạng là có cấu
trúc nên các thông điệp chuyển đi giữa các máy tính để duy trì mạng ngang hàng được
giảm xuống mức tối thiểu. Băng thông của mạng được dành nhiều hơn cho việc chia sẻ
tài nguyên.
Tuy nhiên nhược điểm của mô hình này là khi một node nào đó bị lỗi, việc khôi
phục lại cây multicast để đảm bảo luồng dữ liệu cho các node con là tương đối khó
khăn do mỗi node biết rất ít thông tin về các node khác trong mạng.
1.2.Truyền tin multicast thời gian thực
Một nhánh trong truyền tin multicast là truyền tin multicast thời gian thực.
Phương pháp truyền tin này thường được áp dụng trong các ứng dụng video streaming
trực tiếp có thể xem là thế mạnh thực sự của mạng ngang hàng so với mô hình mạng
client – server truyền thống. Ví dụ cụ thể nhất là khi chúng ta muốn xem một trận đá
bóng rất được mong đợi giữa Real Maldrid – Barcelona. Một thống kê cho biết có đến
gần 1 tỷ người theo dõi trận cầu này trên toàn thế giới và chắc chắn là tại thời điểm đó
không có 1 server nào có thể đủ mạnh để phát sóng trực tiếp trận đấu lên mạng
Internet. Thế nhưng với 1 ứng dụng của video streaming thời gian thực trên mạng
ngang hàng (như Sopcast , TVU Player) bạn lại có thể theo dõi trận đấu này với chất
12
lượng có thể chấp nhận được. Đó chính là ưu điểm vượt trội của mô hình mạng ngang
hàng và hiện nay vẫn đang được phát triển để ngày càng tối ưu hóa. Khóa luận này
cũng là một đề xuất về truyền tin multicast đa luồng thời gian thực dựa trên giao thức
Chord nhằm ứng dụng cho video streaming thời gian thực.
Trong truyền tin multicast thời gian thực có 2 đặc tính riêng quan trọng nhất cần
phải đáp ứng để đạt được chất lượng có thể chấp nhận được :
Inbound bandwith tại mỗi máy là đủ lớn để decode được thành video với chất
lượng chấp nhận được . Với các kỹ thuật decode bây giờ thì các máy với mức
download lớn hơn 240Kbits/s là có thể xem được video.
Độ trễ tại các máy là không quá lớn để đảm bảo tính thời gian thực . Tính chất
này thường rất quan trọng trong các ứng dụng video streaming 2 chiều như
video call … tuy nhiên trong các ứng dụng 1 chiều như các ứng dụng xem TV
trên Internet đặc tính này lại có thể không quá quan trọng
13
Chƣơng 2.Truyền tin multicast đa luồng thời gian thực
Trong chương một, chúng ta đã hiểu được khái niệm và cách thức truyền tin
multicast cũng như truyền tin multicast thời gian thực. Một trong những đặc tính quan
trọng của hệ thống multicast là 1 máy khi tham gia vào hệ thống multicast có thể vừa
là node gửi dữ liệu lại vừa là node nhận dữ liệu. Từ tính chất này người ta đã phát triển
truyền tin multicast từ đơn luồng thành đa luồng với những ưu điểm , hiệu quả ứng
dụng rất đáng ghi nhận trên mạng ngang hàng.
2.1. Tổng quan về truyền tin multicast đa luồng
Hình 7. Truyền tin mulicast đa luồng
Về cơ bản truyền tin multicast đa luồng được xây dụng trên cây multicast với mở
rộng : các node thay vì chỉ gửi và nhận 1 gói dữ liệu thì bây giờ lại nhận và gửi nhiều
dữ liệu hơn.
Xét ví dụ ở Hình 7. Bây giờ giả sử ta chỉ quan tâm đến stripe 1(luồng 1) : đây
chính là truyền tin multicast đơn luồng. Quá trình truyền tin như sau : node source
(nguồn) gửi dữ liệu đến node con 2. Node 2 gửi dữ liệu cho node 3 , 4. Các node 3 , 4
gửi dữ liệu cho các node lá 5 , 6 ,7 ,8. Như vậy ta có thể thấy các node trong 2 , 3 , 4
đều phải gửi dữ liệu đi cho 2 node khác trong lúc đó chỉ nhận về 1 luồng dữ liệu.
Trong khi đó các node lá 5 , 6 , 7 , 8 chỉ nhận dữ liệu mà không phải gửi. Việc truyền
tin multicast như thế này trên mạng ngang hàng đã vi phạm tiêu chí quan trọng nhất
trong mạng ngang hàng : tính công bằng. Trên mạng ngang hàng các node gửi đi nhiều
dữ liệu thì cũng phải được nhận lượng dữ liệu xứng đáng với mức đóng góp của node
14
đó trong hệ thống mạng. Điều kiện này là cơ sở để mạng ngang hàng phát triến mạnh
trên hệ thống Internet. Trên đây chỉ là trường hợp cây multicast đơn luồng nhị phân ,
còn trên thực tế mô hình cây multicast chắc chắn sẽ phức tạp hơn nhiều.
Theo như nghiên cứu về cây multicast đơn luồng với fanout = 16 (mỗi node gửi
dữ liệu cho 16 node con khác) thì có đến 90% là node lá và chỉ có 10% là node trong.
10% đó phải gánh toàn bộ băng thông mạng.
Mục đích lớn nhất cuả truyền tin multicast đa luồng là giải quyết được vấn đề
vừa đặt ra : làm sao đạt được tính công bằng cho các node tham gia hệ thống multicast.
Xét ví dụ ở Hình 7. Bây giờ ta quan tâm đến cả 2 luồng stripe 1 , 2. Sau khi xét
quá trình truyền tin của cả 2 luồng ta có thể thấy tất cả các node trong cây đều nhận 2
2 luồng dữ liệu và gửi đi 2 luồng dữ liệu. Nếu stripe 1 và stripe 2 là tương đương nhau
thì quả thực hệ thống này đã đạt được sự công bằng mong muốn.
Ví dụ ở Hình 7 có thể xem là hình mẫu đơn giản nhất cho cây multicast đa luồng.
Việc phát triển và ứng dụng trong hệ thống mạng ngang hàng với độ phức tạp lớn hơn
nhiều đã gặp 1 số vấn đề :
Số luồng mong muốn là lớn để đảm bảo mỗi luồng dữ liệu khi truyền đi trên
mạng đủ nhỏ để tránh tắc nghẽn. Việc tăng số luồng đồng nghĩa với cách xây
dựng việc gửi và nhân các luồng tại mỗi node trong cây multicast cũng sẽ phức
tạp hơn để đảm bảo vẫn giữ được tính công bằng
Tính không ổn định của mạng. Đây chính là đặc trưng thực tế của hệ thống
mạng ngang hàng. Các node trong cây multicast sẽ vào ra liên tục và để cây
multicast vẫn đảm bảo truyền tin được đến tất cả các node thì cần phải có cơ
chế thay đổi lại cây multicast cho phù hợp.
Gần đây đã có một số nghiên cứu liên quan đến xây dựng cây multicast đa luồng
trên mạng ngang hàng có cấu trúc sử dụng giao thức DHT(Bảng băm phân tán -
Distributed Hash Table). Mục 2.2 sẽ trình bày về những giải pháp này
2.2.Splitstream
Splitstream là giải pháp xây dựng cây multicast đa luồng dựa trên nền tảng
Pastry , Scribe.
Để hiểu được Splitstream ta sẽ tìm hiểu rõ về cấu trúc Pastry và Scribe ngay sau
đây.
15
Pastry
Là một giao thức phân phối dữ liệu và định tuyến ở tầng ứng dụng trong các ứng
dụng mạng ngang hàng có cấu trúc. Đúng như định nghĩa của nó Pastry có hai nhiệm
vụ chính là phân phối dữ liệu trong một mạng ngang hàng và tìm kiếm dữ liệu trong
mạng dựa vào khóa tìm kiếm. Hệ thống Pastry là một hệ thống phân tán có khả năng
tự cấu hình và có tính ổn định cao, khả năng chống chịu lỗi tốt, đồng thời nó cũng có
khả năng mở rộng và ứng dụng cho những dịch vụ lớn.
Pastry cũng sử dụng giao thức DHT để lấy định danh các node tham gia vào hệ
thống mạng. Với dải địa chỉ lớn thì giao thức DHT quả thực rất phù hợp với hệ thống
mạng ngang hàng , không ngoại trừ đối với Pastry. Tuy nhiên điều thú vị của Pastry
nằm ở bảng định tuyến sẽ được mô tả dưới đây.
Hình 8. Bảng định tuyến của node 10233102 trong Pastry
Node và dữ liệu trong mạng Pastry được định danh bởi một giá trị 128 bit
(nodeId, ObjId). Mỗi dữ liệu lưu trữ trong mạng được băm bởi một hàm băm từ đó thu
được một giá trị gọi là khóa và dữ liệu này được lưu trữ tại node quản lý dãy các khóa
có chứa giá trị khóa này (giá trị khóa thu được khi băm dữ liệu).
Mỗi node trong mạng sẽ lưu trữ một bảng định tuyến (routing table) một tập các
hàng xóm (neighborhood set) và một tập namespace. Pastry dùng các dữ liệu này để
quản lý và duy trì sự ổn định của mạng đồng thời phục vụ cho việc tìm kiếm dữ liệu.
16
Ở Hình 8 là bảng định tuyến của nodeId 10233102. Dựa vào bảng định tuyến này
node 10233102 có thể gửi dữ liệu đến cho node khác. Ví dụ node 10233102 muốn gửi
thông điệp m đến cho node 33321220. Đầu tiên nó sẽ tìm trong các node hàng xóm
trong bảng định tuyến , nếu có sẽ gửi đến luôn. Nếu không tìm thấy nó sẽ tìm trong
Routing table và so sánh các ký tự ban đầu của node cần gửi đến (33321220) với các
cột trong Routing table. Cụ thể là node 33321220 có ký tự đầu là 3 : nó sẽ tìm trong
Routing table tại hàng 1 cột 3 tìm được node 31203203. Do ngay từ ký tự đầu của
node cần gửi đã khác node gửi nên quá trình tìm kiếm dừng lại. Node 10233102 sẽ gửi
đến node 31203203 với yêu cầu sẽ gửi thông điệp m đến node 33321220. Quá trình
này tiếp tục xảy ra cho đến khi đến được node cần gửi.
Hình 9. Node 10233102 gửi thông điệp m đến node 33321220
Các node định kỳ gửi các gói tin keep-alive cho các node hàng xóm của nó và
nếu như một node nào đó không nhận được gói keep-alive của một node hàng xóm
trong tập hàng xóm của nó trong một thời gian nhất định thì nó sẽ xem như node hàng
xóm đã rời khỏi mạng và tự động update thông tin.
Scribe
Scribe là cơ sở hạ tầng cho việc truyền multicast ở tầng ứng dụng dựa trên giao
thức Pastry. Cũng chính vì thế nó thừa hưởng được những đặc tính của một giao thức
mạng ngang hàng có cấu trúc và đồng thời mang những đặc điểm này vào trong việc
17
truyền thông điệp multicast ở tầng ứng dụng. Giống như Pastry, Scribe là mô hình
phân quyền hoàn toàn nó có khả năng xây dựng, duy trình mạng, phát tán thông báo
một cách có tổ chức và tin cậy đồng thời có tính tương thích cao với số lượng nhóm,
số thành viên trong nhóm lớn cũng như khi có nhiều tài nguyên trên mạng.
Scribe sẽ xây dựng một cây multicast bằng cách gọi thủ tục join giao thức Pastry
mỗi khi một nút có yêu cầu đăng nhập vào nhóm truyền multicast. Và nhờ khả năng tự
cấu hình của Pastry mà vấn đề quản lý nút, nút lỗi cũng như ra vào của nút trở nên dễ
dàng. Đồng thời Scribe sử dụng giao thức Pastry để phát tán thông báo multicast.
Scribe tổ chức theo nhóm, tức là hợp những node có cùng nhu cầu nhận dữ liệu
multicast vào một nhóm, và về mặt logic thì các node trong nhóm sẽ có quan hệ với
nhau theo hình cây(sẽ giải thích kỹ ở phần sau). Bất kỳ một node nào trong mạng cũng
có thể thực hiện được 3 thao tác: một là tạo ra 1 group, hai là join vào một group đã có
từ trước (trở thành một node trong cây multicast) và ba là truyền multicast tới tất cả
các node có trong group (nguồn multicast). Scribe là một mô hình cung cấp một cách
cố gắng tối đa trong việc truyền multicast nó có thể quản lý và duy trì được nhiều
group cùng một lúc, các group có số lượng thành viên lớn cũng như có nhiều tài
nguyên trong mạng.
Chi tiết giải thuật:
Mô hình:
Mô hình để thực thi Scribe là một mạng Pastry trong đó các máy có cài đặt
chương trình ứng dụng của Scrible. Chương trình ứng dụng này sẽ cung cấp cho các
máy này hai phương thức là forward (được gọi khi một thông điệp định tuyến qua một
node) và deliver (được gọi khi thông điệp đến một node mà có nodeId gần với key
nhất hoặc nội dung thông điệp chính là địa chỉ của node đó). Các thông điệp trong
Scribe có 4 kiểu là : JOIN (xin tham gia vào một group), CREATE (tạo một group
mới), LEAVE (rời khỏi group), MULTICAST (truyền thông điệp multicast).
Quản lý nhóm:
– Mỗi nhóm truyền multicast có một định danh groupId duy nhất
Scirbe node (tức là node trong mạng có cài chương trình ứng dụng Scrible) có
id gần với id của group (groupId) nhất được gọi là “điểm gặp” và nó cũng chính
là gốc của cây multicast tương ứng với groupId này luôn.
– Tạo Nhóm: Một node Scribe nào đó muốn khởi tạo một group thì các bước thực
hiện sẽ là :
18
B1: node Scribe dùng Pastry định tuyến thông điệp route(CREATE,groupId).
B2: giao thức Pastry sẽ gửi thông điệp này tới điểm cuối là một node có nodeId
gần với groupId nhất. Và node này sẽ được xem như là gốc của group mới tạo
ra.
B3: Hệ thống sẽ kiểm tra độ an toàn, các thông tin về chứng thực nếu không có
vấn đề gì thì sẽ thêm group mới vào danh sách các group đã biết trong mạng.
Trong việc tạo nhóm bước quan trọng nhất chính là bước kiểm tra độ an toàn và
chứng thực thông tin, vì điều này có ảnh hưởng rất lớn tới sự an toàn của toàn mạng
nói chung chứ không chỉ riêng sự an toàn của group multicast.
Quản lý thành viên :
Một group về phương diện logic là một cây multicast có gốc là “điểm gặp", mỗi
khi có một node mới được join vào group thì nó sẽ trở thành một thành viên của group
cũng như trở thành một thành phần của cây multicast, vì thế phải có cơ chế hợp lý để
tổ chức, quản lý các thành viên của group. Nếu một node Scribe là một phần của group
thì về phương diện cây multicast thì nó là một forwarder. Mỗi một forwarder duy trì
một bảng gọi là children table mà mỗi entry của bảng này sẽ gồm có 2 trường: địa chỉ
ip của một node “con” nào đó của nó (ip addr), và nodeId tương ứng của node con đó.
Join group:
Khi một node muốn join vào một group nào đó nó sẽ thực hiện các bước sau:
Gửi thông điệp JOIN với groupId của group cần join làm key: route
(JOIN,groupId).
Giao thức Pastry sẽ định tuyến nó tới “điểm gặp”
- Nếu node trung gian trong quá trình truyền thông điệp là một forwarder (một
thành phần của group đang định join vào) thì đơn giản chỉ là thêm node cần join vào
làm một con của node forwarder này.
- Nếu node trung gian không phải là một forwarder của group cần join vào thì
thực hiện các bước:
Tạo một children table cho node trung gian và thêm thông tin của node cần join
vào bảng này.
Gửi thông điệp JOIN của node trung gian tới điểm gặp (lúc này thay cho việc
thực hiện join node ban đầu ta đi join node trung gian vào group). Và cứ thực
hiện đệ quy như thế này ta sẽ có được một danh sách các node mới join vào
group thay vì chỉ một node ban đầu.
19
Để dễ hiểu ta xét ví dụ sau : một group có điểm gặp là node A có nodeId = 1100
(như hình vẽ ở dưới)
Hình 10. Quá trình 1 node join vào group
Node B có nodeId là 0111 muốn join vào group có A là gốc. nó sẽ gửi gói tin
route(JOIN,x) với x là groupId của group này, giao thức Pastry sẽ định tuyến gói tin
tới node D có nodeId là 1001. Nhưng node D không phải là một thành phần của group
này cho nên D sẽ tạo ra một children table của nó và thêm vào đó entry
(122.145.1.23;0111). Tiếp đó D sẽ gửi gói tin yêu cầu join vào group có gốc là A:
route(JOIN,x). Tiếp tục giao thức Pastry lại định tuyến nó tới node E và E cũng không
phải là thành viên của group này vì thế E cũng sẽ tự tạo ra một childeren table của nó
và thêm vào entry (172.16.2.13;1001) Và sau đó E gửi gói tin route(JOIN,x). Gói tin
này tiếp tục được định tuyến và tới được A vì A là một thành của group cho nên ở đây
A sẽ thêm entry (10.10.1.123;1101) vào children table của nó. Kết quả là ta sẽ có thêm
3 thành phần mới của group là B ,D, E.
Tiếp theo node C có nodeId là 0100 muốn join vào group này. Để bắt đầu nó
cũng sẽ gửi gói tin yêu cầu route(JOIN,x) gói tin này được định tuyến tới node D và vì
bây giờ D đã là một thành phần của group này nên đơn giản D sẽ thêm vào children
table của nó một entry mới (123.134.12.12;0100).
Leave group:
Khi một node nào đó muốn rời khỏi group nó sẽ ghi một cách cục bộ rằng nó đã
rời khỏi group (tức là chỉ một mình nó biết nó đã rời khỏi mạng). Sau đó nếu bảng
children table của node này là rỗng tức là nó không có con trong cây multicast thì nó
sẽ gửi thông điệp LEAVE tới cha của nó trong cây multicast. Thông điệp này sẽ được
đệ quy trong cây multicast cho tới khi nó tới một node mà node có con đã rời khỏi
group. Còn nếu bảng children table của node muốn rời mạng không rỗng thì nó làm
20
như trong trường hợp nó không có con nào cả. Sau đó các con của nó sẽ xem như nó bị
lỗi và thực thi theo cơ chế sửa lỗi (sẽ trình bày ở dưới).
Với cách join và leave group như thế này và với đặc tính phân phối ngẫu nhiên
của Pastry cây multicast sẽ được xây dựng một cách đồng đều theo nghĩa là không một
node nào trong cây multicast ngay cả node gốc chịu quá nhiều kiết nối tới các node
khác. Việc này giúp cho Scribe có khả năng mở rộng về kích thước cũng như về khả
năng, tức là cả khi tăng số lượng node trong group hay là tăng các gói mulicast gửi đến
mạng thì Scribe vẫn có thể đảm đương được.
Truyền multicast tới mạng :
Khi một node nào đó muốn truyền multicast tới các điểm trong một group nào đó
nó sẽ gửi thông điệp multicast tới điểm gặp (route(MULTICAST,rootId)). Sau khi
điểm gặp nhận được thông điệp này nó sẽ gửi trả lại node kia Ip của nó (rootIP), sau
đó node này sẽ truyền thông tin muốn gửi tới điểm gặp. Điểm gặp sẽ sẽ copy gói tin
multicast này gửi cho các con của nó trong cây multicast (nếu có), các điểm con này
khi nhận được dữ liệu cũng lại tiếp tục copy dữ liệu đó và gửi tới các con của nó trong
cây (nếu có). Cứ lặp đi lặp lại như vậy và chỉ dừng lại việc này khi dữ liệu tới các node
là node lá của cây.
Hình 11. Truyền tin multicast trong group Scribe
Giả sử như hình vẽ ở trên Sender là node cần gửi dữ liệu cho cây multicast có
gốc là 1100. Nó sẽ gửi gói tin route(MULTICAST,1100), node 1100 nhận được gói tin
và trả lại cho sender địa chỉ ip của nó từ lúc này sender giao tiếp với node gốc này
thông qua ip (bây giờ là quan hệ trong giao thức tcp/ip chứ không liên quan gì đến
pastry hay p2p gì cả). Sender gửi dữ liệu cho node gốc 1100 node này sẽ tạo một bản
sao dữ liệu và gửi cho con của nó là 1101. Node 1101 nhận được dữ liệu từ root, nó
cũng sẽ tạo một bản sao và gửi cho 1001 là con của nó. Node 1001 lại tiếp tục copy dữ
liệu và gửi cho 0111 và 0100 là thành viên trong bảng children table của nó. Khi các
21
node 0100 và 0111 nhận được giữ liệu thì vì nó là lá của cây multicast nên nó không
làm gì nữa.
Trong vấn đề truyền dữ liệu multicast này có một điểm thú vị là khi sender muốn
gửi dữ liệu multicast tới group nó lại phải xin và nhận IP của node gốc rồi để sau đó
giao tiếp với node này dựa vào IP mà không sử dụng luôn giao thức Pastry để gửi dữ
liệu. Đơn giản là việc định tuyến cũng như gửi tin thông qua Pastry là một việc rất tốn
thời gian và tài nguyên mạng, mà bình thường một sender không chỉ gửi một gói tin
multicast tới mạng, mà nó sẽ gửi một số hoặc nhiều gói, do đó việc sender lưu IP của
node root và gửi gói tin trực tiếp sẽ tiết kiệm được thời gian cũng như tài nguyên của
mạng. Tuy nhiên nếu node gốc bị lỗi hoặc bị rời khỏi mạng thì sender phải tìm lại IP
của node root mới và tiếp tục việc truyền thông tin
Sửa cây multicast
Vì Scribe làm việc trong môi trường mạng mang, do đó muốn duy trì được sử ổn
định của group, phải có những cơ chế hợp lý để giải quyết các vấn đề thường gặp phải
trong mạng ngang hàng. Phần này sẽ đi sâu vào việc làm sao để sửa chữa một cây
multicast khi một node bị rời khỏi mạng.
Trong Scribe node cha sẽ định kỳ gửi các gói tin hearbeat tới node con của nó
nhằm thông báo sự tồn tại của mình trong cây. Nếu node con không nhận được gói tin
heartbeat do cha nó gửi tới trong một thời gian nào đó, nó sẽ xem như node cha của nó
bị lỗi. Và nó sẽ tự động tìm một node cha khác thay thế, bằng cách gửi thông điệp
JOIN với key là groupId của group hiện tại (quá trình này giống với quá trình join vào
group).
Hình 12. Quá trình tự sửa cây multicast
22
Giả dụ như hình vẽ trên ban đầu ta có cây multicast với gốc là node 1100 trong
cây node 1001 có cha là node 1101. Khi node 1001 không nhận được heartbeat của
1101 trong một khoảng thời gian nào đó nó sẽ xem như 1101 bị lỗi và nó sẽ tự động
gửi gói tin route(JOIN,groupId). Tiếp theo giống như trong quá trình jon group. Cây
multicast sẽ được xây dựng lại và bây giờ thì node 1001 nhận một node mới là 1111 là
cha mới của nó (như hình vẽ).
Trong trường hợp node gốc bị lỗi. Thì các con của nó cũng sẽ chạy giải thuật như
trên khi đó giải thuật Pastry sẽ tự chọn ra một node gốc mới có nodeId gần nhất (tính
theo hiện thời) với groupId và group sẽ lại được duy trì như bình thường.
Vì khả năng chống lỗi cao như thế này, Scribe luôn có tính sẵn sàng cao và
chống chịu lỗi tốt, cho dù có nhiều node lỗi cùng một lúc thì sau một thời gian ngắn
cây multicast lại được xây dựng lại và ổn định như trước.
Splitstream
Splistream có thể xem như là việc chọn lựa các cây Scrbie để tạo nên cây
multicast đa luồng. Việc chọn lựa các cây Scribe sẽ dễ dàng tạo nên cây multcast đa
luồng với tính chất : 1 node là node trong của 1 luồng sẽ là node lá trong các luồng còn
lại
Hình 13. Splitstream F luồng
Việc xây dựng các luồng là khá đơn giản. Như ở trên hình 3 với không gian
Pastry được đánh địa chỉ các node gồm F ký tự. Splitstream sẽ chọn ra các luồng có
tên là 0x , 1x , … Fx để các node sau khi gia nhập vào cây multicast đa luồng có thể
đảm bảo. Node có id bắt đầu là 0x sẽ là node trong của cây multicast stripeId 0x và là
node lá của tất cả các luồng còn lại. Tương tự Node có id bắt đầu là 1x se là node trong
của cây multicast stripeId 1x và là lá của tất cả các luồng còn lại…
23
Tuy nhiên Splitstream sẽ gặp vấn đề tại các máy( peer ) tham gia mà nếu chỉ đơn
thuần lựa chọn các cây Scribe để truyền các luồng vào thì là chưa đủ đáp ứng tính chất
multicast :
Không giới hạn dc băng thông đi ra của 1 peer do nhu cầu join của các peer
khác: khi 1 peer đã bị vượt quá băng thông giới hạn đi ra thì các peer khác vẫn
muốn gia nhập vào luồng của peer này. Nếu vẫn duy trì cơ chế như cây Scribe
thì sẽ có 1 số peer thật sự không nhận được dữ liệu từ 1 vài luồng do node cha
của nó không gửi dữ liệu thực sự đến cho nó
Splistream sử dụng cơ chế mới để giải quyết vấn đề tại các node mà băng thông
đi ra đã bị vượt quá giới hạn. Cơ chế này bao gồm các bước :
B1. Xác định node cha:
Hình 14. Xác định node cha khi băng thông đi ra vượt quá giới hạn
Trong ví dụ trên node với id 080* đã bị limit outdegree ( băng thông đi
qua vượt quá giới hạn ) thì nhận được yêu cầu join vào của node với id 001* ở
luồng 0800. Node 080* sẽ xem xét lại tất cả các node con của nó để loại đi 1
node con. Hình 14.(1)-(2) là trường hợp có node con 9* nhận node 080* làm
cha trong luồng 1800 khác với luồng 0800. Node 080* sẽ nhận node 001* làm
con và loại bỏ node 9*. Sau đó node 085* lại yêu cầu join vào node 080* .Hình
14.(3)-(4) là trường hợp các node con đều nhận 080* là cha trong luồng 0800 ,
xét đến id của các node con. Node 001* la node có id với số ký tự tính từ trái
24
sang phải khác với luồng 0800 nhất. Node 001* sẽ trở thành node orphan và
node 085* được nhận làm node con.
B2. Nếu sau Bước 1 vẫn có node orphan (tức là node chưa tìm được node cha)
sẽ tiến hành bước này. Node orphan sẽ gửi unicast đến SCG (Spare Capacity
Group) để tìm được node cha. SCG là tập hợp tất cả các node mà băng thông đi
ra chưa vượt quá giới hạn . Với cơ chế truyền unicast , node orphan sẽ gửi
thông điệp tìm node có luồng mà băng thông đi ra chưa vượt quá giới hạn để
nhận nó làm node cha.
Ƣu điểm : xây dưṇg cây multicast đa luồng khá đơn giản dưạ vào kết cấu có sẵn
của Pastry và Scribe . Khi maṇg ổn điṇh và việc phân chia định danh là khá đều thì các
node trong hê ̣thống chiụ tải tương đương nhau . Thêm vào đó là các cơ chế tìm node
cha nhằm đảm bảo các node trong maṇg không bi ̣ quá tải .
Nhƣơc̣ điểm : không đảm bảo đươc̣ đô ̣chênh lêc̣h đô ̣trê ̃các luồng nhâṇ đươc̣ taị
các node là nhỏ do việc tạo cây Scribe mang tính ngẫu nhiên dựa chủ yếu vào kết cấu
bên dưới của Pastry.
25
Chƣơng 3.Xây dựng cây multicast đa luồng thời gian thực
trên mạng ngang hàng có cấu trúc
Sau khi đã nghiên cứu các giải pháp hiện nay về truyền tin multicast đa luồng với
các ưu nhược điểm riêng khi ứng dụng sang truyền tin multicast đa luồng thời gian
thực thì ở chương ba này sẽ là giải pháp mà tôi đưa ra trong khóa luận. Giải pháp này
đã hướng đến mục tiêu là truyền tin multicast đa luồng thời gian thực ngay từ đầu nên
nó sẽ có những ưu điểm riêng. Tuy nhiên bên cạnh đó cũng có những nhược điểm nhất
định. Phần đánh giá về chương trình mô phỏng sẽ được trình bày ở chương bốn. Giải
pháp này được xây dựng dựa trên giao thức DHT tham khảo bảng định tuyến của
Chord..
3.1.Vấn đề cần giải quyết
Mục tiêu lớn nhất khi xây dựng cây multicast đa luồng thời gian thực trong mạng
ngang hàng có cấu trúc là:
Xây dựng cây multicast đa luồng
Duy trì cây mulitcast khi mạng thay đổi
Cân bằng băng thông đi ra tại các node trong mạng : hạn chế các node không
gửi dữ liệu cho node nào , các node phải gửi nhiều hơn số luồng giới hạn là
không quá lớn
Độ trễ của một node khi nhận được tất cả các luồng là nhỏ
Chênh lệch độ trễ tại một node giữa luồng nhận được sớm nhất và nhận được
muộn nhất là nhỏ (đây chính là mục tiêu quan trọng nhất của thiết kế)
Trong khuôn khổ khóa luận giới hạn nên giải pháp của tôi đưa ra mới chỉ là bước
đầu , chưa được tối ưu hóa để có thể đáp ứng tất cả các vấn đề cần giải quyết. Quá
trình chạy chương trình mô phỏng tuy chưa được tốt như mong muốn nhưng đã cho
thấy kết quả khả quan và cho thấy khả năng phát triển của giải pháp này.
3.2.Ý tƣởng
Ý tưởng đưa ra được dựa trên thiết kế chính của Chord với các ưu điểm:
26
Đảm bảo rằng khi 1 node muốn gửi dữ liệu đến 1 điểm nào đó trên vòng tròn
định danh thì chắc chắn sẽ có 1 node thực sự đảm nhiệm việc quản lý vị trí đó
(đây chính là việc tìm Successor trọng mô hình Chord)
Việc xây dựng bảng Finger Table một cách thông minh để đảm bảo 1 node
muốn tìm 1 node khác bất kỳ trên vòng tròn định danh thì chỉ phải mất tối đa
log2n bước.
Các ưu điểm trên của Chord sẽ được áp dụng vào thiết kế bảng Finger Table tại
các node trong mạng.
Vấn đề chính là cách xây dựng và phân chia luồng để giải quyết các vấn đề đặt ra
trong vòng tròn định danh với 2 ý tưởng cơ bản :
Mỗi node sẽ kiếm soát vùng gần và vùng xa. Sau đó phân chia các vùng gần
vùng xa ấy cho các node con tùy thuộc vào số con mà nó có. Việc xây dựng đệ
quy như thế sẽ chia nhỏ dần các vùng và đảm bảo tất cả các node có mặt trong
mạng đều nhận được dữ liệu. Sau khi đã xác định được các node con thì các
node đó sẽ được lưu vào bảng Finger Table để lần truyền dữ liệu tiếp theo diễn
ra nhanh chóng
Các node gốc gửi đi các luồng sẽ đảm nhiệm các vùng gần và vùng xa đan xen
nhau nhằm đảm bảo tính hiệu quả của quá trình xây dựng cây multicast
Hình 15. Phân chia vùng gần vùng xa cho các node con
Hình 15 thể hiện ý tưởng cơ bản của việc phân chia các vùng gần và vùng xa.
27
Trong ví dụ có 4 node gốc sẽ gửi đi 4 luồng.
Node Source 1 đảm nhiệm vùng gần (source 1 , source 2) : tức là nó sẽ là node
gốc trong luồng 1 và các node nằm trong vùng định danh từ source 1 đến source 2 sẽ
là các node con và cháu. Đồng thời Node Source 1 đảm nhiệm vùng xa (source 2 ,
source 1). Source 1 sẽ gửi đến 1 node trong vùng xa từ source 2 đến source 1. Lần lượt
các node con cháu của source 1 cũng sẽ gửi đến 1 node trong vùng xa từ source 2 đến
source 1 bằng việc làm nhỏ dần các vùng xa.
Trong ví dụ source 1 sẽ gửi dữ liệu đến cho 3 node con vùng gần và 1 node con
vùng xa. 3 node con vùng gần này sẽ đảm nhiệm các vùng gần và vùng xa nhỏ dần.
Tương tự với các node source 2, 3 , 4.
3.3.Thiết kế giải pháp
Bây giờ ta sẽ đi vào chi tiết giải pháp gồm 2 phần chính là xây dựng cây
multicast và duy trì nó trong trường hợp các node rời mạng.
Quá trình join và leave của các node trong mạng giống hệt như thiết kế trong
mạng Chord. Quá trình tạo mới bảng Finger Table chỉ diễn ra khi xây dựng cây
multicast.
Ta sẽ tìm hiểu qua về việc xây dựng bảng Finger Table của các node và cách tìm
kiếm successor trong Chord
Chord được mô tả dưới dạng một vòng tròn và có không gian định danh cỡ N,
với N là số bit định danh của không gian. Mạng Chord sẽ có thế chứa tối đa 2 mũ N
Chord nút. Một Chord nút (hay một nút - một máy tính trong mạng Chord) có một
định danh id, và các id trong mạng Chord sắp xếp thành vòng tròn và tăng theo chiều
kim đồng hồ. Chord sử dụng một hàm băm để sinh định danh cho nút và tài liệu, đầu
ra của hàm băm là một giá trị N bit. Để đảm bảo xác suất định danh trùng nhau là thấp,
N phải đủ lớn. Với Chord, N thường là 160 bit. Một nút trỏ tới nút tiếp theo là nút có
id lớn hơn, được gọi là Successor(id), và một nút nữa có id nhỏ hơn, được gọi là
Predecessor(id). Các nút liên kết với nhau dựa vào Succcessor và Predecessor của nó.
28
Hình 16. Bảng Finger Table trong Chord
Mỗi nút sẽ lưu một bảng định tuyến gọi là Finger Table (Hình 16). Thay vì phải
tìm kiếm tuyến tính, bảng định tuyến cho phép một nút định tuyến tới các nút ở xa.
Mỗi dòng trong bảng Finger Table sẽ lưu thông tin về 1 nút ở xa, gọi là 1 liên kết
(entry). Entry thứ i sẽ lưu nút là successor của khóa có định danh cách định danh nút
đang xét 2i theo chiều tiến của vòng Chord. Vì vậy, không gian định danh có bao nhiêu
bit thì Finger Table có bấy nhiêu entry.
Chord ánh xạ các khóa vào các nút, thường sẽ là một cặp key và value. Một value
có thể là 1 address, 1 văn bản, hoặc 1 mục dữ liệu. Chord có thể thực hiện chức năng
này bằng cách lưu các cặp key/value ở các nút mà key được ánh xạ (Hình 17). Một nút
sẽ chịu trách nhiệm lưu giữ một khóa k nếu nút đó là nút có định danh id nhỏ nhất và
lớn hơn k. Một nút khi lưu giữ khóa k cũng sẽ được gọi là Successor(k).
Khi một nút cần tìm kiếm một khóa có định danh id, nút đó sẽ tìm nút chịu trách
nhiệm lưu giữ id đó. Nếu nút ở xa so với vị trí của nút lưu giữ id, nút có thể nhờ vào
thông tin trong bảng Finger Table để định tuyến đến các nút xa hơn, từ đó dần dần biết
được nút chịu trách lưu giữ id.
Một ví dụ được chỉ trong hình 17, giả sử nút 3 muốn tìm successor của ID (hoặc
còn có thể coi là khóa) 1. ID 1 thuộc khoảng [7, 3), tức là 3.finger[3].interval. nút 3
kiểm tra entry thứ 3 trong bảng định tuyến của nó, là 0. Bởi vì 0 trước 1, nút 3 sẽ hỏi
nút 0 để tìm successor của 1. Quay trờ lại, nút 0 sẽ suy ra từ bảng định tuyển rằng
successor của 1 chính là nút 1, và trả về nút 1 cho nút 3.
29
Hình 17.Lưu giữ key trong mạng Chord
3.3.1.Xây dựng cây multicast
Quá trình này bắt đầu từ 1 node gốc.
Giả sử muốn xây dựng cây multicast k luồng. Đầu tiên các luồng sẽ được lựa
chọn đưa vào k node gốc. Từ đây các node gốc này sẽ gửi dữ liệu đi khắp các node
trong mạng.
Trong Hình 18 là ví dụ với cây multicast 5 luồng. Node 1 sẽ là node gốc để
truyền dữ liệu của luống 1 đến các node trong mạng. Node 1 này sẽ đảm nhiệm vùng
gần từ idNode1 đến
5
21 NidNode
và vùng xa từ
5
21 NidNode
cho đến idNode1. Với
N là số bit của không gian định danh. Việc đặt vùng gần và vùng xa cho node gốc đã
đảm bảo chiếm hết vùng không gian định danh có thể để chắc chắn các node trong
mạng đều nhận được dữ liệu
Đầu tiên node 1 sẽ tìm successor của vị trí
5
21 NidNode
. Nếu successor của vị trí
này không nằm ngoài khoảng vùng xa thì nó sẽ là node con vùng xa của node 1. Trên
hình ta tìm được node 15.
Node 1 sẽ chia vùng không gian của nó thành k - 1 = 4 vùng bằng nhau và xác
định id tại các điểm đó. Sau đó node 1 tiến hành tìm successor của chính nó và
successor tại các vị trí id mình đã chia 4 ở trên (trên hình vẽ là các vị trí đánh dấu x).
Do thiết kế của mạng Chord nên có thể trong quá trình tìm kiếm không tìm được đủ 4
30
node con ở vùng gần. Node 1 sẽ tùy vào số node con mà gán vùng xa và vùng gần cho
các node con tiếp theo.
Trong hình ta tìm được 4 node con vùng gần là node 11 , 12 , 13 , 14. Bây giờ
các node con sẽ lần lượt được giao nhiệm vụ quản lý các vùng gần và xa như sau.
Node 11 sẽ kiểm soát vùng gần từ idNode11 đến vị trí X thứ 1 , Node 12 sẽ kiểm soát
vùng gần từ idNode12 đến vị trí X thứ 2 , Node 13 sẽ kiểm soát vùng gần từ idNode13
đến vị trí X thứ 3 và Node14 sẽ kiểm soát vùng gần từ idNode14 đến
5
21 NidNode
.
Hình 18.Tìm các node con gần và node con xa
Vùng xa từ idNode15 đến idNode1 cũng được chia ra 4 phần và đặt cho các node
con.
Node 11 kiểm soát vùng xa idNode15 đến vị trí X thứ 4 , Node 12 kiểm soát
vùng xa từ vị trí X thứ 4 đến vị trí X thứ 5 , Node 13 kiểm soát vùng xa từ vị trí X thứ
5 đến vị trí X thứ 6 , Node 14 kiểm soát vùng xa từ vị trí X thứ 6 đến idNode1.
Như vậy node 1 đã xác định được các node con và giao nhiệm vụ cho các node
con đó. Sau quá trình này các node con sẽ được lưu vào bảng Finger Table vào 4 dòng
thêm vào :
Successor(
5
21 NidNode
)= idNode15;
Successor(idNode1) = idNode11;
31
Successor(X1) = idNode12;
Successor(X2) = idNode13;
Successor(X3) = idNode14;
Các node 11 , 12 , 13 , 14 tiếp tục tìm các node con trong vùng gần và vùng xa
của nó tương tự như thế.
Quá trình này sẽ dừng lại khi 1 node không có node con gần nữa mà nó vẫn còn
1 vùng xa kiểm soát. Node này sẽ gửi unicast đến từng node trong vùng này bằng cách
tìm Successor lần lượt của các node. Việc gửi unicast đến từng node có thể là quá lớn
nên sẽ có 1 phương pháp nữa là các node không có node con gần sẽ gửi đến cho 5
node xa trong vùng xa và giao nhiệm vụ cho node cuối cùng tiếp tục gửi đi cho 5 node
xa tiếp theo cho đến khi hết vùng xa.
Cách xây dựng này sẽ không kiểm soát được tính cân bằng của cây multicast.
Trong trường hợp tốt nhất là các node được phân bố đồng đều trên vùng không gian
định danh id thì cây multicast xây dựng này sẽ rất tốt. Các node đồng cấp trên các
luồng cây multicast khác nhau sẽ có chênh lệch độ trễ giữa các luồng là rất thấp (chỉ
khoảng 1-3 bước).
Hình 19. Node nhận được các luồng
Hình 19 cho ta cái nhìn trực quan về một Node K khi nhận được các luồng.
Trong luồng của chính nó (tức là nó là node trong ) sẽ mất 1 bước để K nhận được dữ
liệu. Trong luồng thứ 2, 3, 4 (các luồng mà nó là node lá) sẽ mất 2 bước để K nhận
được dữ liệu do việc phân chia vùng đồng đều như trên. Giao thức DHT và quá trình
32
random có thể phần nào đảm bào được tính đồng đều khi phân chia dịnh danh trên
vòng tròn định danh.
3.3.2.Duy trì cây multicast khi có node rời khỏi mạng
Khi 1 node rời khỏi mạng thì các node con cháu của nó sẽ không tiếp tục nhận
được dữ liệu và các node con cháu đó sẽ cần phải có node cha mới.
Hình 20. Sửa cây multicast khi có node rời khỏi mạng
Hình 20 là ví dụ Node 4 rời khỏi mạng. Các node con trực tiếp của nó sẽ tìm
node cha mới. Node 0 trong quá trình cập nhật bảng định tuyến biết được node 4 là
node con của nó đã rời khỏi mạng. Các node con của node 4 sẽ gửi yêu cầu tìm node
cha mới đến node 0 (idNode0 đã được lưu vào bảng định tuyến của các node này).
Node 0 sẽ gửi thông điệp tìm node cha mới của các node con này đến node lá của 1
nhánh node con nào đó của nó. Ở đây node cha mới tìm được là Node M. Quá trình
tìm kiếm mất logkn bước với n là số các node con của node 1. Node M sẽ cập nhật
các node con mới của nó vào bảng định tuyến. Các node cháu trong vùng nét đứt sẽ
không có ảnh hưởng gì vì với việc thiết kế truyền tin multicast mỗi node chỉ cần biết
các node con trực tiếp của nó.
Việc tìm node lá trong 1 nhánh node con sẽ đảm bảo node lá không phải tải
băng thông đi ra quá lớn.Tuy nhiên việc tìm node lá sẽ cần mất logkn bước cũng là 1
yếu điểm của việc duy trì cây multicast này.
33
Chƣơng 4.Mô phỏng và đánh giá
Việc mô phỏng và đánh giá là bước rất quan trọng để xem xét tính khả thi của
giải pháp đặt ra. Nếu mô phỏng cho kết quả tốt thì giải thuật đưa ra có thể khả thi để
ứng dụng vào thực tế. Xây dụng mạng mô phỏng giống với thực tế là rất khó do tính
phức tạp trong hệ thống mạng ngang hàng có cấu trúc. Trong khóa luận trước của anh
Đặng Ngọc Bền đã xây dựng lên 1 mô hình mạng khá tốt , đáp ứng phần nào tính phức
tạp trên lý thuyết nên tôi đã sử dụng cấu trúc mạng của anh nhằm phát triển cho khóa
luận của mình. Sau đây là chi tiết về chương trình mô phỏng
4.1. Chƣơng trình mô phỏng
Chương trình mô phỏng gồm hai phần chính là dữ liệu và thực thi. Phần dữ liệu
bao gồm các loại dữ liệu và phần mã nguồn chương trình tạo ra chúng. Thực thi chính
là phần mô tả hoạt động của mạng ngang hàng dựa trên giao thức DHT và quá trình
truyền tin multicast đa luồng trong mạng. Ngoài ra còn phải kể đến kiến trúc mạng mô
phỏng cho tầng dưới – tầng liên kết vật lý.
4.1.1.Kiến trúc mạng mô phỏng
Để có thể thực hiện được quá trình mô phỏng, trước tiên chúng ta cần có một mô
hình mạng tầng liên kết vật lý với thời gian trễ giữa các nút trên mạng. Topo của mạng
mô phỏng rất quan trọng vì nó quyết định việc thử nghiệm, kết quả và đánh giá hiệu
năng của những cải tiến.
Hình 21. Mô hình mạng thực tế
34
Mô hình mạng mô phỏng được xây dựng sau đây phần nào sẽ thể hiện được tính
phức tạp và không ổn định trên Internet của độ trễ giữa các nút (gây ra do khoảng cách
vật lý , môi trường đường truyền). Cụ thể như sau :
- Các node tham gia vào mạng sẽ nằm được xét nằm trong một miền nhất định.
Mỗi một miền sẽ có 1 node switch được xem là node trung tâm và các node khác sẽ
liên lạc với các node bên ngoài miền thông qua switch này.
- Từ đó việc xác định độ trễ giữa 2 node bất kỳ trong mạng được tính bằng độ
trễ nội miền của node 1 + độ trễ nội miền của node 2 + độ trễ liên miền 1 và 2. Trong
đó độ trễ nội miền của 1 node được tính bằng độ trễ từ node đó đến node switch của
miền , độ trễ liên miền được cố định từ đầu và được xem là độ trễ giữa 2 switch của 2
miền đó.
- Độ trễ liên miền được cố định từ đầu , độ trễ nội miền của 1 node sẽ được
thay đổi trong quá trình sinh mới dữ liệu nhằm phần nào thể hiện tính không ổn định
của độ trễ trên Internet.
4.1.2.Các tham số trong mạng mô phỏng
Các đối tượng tham gia mô hình mạng :
Area:
Đối tượng này lưu trữ tên miền , các thao tác với tệp dữ liệu miền , quan trọng nhất
là xác định độ trễ liên miền
NodeLocation
Xác định một node nằm trong vùng nào.
FingerEntry
Thể hiện một liên kết (entry) trong bảng định tuyến. Thuộc tính idSuccessor với ý
nghĩa là định danh successor của khóa mục tiêu tại entry đang xét. Khi định tuyến
chúng ta quan tâm đến thuộc tính này. Các finger entry thiết kế trong giải pháp này
mới chỉ dùng lại của Chord , chưa thêm vào trong quá trình truyền tin multicast
như mong muốn. Do quá trình truyền tin multicast sẽ được thực hiện khi đã ổn
định mạng nên việc thêm vị trí các node con vào bảng định tuyến là không cần
thiết nên sẽ không được thể hiện trong chương trình mô phỏng này.
Node
Lưu trữ các dữ liệu và các đối tượng con của một node bao gồm : định danh của
node , successor, predecessor , bảng định tuyến , mảng vùng gần , vùng xa (sẽ được
35
đặt đệ quy từ các node cha cho các node con) , thời gian trễ nhận được của các
luồng (đây là thông tin để xác định tính hiệu quả của giải pháp về độ trễ) ,
outbound bandwith – băng thông đi ra (thông tin xác định số luồng ra mà 1 node
phải gửi).
Các phương thức quan trọng: nextNode(): tìm node tiếp theo dựa vào bảng định
tuyến , setFarRegion , setNearRegion , setDelayTime , setOutBandwith : là những
hàm đặt xác định khoảng xa , gần , độ trễ , băng thông đi ra tại mỗi node.
Network
Đây là đối tượng chính, cơ bản nhất trong chương trình mô phỏng. Đối tượng lưu
trữ thông tin tạo lên một topo mạng mô phỏng, thể hiện quá trình churn (join, leave
của node khi tham gia vào mạng), multicastMsg (truyền tin multicast k luồng khi
mạng đã ổn định). Các phương thức cơ bản :
- birth(), death(): Thực hiên khi có một nút tham gia hay rời khỏi mạng.
- fixFingerTables(): Cập nhật bảng định tuyến của tất cả các nút trong mạng.
Hàm thực hiện sau khi có một loạt quá trình vào ra của các nút làm cho bảng định
tuyến trở lên lỗi thời.
- findSuccessor(): Tìm successor của một nút.
- findChildNode(): Tìm các node con của 1 node và thực hiện các thao tác gán
vùng cho các node con đó .
- sendMsg() : Truyền tin multicast đến 1 node.
- multicastMsg() : Là hàm quan trọng nhất. Hàm này sẽ truyền tin multicast đến
các node gốc và từ đây đệ quy đến tất cả các node con trong mạng
InputGenerator
Đối tượng chứa các phương thức để tạo ra các tệp dữ liệu như đã mô tả phần trên.
Dữ liệu để cho chương trình có thể vận hành gồm bốn tệp, tương đương có bốn
phương thức tạo tệp riêng. Các dữ liệu miền, dữ liệu nút và truy vấn được sinh theo
phân bố đều một cách ngẫu nhiên với các giá trị giới hạn là các tham số mô tả
trong lời gọi phương thức. Riêng dữ liệu về độ bất ổn (churn) được sinh theo luật
phân bố Pareto. Đây là luật phân bố khá phổ biển và đúng đắn trong nhiều lĩnh vực.
Distribution
Đây là đối tượng cho phép sinh các giá trị theo luật phân bố Pareto như đã nêu. Sau
36
khi khởi tạo bằng các hằng số đặc trưng cho loại phân bố này, đối tượng cho phép
sinh một giá trị theo luật bằng phương thức next().
Thƣ viện hash
Một thư viện nhỏ chứa hàm băm sha-1. Thư viện là mã nguồn mở với hai hàm băm
tiêu biểu là sha và md5. Riêng sha, thư viện cung cấp nhiều hơn một hàm, do yêu
cầu số lượng bit của kết quả (160, 256, 512,…). Do nhu cầu sử dụng là nhỏ nên
chương trinhg mô phỏng chỉ thêm hàm băm sha với số lượng bit của kết quả là 160.
Thư viện sử dụng khá dễ dàng với API là các phương thức mô tả đơn giản.
Các hàm toán học
Khá nhiều hàm liên quan đến toán học và những con số. Những hàm này rất cần
thiết, phục vụ hầu hết các quá trình tính toán trong chương trình. Đáng kể là hàm
băm hash(). Đầu vào của hàm là tên của một nút, đầu ra là một định danh 32 bit.
Chương trình mô phỏng chỉ sử dụng không gian định danh 32 bit vì nhu cầu chỉ
cần như vậy. 32 bit này được trích từ những bit đầu tiên của giá trị băm có được từ
thư viện hashlib++ [12] với 160 bit độ dài.
4.2.Kết quả và đánh giá
Đây là phần trình bày kết quả và đánh giá sau khi thực thi chương trình mô
phỏng. Quá trình sẽ so sánh kết quả đạt được khi thực hiện với lần lượt 1037 , 2098
node tham gia và chia ra 4 , 8 , 16 luồng.
4.2.1.Hiệu quả độ chênh lệch số hop nhận đƣợc các luồng tại các node
Chương trình thử nghiệm với 2048 node tham gia vào 16 miền. Sau quá trình vào
ra mạng ổn định với 1014 node. Đồ thị biểu diễn độ chênh lệch của 1014 node này khi
chia ra 4 , 8 , 16 luồng.
37
Hình 22. Chênh lệch hop lớn nhất giữa các luồng với 1014 node
Trục tung là số hop chênh lệch lớn nhất nhận được các luồng tại các node trong
khoảng từ 0 đến 6.
Theo kết quả mô phỏng nhận được : dù chia ra 4 , 8 , 16 luồng thì chênh lệch hop
lớn nhất giữa các luồng nhận được tại các node đều rất nhỏ và chủ yếu tập trung ở 1 ,
2 , 3 hop , các node khác nhận được chênh lệch cao hơn từ 4 đến 6 là rất ít.
Việc tăng các luồng lên làm cho số node chênh lêc̣h 2 hop giữa các luồng nhâṇ
đươc̣ tăng lên. Tuy nhiên viêc̣ tăng luồng laị làm giảm các node nhâṇ đươc̣ các luồng
chênh lêc̣h lớn (4 , 5 , 6).
Các kết quả nhận được đã cho thấy hiệu quả cao và phù hợp với lý thuyết đề ra.
Có thể thấy việc phân bố các node trên vòng tròn định danh là khá đồng đều nên chênh
lệch giữa các luồng nhận được là bé (do các node đồng cấp giữa các luồng cây
multicast khác nhau có xác suất gửi trực tiếp cho nhau khá cao).
Chương trình thử nghiệm với 4096 node tham gia 32 miền. Sau khi các node vào
ra thì mạng ổn định với 2072 node.
38
Hình 23. Chênh lệch hop lớn nhất giữa các luồng với 2072 node
Thử nghiệm với 2072 node vâñ thể hiêṇ tính hiệu quả của giải thuật . Khi chia
thành nhiều luồng hơn thì chênh lệch các hop lại càng tâp̣ trung ở mức 2. Nghĩa là các
node trên maṇg có xu hướng nhâṇ đươc̣ các luồng chênh lêc̣h nhau 2 hop khi ta tăng
số luồng lên.
Kết quả mô phỏng nhâṇ đươc̣ đa ̃cho thấy hiêụ quả khá tốt về viêc̣ làm giảm
chênh lêc̣h hop giữa các luồng nhằm đảm bảo chất lươṇg truyền tin multicast đề ra.
4.2.2.Hiệu quả độ cân bằng tải trên toàn hệ thống
Thử nghiệm với 2048 node tham gia 16 miền. Mạng ổn định có 1014 node.
Hình 24. Hiệu quả cân bằng tải với 1014 node
39
Kết quả trên chỉ ra số luồng trung bình 1 node phải gửi đi taị 1 thời điểm. Có thể
thấy hầu hết các node đều đóng góp vào hê ̣thống toà n maṇg. Giải pháp đưa ra không
hướng tới tính đồng đều về cân bằng tải mà chỉ hướng tới haṇ chế chênh lêc̣h hop nhâṇ
đươc̣ giữa các luồng nên không có nhiều nhâṇ xét về đồ thi ̣ này .
Thử nghiệm với 4096 node tham gia 32 miền. Mạng ổn định có 2072 node.
Hình 25. Hiệu quả cân bằng tải với 2072 node
Kết quả thu được tương tự như với 1014 node. Với 2072 node , các node trong
mạng hầu như đều có đóng góp.
40
Chƣơng 5.Kết luận
5.1.Kết luận
Khóa luận đã đưa ra cái nhìn tổng quan về truyền tin multicast trên mạng ngang
hàng có cấu trúc và tiềm năng phát triển các ứng dụng này trong thời gian tới . Với viêc̣
đánh giá Splitsream và dưạ vào kiến thức cơ bản của mô hình maṇg ngang hàn g cũng
như truyền tin multicast khóa luâṇ đa ̃chỉ ra đươc̣ những vấn đề cần đươc̣ giải quyết
như chênh lêc̣h thời gian trê ̃giữa các luồng nhâṇ đươc̣ , đô ̣trê ̃trên toàn maṇg nhằm
nâng cao hiêụ suất của truyền tin multicast đa luồng thời gian thưc̣.
Dưạ vào các yêu cầu đăṭ ra đó , khóa luận đã đề ra một giải pháp mới về việc xây
dưṇg môṭ mô hình truyền tin multcast đ a luồng thời gian thưc̣ dưạ trên giao thức DHT .
Bàng định tuyến của thiết kế này dựa vào ý tưởng của Chord đã tỏ ra có hiệu quả đối
với môi trường không ổn điṇh như của maṇg ngang hàng có cấu trúc . Ý tưởng chủ đạo
của giải pháp là các node xác định được các node con của nó trong mỗi môṭ luồng
multicast và ghi vào bảng định tuyến. Cách thiết kế phân vùng quản lý nhằm tìm ra các
node con môṭ cách hiêụ quả dưạ trên vòng tròn điṇh danh đa ̃đưa tới môṭ xác suất cao
các node con đồng cấp ở các luồng multicast khác nhau sẽ có xu hướng truyền dữ liêụ
cho nhau.
Khóa luận cũng trình bày chương trình mô phỏng để đánh giá giải pháp đưa ra và
đa ̃cho thấy kết quả khá tốt khi cho thấy phần lớn các node trên toàn maṇg có đô ̣chênh
lêc̣h hop giữa các luồng nhâṇ đươc̣ là nhỏ (1 – 3 hop). Thử nghiêṃ với 2032 node ứng
với 16 miền , sau khi maṇg ổn điṇh có 1014 node và 4096 node ứng với 32 miền , sau
khi maṇg ổn điṇh có 2072 node.
5.2.Hƣớng phát triển tiếp theo của đề tài
Kết quả mô phỏng đa ̃cho thấy tiềm năng của giải pháp đưa ra , tuy nhiên đấy chỉ
là một mạng mô phỏng không thể hiện được rõ sự phức tạp như môi trường Internet
thưc̣ tế.
Vì thế hướng phát triền tiếp theo của đề tài phải nhằm đến tối ưu hó a giải pháp
trên Internet với các điṇh hướng như sau:
Tối ưu hóa giao thức DHT nhằm phân vùng các điṇh danh trên vòng tròn môṭ cách
đồng đều . Viêc̣ phân vùng này càng tốt thì tính hiêụ quả của giải pháp càng đươc̣
tăng lên.
41
Cải tiến việc phân vùng sao cho hiệu quả . Với ý tưởng phân vùng là chính thì trong
chương trình mô phỏng đa ̃sử duṇg viêc̣ phân vùng dưạ vào viêc̣ chia đều các
khoảng (tức là các node cùng cấp trong cùng cây multicast se ̃có cá c vùng kiểm
soát nhằm xác định node con đều nhau ). Viêc̣ phân vùng này nếu găp̣ trường hơp̣
các node phân bố không đồng đều sẽ làm cây multicast có độ cao lớn hơn mong
đơị. Vì thế có thể hướng tới một cách phân vùng không đều nhằm đưa đến hiêụ quả
cao hơn.
Viêc̣ câp̣ nhâṭ laị bảng điṇh tuyến để xây dưṇg laị cây multicast khi có node vào ra
chịu độ trễ khá lớn logkn . Cách sửa cây multicast do vậy cần phải được tối ưu hơn .
42
Tài liệu tham khảo
Tiếng Việt
[1] Đặng Ngọc Bền – Tối ưu hóa topology cho maṇg ngang hàng có cấu trúc Chord .
June 2009
Tiếng Anh
[2] Antony Rowstron et. el. “Pastry : scalable , distributed object location and
routing for large-scale peer-to-peer system”
[3] Dapeng Wu et. el., “Streaming Video over the Internet: Approaches and
Directions”, IEEE Trans. Circuit and Systems, 2001
[4] Ion Stoica et. el. “Chord : A scalable peer-to-peer lookup service for internet
applications. SIGCOMM‟01. ACM, New York. 2001.
[5] Miguel Castro et. el. “Scribe : A large-scale and decentralized application-level
multicast infrastructure”
[6] Miguel Castro et.el., “SplitStream: High-Bandwidth Multicast in Cooperative
environments”, SOSP‟03
[7] Suman Banerjee et. el “A comparative Study of Application Layer Multicast
Protocol
[8] Zhengye et.el. , “Using Layered Video to Provide Incentives in P2P Live
Streaming”, IPTV-2007
43
Phụ lục A
A.1. Định dạng dữ liệu
Thông tin miền
- Dòng đầu tiên chứa một số nguyên n là số lượng miền.
- n*(n+1)/2 dòng tiếp theo, mỗi dòng có cú pháp là a b l. Trong đó, a và b là
định danh miền, l là thời gian trễ liên miền giữa hai miền a và b.
32
0 1 171
0 2 161
Thông tin nút
- Dòng đầu số nguyên N là số lượng nút tối đa.
- N dòng sau, mỗi dòng có cấu trúc a s. Trong đó, a là chỉ số nút, s là định danh
miền mà nút đó thuộc về.
4096
0 18
1 30
Thông tin sự vào ra (churn)
Gồm nhiều dòng, mỗi dòng có cấu trúc t c a l. Trong đó, t là nhãn thời gian, thời
điểm xảy ra sự kiện; c là loại sự kiện, „b‟ là nút tham gia, „d‟ là nút rời đi khỏi mạng,
giá trị „q‟ khi quá trình churn kết thúc; a là chỉ số của nút; l là thời gian trễ nội vùng
của nút đó.
00000 b 996 7
00000 b 998 25
00001 b 1003 1
Các file đính kèm theo tài liệu này:
- LUẬN VĂN- TRUYỀN TIN MULTICAST ĐA LUỒNG THỜIGIAN THỰC TRÊN MẠNG NGANG HÀNG CÓ CẤU TRÚC.pdf