Khóa luận Nghiên cứu ảnh hưởng của hiện tượng “tham gia mà không đóng góp” lên hệ thống chia sẻ file ngang hàng bittorrent

Tóm tắt Đề tài nghiên cứu của khóa luận tập trung vào vấn đề “nghiên cứu ảnh hưởng của hiện tượng “tham gia mà không đóng góp”(tiếng Anh: free-riding) đối với hệ thống chia sẻ file ngang hàng BitTorrent”. Trước hết, khóa luận sẽ cung cấp một cái nhìn tổng quan về hệ thống mạng ngang hàng hiện nay. Tiếp đó, chúng ta sẽ đi sâu vào nghiên cứu hệ thống chia sẻ file ngang hàng BitTorrent (khái niệm, cơ chế và hoạt động). và để làm rõ nội dung của đề tài nghiên cứu, Hệ thống BitTorrent sẽ được mô hình hóa bởi các tham số, các nút tham gia trong mạng được chia làm 3 loại đó là seed (nút chỉ upload mà không download), free-rider (nút tham gia vào hệ thống chỉ download mà không đóng góp) và non free-rider (các nút bình thường, vừa tham gia download vừa tham gia upload), từ đó xem xét khả năng tự bảo vệ chống lại free-riding trong cơ chế của BitTorrent, và đề xuất phương án cải thiện. Trong phần sau của khóa luận, tôi đã sử dụng chương trình mô phỏng OctoSim (một chương trình mô phỏng hệ thống BitTorrent của Microsoft Research) để thực hiện các thử nghiệm chứng minh tính đúng đắn của những nghiên cứu. Mục lục Giới thiệu chung 1 Chương 1. Tổng quan về mạng ngang hàng 3 1.1. Khái niệm về mạng ngang hàng 3 1.2. Phân loại mạng ngang hàng 3 1.2.1. Mạng ngang hàng thuần túy và mạng ngang hàng lai ghép 3 1.2.2. Mạng ngang hàng không có cấu trúc và mạng ngang hàng có cấu trúc 4 1.3. Ưu thế và các vấn đề cần xem xét trong mạng ngang hàng 5 1.3.1. Các ưu thế của mạng ngang hàng 5 1.3.2. Các vấn đề cần xem xét trong mạng ngang hàng 5 1.3.3. Tiềm năng phát triển của mạng ngang hàng 6 Chương 2. Mạng chia sẻ file ngang hàng BitTorrent 7 2.1. BitTorrent là gì? 7 2.2. Cơ chế và hoạt động của BitTorrent 8 2.2.1. Quá trình chia sẻ file 8 2.2.2. Sự lựa chọn các phần đơn vị (Piece Selection) 9 2.2.3. Thuật toán Choking 10 2.3. Optimistic Unchoking và Free-Rider 10 2.4. So sánh BitTorrent và một số hệ thống chia sẻ file ngang hàng khác 11 Chương 3. Mô hình hóa và xem xét ảnh hưởng của free-riding lên hệ thống chia sẻ file BitTorrent 13 3.1. Một số nghiên cứu liên quan 13 3.2. Mô hình và các tham số 13 3.3. Nghiên cứu hệ thống ở trạng thái ổn định (steady-state) 16 Chương 4. Chương trình mô phỏng OctoSim 23 4.1. Cài đặt và sử dụng chương trình 23 4.1.1. Giới thiệu, cách thức cài đặt và thiết lập môi trường để chạy chương trình OctoSim 23 4.1.2. Đầu vào và đầu ra của chương trình mô phỏng 24 4.2. Cấu trúc và chức năng của chương trình mô phỏng 25 4.2.1. File Main.cs: 25 4.2.2. File WorkloadProcessor.cs: 26 4.2.3. File Sim.cs: 27 4.2.4. File ProtocolMain.cs: 28 4.2.5. File Node.cs: 29 4.2.6. File SimParameters.cs 30 4.2.7. Các file khác 30 Chương 5. Các thí nghiệm mô phỏng và đánh giá 31 5.1. Kết luận sau khi xem xét mô hình và đề xuất phương án cải thiện 31 5.1.1. Kết luận thu được từ quá trình phân tích và tính toán 31 5.1.2. Đề xuất phương án cải thiện 31 5.2. Tiến hành các thử nghiệm 32 5.2.1. Thử nghiệm thứ nhất 32 5.2.2. Thử nghiệm thứ hai 34 5.2.3. Thử nghiệm thứ ba 36 Chương 6. Kết luận và phương hướng tiếp theo 37 Tài liệu tham khảo 39 Giới thiệu chung Hiện nay, máy tính đã trở thành công cụ không thể thiếu trong cuộc sống của mỗi con người. Máy tính đã hỗ trợ rất đắc lực cho chúng ta trong công việc, học tập cũng như giải trí hầu như mọi nơi, mọi lúc. Và một trong những lý do lớn khiến cho máy tính có thể len lỏi vào từng ngõ ngách của cuộc sống như vậy chính là do có sự xuất hiện của mạng Internet. Internet giúp chúng ta thu hẹp mọi khoảng cách, mở cánh cửa bước vào kho tài nguyên tri thức vô tận của nhân loại. Trong quá trình phát triển của Internet, bên cạnh những ứng dụng theo mô hình Client / Server truyền thống như WWW, email, FTP, trong thời gian gần đây, đã xuất hiện các ứng dụng theo mô hình ngang hàng (Peer to Peer – P2P). Với các ưu điểm như tốn ít chi phí xây dựng cơ sở hạ tầng, tận dụng được tài nguyên của các máy tham gia vào mạng, giải quyết được vấn đề điểm chết trung tâm của mô hình Client / Server truyền thống, các ứng dụng trên mạng ngang hàng ngày càng được quan tâm phát triển nhiều hơn. Từ sự xuất hiện của Napster vào năm 1999, có nhiều ứng dụng chia sẻ file ngang hàng được phát triển, ví dụng như Gnutella, KaZaA và BitTorren. Nhưng trong đó BitTorrent có số lượng người dùng lớn nhất và đã trở thành giải pháp chính cho việc chia sẻ file ngang hàng. Trong một nghiên cứu đã cho thấy rằng, các tài khoản sử dụng BitTorrent chiếm tới 35% lưu lượng trung chuyển trên mạng Internet, đó là 1 con số lớn, hơn tất cả các hệ thống chia sẻ file khác gộp lại. Sự phát triển mạnh mẽ của BitTorrent trong thời gian vừa qua cho thấy sự hiệu quả và ổn định trong cơ chế và giao thức của nó. Tuy nhiên, cũng như hầu hết các hệ thống hoạt động trên mô hình mạng ngang hàng, hoạt động của BitTorrent cũng dựa trên sự tự nguyện đóng góp của các thành phần tham gia trong mạng. Do đó, BitTorrent cũng phải đối mặt với vấn đề free-riding (có những người dùng tham gia vào mạng chỉ để lấy tài nguyên về mà không chịu đóng góp cho hệ thống). Trong khuôn khổ của khóa luận, chúng ta sẽ từng bước tìm hiểu qua 6 chương: Chương 1: Tổng quan về mạng ngang hàng, Trình bày các kiến thức cơ bản về mạng ngang hàng (P2P Network),ưu nhược điểm của mạng ngang hàng và các vấn đề cần chú ý khi nghiên cứu mạng ngang hàng. Chương 2: Hệ thống chia sẻ file ngang hàng BitTorrent, giới thiệu về BitTorrent, cơ bản về giao thức, cách thức chia sẻ file, cơ chế thúc đẩy các nút tham gia đóng góp cho hệ thống. So sánh BitTorrent với một vài hệ thống chia sẻ file ngang hàng khác. Trong chương này cũng trình bày nguyên nhân dẫn đến khả năng tồn tại của các nút free-rider. Chương 3: Mô hình hóa và xem xét ảnh hưởng của hiện tượng free-riding lên hệ thống chia sẻ file BitTorrent, trong chương này tôi nghiên cứu mô hình BitTorrent được đề xuất trong bài báo “Free-Riding on BitTorrent-like File Sharing System: Modeling, Analysis and Improvement” của các tác giả Jiadia Yu, Minglu Li, Jie Wu. Qua đó thấy được mức độ ảnh hưởng của hiện tượng free-riding lên hệ thống cũng như khả năng tự bảo vệ của hệ thống BitTorrent. Từ đó, đề xuất cơ chế khắc hạn chế hiện tượng free-riding. Chương 4: Chương trình mô phỏng OctoSim, chương này giới thiệu và mô tả cấu trúc chức năng của chương trình mô phỏng OctoSim ( một chương trình mô phỏng hệ thống BitTorrent của Microsoft Research được viết bằng ngôn ngữ C#) Chương 5: Các thí nghiệm mô phỏng và đánh giá, trong chương này tôi rút ra một số kết luận từ quá trình nghiên cứu và đề xuất phương án nhằm hạn chế hiện tượng free-riding, sau đó sử dụng chương trình mô phỏng OctoSim để thực hiện các thí nghiệm nhằm kiểm chứng các kết quả nghiên cứu và hiệu quả của đề xuất, và có những nhận xét cũng như giải thích về những kết quả đã đạt được. Chương 6: Kết quả thu được trong quá trình làm khóa luận và phương hướng nghiên cứu trong tương lai.

doc44 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2671 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Khóa luận Nghiên cứu ảnh hưởng của hiện tượng “tham gia mà không đóng góp” lên hệ thống chia sẻ file ngang hàng bittorrent, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
để đảm bảo được điều đó do trong mạng ngang hàng, sự đóng góp là hoàn toàn tự nguyện. Còn một vấn đề khác cần được lưu ý ngoài các vấn đề về mặt kĩ thuật trên. Đó chính là vấn đề về bản quyền của các thông tin được chia sẻ trên mạng. Hiện tại, P2P là nơi lý tưởng để trao đổi các file nhạc, film không có bản quyền (cũng là một phần lý do thúc đẩy mạng P2P phát triển như hiện nay). 1.3.3. Tiềm năng phát triển của mạng ngang hàng Hiện nay, khái niệm mạng ngang hàng hoàn toàn không lạ lẫm. Số người biết đến và sử dụng những ứng dụng trên nền tảng công nghệ mạng ngang hàng đang tăng lên từng ngày. Mặc dù vẫn còn những vấn đề về bảo mật hay vấn đề về bản quyền của những nội dung được trao đổi trong mạng ngang hàng, nhưng với những ưu thế và lợi ích mà mạng ngang hàng đem lại, chúng ta vẫn có thể thấy được sự phát triển mạnh mẽ của nó. Trên thực tế, cũng đang có rất nhiều nghiên cứu phát triển các ứng dụng trên nền công nghệ mạng ngang hàng, từ những lĩnh vực bình thường của đời sống như giải trí hay truyền hình( các ứng dụng về truyền video thông qua mạng ngang hàng) đến công việc kinh doanh hay nghiên cứu khoa học. Đặc biệt, quân đội Mỹ cũng đã có những dự án nghiên cứu phát triển những ứng dụng quân sự trên nền công nghệ mạng ngang hàng. Chúng ta hoàn toàn có thể tin tưởng rằng, trong tương lai gần, mạng ngang hàng sẽ tiếp tục phát triển và cung cấp thêm nhiều lợi ích cho cuộc sống. Chương 2. Mạng chia sẻ file ngang hàng BitTorrent 2.1. BitTorrent là gì? BitTorrent là tên một giao thức chia sẻ file được lập trình viên Bram Cohen thiết kế vào tháng 4 năm 2007, và chỉ 3 tháng sau đó, tháng 7 năm 2001, giao thức này đã được đưa vào triển khai trong thực tế và tạo ra một hệ thống chia sẻ file theo mô hình mạng ngang hàng mới, cũng được mang tên là BitTorrent. Ngoài chương trình BitTorrent Client đầu tiên được viết bởi Bram Cohen là BitTorrent (hay Mainline) cũng đã có rất nhiều chương trình BitTorrent Client khác được phát triển và có thể chạy được trên nhiều nền tảng khác nhau (Windows, Mac, Linux,...). Hình 1: Giao diện một chương trình BitTorrent Client Trong hình trên là giao diện của µTorrent, một chương trình BitTorrent Client khá phổ biến. Về cơ bản thì nó cũng khá giống một chương trình hỗ trợ download bình thường. Để triển khai về mặt ứng dụng, hệ thống BitTorrent chỉ cần một máy chủ có cài ứng dụng Tracker và các nút tham gia sử dụng một chương trình BitTorrent client nào đó. Quá trình hoạt động cụ thể của việc chia sẻ file sẽ được nói chi tiết trong phần sau. Một số khái niệm (thuật ngữ) hay được dùng trong BitTorrent: Seed: Nút nắm giữ toàn bộ file, chỉ tham gia quá trình upload file. Peer(or downloader/leecher): Nút tham gia vào cả quá trình download và upload file. Neiborghs (Swarm): Các nút giữ liên kết với một nút nào đó trong quá trình download 1 file nhất định. Tracker: Máy chủ có nhiệm vụ theo dõi và nắm thông tin về các nút nào đang tham gia download file nào. *.torrent: File lưu trữ các thông tin về file chia sẻ, địa chỉ của tracker.. (sẽ nói chi tiết hơn trong phần sau). Piece/chunk/share/block…: Một đơn vị sau khi chia nhỏ file trong BitTorrent. Sự chia sẻ file trong BT được thực hiển bởi sự trao đổi các đơn vị này. 2.2. Cơ chế và hoạt động của BitTorrent 2.2.1. Quá trình chia sẻ file Ý tưởng cơ bản của BitTorrent là chia file thành các phần đơn vị (piece) bằng nhau (thường là có kích thước 256KB) và một nút khi tham gia vào mạng thì có thể download cùng lúc các phần khác nhau từ các nút khác nhau. Để bắt đầu chia sẻ 1 file, người nắm giữ file này sẽ tạo ra một file tĩnh có phần mở rộng là .torrent. File .torrent này có chứa các thông tin về file muốn chia sẻ như, dung lượng file, tên file, số lượng các phần và giá trị băm của nội dung file cũng như nội dung từng phần nhỏ đó, đồng thời trong file đó cũng có chứa địa chỉ url của Tracker (server có nhiệm vụ liên kết các nút với nhau). Cụ thể, Tracker sẽ nắm giữ các thông tin như có những nút nào đang download file nào và các nút đó đang lắng nghe ở cổng nào…, các thông tin này được cập nhật mỗi 30 phút. Và để đảm bảo là người dùng khác có thể download, người muốn chia sẻ ban đầu phải giữ kết nối vào mạng trong thời gian nhất định. Nút mạng này được gọi là seed. Ngoài ra, seed còn để chỉ các nút nắm giữ toàn bộ các phần của file và tự nguyện tham gia quá trình upload các phần đó cho các nút khác. Các nút còn lại trong mạng được gọi là downloader hay leecher. Khi ai đó muốn download 1 file qua BitTorrent, bằng cách nào đó có được file .torrent của file đó (ví dụ như tải về từ 1 trang web nào đó .v.v..), từ thông tin có trong file .torrent, nút đó sẽ kết nối đến tracker và nhận về 1 danh sách(khoảng 40 nút) ngẫu nhiên các nút đang tham gia vào quá trình download file đó. Sau đó, nó sẽ tiến hành kết nối đến các nút đó và bắt đầu trao đổi các phần đơn vị của file. Tập hợp các nút cùng đang chia sẻ 1 file gọi là 1 swarm hay torrent, tập hợp các nút đang liên kết với 1 nút nào đó gọi là neiborghs hay peers của nút đó. Để quá trình trao đổi được thuận lợi, mỗi nút sẽ thông báo cho tất cả các nút kết nối với nó rằng nó đang nắm giữ những phần đơn vị nào của file đang chia sẻ. 2.2.2. Sự lựa chọn các phần đơn vị (Piece Selection) Như đã nói ở trên, quá trình chia sẻ file trong BitTorrent chính là quá trình trao đổi các phần đơn vị (pieces) của file đó giữa các nút mạng. Vì thế giải thuật lựa chọn các phần này sao cho hợp lý rất quan trọng. Trong BitTorrent, giải thuật lựa chọn được áp dụng ở các nút tuân theo các nguyên tắc sau. Ưu tiên nghiêm ngặt( Strict Priority): Khi một piece được chọn, nó phải được download xong trước khi chọn piece khác. Quy tắc này để đảm bảo nút có được đầy đủ pieces một cách nhanh nhất có thể. Ít nhất trước(Local Rarest First): Để quyết định xem piece nào sẽ được chọn, nút sẽ so sánh số lượng của mỗi piece trong tập tất cả các nút đang liên kết với nó(bao gồm cả chính bản thân nút đó) và lựa chọn tải về piece có số lượng ít nhất. Chiến lược này để đảm bảo sự cân bằng của số lượng mỗi piece trong mạng. Một vấn đề nữa là đối với nút đầu tiên tham gia upload file lên mạng (original seed) là làm sao có thể phát tán tất cả các piece của file vào mạng 1 cách nhanh nhất có thể. Khi đó, chiến lược LRF được áp dụng cho seed là, trong các yêu cầu pieces từ các nút kết nối đến nó, nó sẽ ưu tiên phục vụ piece nào có số lượng được phục vụ ít nhất. Đơn vị đầu tiên ngẫu nhiên(Random First Piece): Khi một nút mới gia nhập mạng, nó sẽ chọn ngẫu nhiên 1 piece để tải về. Quy tắc này để khiến cho nút có được mẩu đầu tiên một cách nhanh nhất để bắt đầu upload. Chế độ kết thúc(Endgame Mode): Để giúp nút có thể kết thúc nhanh quá trình download, nút có thể yêu cầu piece cuối từ tất cả các nút liên kết với nó. 2.2.3. Thuật toán Choking BitTorrent là một hệ thống chia sẻ file ngang hàng, do đó sự tham gia của các nút vào quá trình up và download ảnh hưởng rất lớn đến sự sống còn của mạng. Nút trong mạng sẽ không đáp ứng tất cả các yêu cầu download các piece từ các nút liên kết với nó, mỗi yêu cầu đó chỉ được đáp ứng khi nút có yêu cầu đảm bảo được những điều kiện nhất định. Quy tắc được đặt ra để nhằm khuyến khích các nút tham gia upload vào mạng nhiều hơn, được gọi là cơ chế thúc đẩy (Incentive Mechanism) của BitTorrent. Thông thường, một nút chỉ đáp ứng yêu cầu của 4 nút hàng xóm cung cấp cho nó tốc độ download cao nhất, và quá trình xác định tốc độ download của các nút liên kết với nó được thực hiện 10 giây một lần. Khi chiến lược này được áp dụng, nút nào có tốc độ upload vào mạng càng cao thì càng có được tốc độ download cao. Chiến lược này gọi là chiến lược ăn miếng trả miếng (Tit-for-tat Strategy). Optimistic Unchoking: Nếu chỉ áp dụng quy tắc như trên sẽ bó hẹp sự trao đổi dữ liệu giữa các nút liên kết với nhau. Để tạo cơ hội tìm kiếm các nút có cung cấp tốc độ download cao hơn cũng như để cho nút mới tham gia vào mạng có thể có được đáp ứng về piece đầu tiên, BitTorrent sử dụng “optimictic unchoke” 30 giây 1 lần. Optimistic unchoke sẽ mở đáp ứng cho một kết nối ngẫu nhiên mà không tính đến tốc độ download cũng như upload. Trong Khóa luận này, chúng ta sẽ nghiên cứu kĩ hơn tác dụng của cơ chế thúc đẩy của BitTorrent trong việc hạn chế hiện tượng free-riding trong BitTorrent. 2.3. Optimistic Unchoking và Free-Rider Free-rider là nút không upload đến các nút khác, do đó theo chiến lược TFT, nó cũng không nhận được dữ liệu từ các nút khác. Tuy nhiên do có Optimistic Unchoke như đã nói ở trên, free-rider vẫn có được cơ hội nhận được dữ liệu từ hệ thống. Chúng ta sẽ xem xét cụ thể hơn vấn đề này. Gọi G{p0,p1, …, pxn-1, q0,q1, …, qxf-1 } là tập hợp các nút trong mạng BitTorrent. Trong đó xn là số lượng các nút bình thường (non free-rider) và xf là số lượng của free-rider trong mạng. Giả sử tất cả các nút trong mạng có cùng một băng thông upload , và không có seed trong G. Gọi µ là băng thông upload của mỗi nút, như vậy tổng băng thông upload của hệ thống là µxn. Gọi u là số lượng kết nối upload của nút trong mạng, trong đó có 1 kết nối là optimistic unchoking. Tốc độ của mỗi kết nối bị giới hạn bởi µ/u. Theo quy tắc Optimistic Unchoking, mỗi nút bình thường sẽ chọn ngẫu nhiên một nút khác để gửi dữ liệu, từ đó tổng số kì vọng tốc độ download của free-rider trong G là: (1) Trong trường hợp xn+xf >> u Từ (1) cho thấy rằng mặc dù không đóng góp cho hệ thống như free-rider vẫn nhận được tốc độ download được tính bởi (1). Gọi ρ là tỉ lệ của tổng tốc độ download của free-rider so với tổng băng thông upload của các nút bình thường. ta có: (2) Với 0 ≤ ρ ≤ 1. Từ (2) cho thấy free-rider vẫn có được một phần tốc độ download của cả hệ thống. Nói cách khác, cơ chế của BitTorent không thể loại trừ hoàn toàn hiện tượng free-riding, và free-rider có thể nhận được tài nguyên từ các nút bình thường thông qua optimistic unchoking. Để rút ra kết luận trên và các đẳng thức (1) và (2), tôi đã tham khảo trong [13]. 2.4. So sánh BitTorrent và một số hệ thống chia sẻ file ngang hàng khác Phương pháp dùng để phân phối tệp giữa mạng eDonkey2000 và BitTorrent là giống nhau, như các máy trong mạng eDonkey thường chia sẻ và tải về rất nhiều tệp, làm cho băng thông cho mỗi vận chuyển trở nên ít hơn. Ngược lại, vận chuyển BitTorrent nhanh hơn nhiều do các máy tập trung vào một tệp hay một nhóm tệp cụ thể. Giao thức eDonkey2000 nguyên thủy cung cấp rất ít khả năng chống free-riding, các phiên bản client mới của eDonkey2000 có cài đặt hệ thống khuyến khích tải lên nhiều hơn. Ví dụ chương trình eMule có hệ thống điểm (credits system) để thưởng các máy tải lên nhiều. Một máy sẽ ưu tiên các máy vận chuyển cho mình trước đây bằng cách chuyển vị trí các máy này lên đầu của hàng đợi làm cho thời gian chờ ít hơn. Hệ thống này tỏ ra khá hiệu quả vì hàng đợi trong mỗi máy khách sử dụng eMule thường lên đến hàng trăm, thậm chí hàng ngàn. KaZaA là một giao thức gần giống với giao thức BitTorrent nhưng nó có một điểm khác đó là nó phân biệt các máy trạm theo cấp cống hiến (Participation Level). Cấp cống hiến tăng khi bạn tải lên và giảm khi bạn tải về. Khi bạn tải lên một tài nguyên thì người có cấp cống hiến cao nhất nhận đầu tiên sau đó người có cấp cống hiến cao nhất này tải lên cho người có cấp cống hiến thấp hơn và cứ tiếp tục như vậy. Mô hình này tương tự như mô hình kim tự tháp, với người tải lên nhiều nhất ở vị trí đỉnh của kim tự tháp, và người ít tải lên ở các vị trí đáy của kim tự tháp. Mô hình KaZaA chỉ thích hợp phân phối tài nguyên cho một số lượng lớn người dùng, nó đã được chứng minh là người ở đáy kim tự tháp tải tệp về nhanh hơn trường hợp tải tệp về bằng phương pháp HTTP (trong trường hợp tệp rất lớn). Nhưng mô hình KaZaA có một nhược điểm nhỏ đó là nó tin tưởng vào báo cáo của các máy trạm về cấp cống hiến vì vậy các máy trạm có thể gian lận cấp cống hiến với rất nhiều các máy trạm không chính thức. Chương 3. Mô hình hóa và xem xét ảnh hưởng của free-riding lên hệ thống chia sẻ file BitTorrent 3.1. Một số nghiên cứu liên quan BitTorrent là hệ thống chia sẻ file ngang hàng phổ biến nhất hiện nay, vì thế nó cũng dành được sự quan tâm nghiên cứu của rất nhiều nhà khoa học. Có nhiều nghiên cứu nhằm cải tiến nâng cao hiệu năng của hệ thống BitTorrent với nhiều đề xuất khác nhau. Tuy nhiên đa số những khảo sát, cả về mô phỏng lẫn theo dõi thực thế [4][6][7][10][11] đều cho thấy rằng hệ thống BitTorrent tỏ ra rất hiệu quả trong việc tận dụng tài nguyên hệ thống và hỗ trợ số lượng lớn người sử dụng. Và vấn đề tối ưu hóa hệ thống BitTorrent thường tập trung hơn vào vấn đề đảm bảo tính công bằng trên mạng. Một vài nghiên cứu về “cơ chế thúc đẩy” của BitTorrent được trình bày trong [4][8][9][12]. Các thử nghiệm trong [4] đã chỉ ra rằng cơ chế của BitTorrent không thể đảm báo được tính công bằng trong hệ thống. Jun và Ahamad [8] xem xét hệ thống BitTorrent dưới lý thuyết trò chơi (vấn đề song đề tù nhân lặp lại – Iterated Prisoner’s Dilemma) và cho thấy rằng free-rider không bị trừng phạt thích đáng và những nút đóng góp cho hệ thống cũng không được đền đáp tương ứng. Qiu và Skirant [12] đã mô tả sơ lược ảnh hưởng của optimistic unchoking đối với hiện tượng free-riding, và cho thấy optimistic unchoking có thể dẫn đến hiện tượng free-ring trong hệ thống. Locher và các tác giả khác [9] cũng đã cho thấy trong BitTorrent một nút có thể tải file về thành công mà không có sự đóng góp gì cho mạng. Trong nội dung của khóa luận này, tôi sử dụng mô hình của các tác giả Jiadia Yu, Minglu Li, Jie Wu được giới thiệu trong [13]. Mô hình chia các downloader trong mạng thành 2 loại chính free-rider và non free-rider và xem xét ảnh hưởng của free-rider trong hệ thống BitTorrent một cách khá toàn diện. 3.2. Mô hình và các tham số Dựa trên các kết luận trình bày trong phần 4.1.1, chúng ta sẽ xây dựng một mô hình mạng trong đó các nút trong mạng được chia làm 3 loại chính: seed, free-rider và non free-rider. Các nút non free-rider được xem là đóng góp cho mạng ngang nhau trong khi các nút free-rider hoàn toàn không có đóng góp gì cho hệ thống. Seed không phân biệt free-rider hay non free-rider trong quá trình upload. Hệ thống được mô tả bởi các tham số (mô hình “Fluid model”) sau: xn(t) : số lượng của non free-rider trong hệ thống tại thời điểm t xf(t): số lượng của free-rider trong hệ thống tại thời điểm t y(t): số lượng seed trong hệ thống tại thời điểm t λn: Tốc độ tham gia vào mạng của non free-rider λf: Tốc độ tham gia vào mạng của free-rider µ: Băng thông upload của một nút c: Băng thông download của một nút θ: Tốc độ rời mạng của nút bình thường γ: Tốc độ rời mạng của seed η: Hiệu năng của quá trình chia sẻ file [3] ρ(t): Tỉ lệ của tổng tốc độ download của free-rider so với tổng tốc độ upload của non free-rider tại thời điểm t. κ(t): Tỉ lệ của số lượng free-rider trên tổng số lượng của free-rider và non free-rider tại thời điểm t. Mô hình trên được mở rộng từ mô hình trong [3] và được trình bày trong [4]. Ta giả sử free-rider rời mạng ngay sau khi download hoàn thành(bởi vì free-rider khi đó có ở lại mạng cũng không có ý nghĩa gì). Như vậy, trong hệ thống tồn tại 3 trạng thái: Seed, free-rider và non free-rider. Quan hệ giữa các trạng thái được trình bày như hình sau: Hình 2: Mô hình chung biểu diễn 3 trạng thái trong hệ thống chia sẻ file BitTorrent Hình vẽ trên cho ta thấy quan hệ giữa 3 trạng thái, tốc độ các nút tham gia và rời khỏi các trạng thái và thành phần phân phối băng thông của 3 trạng thái trong hệ thống BitTorrent. Trong mô hình này, tốc độ gia nhập mạng của free-rider và non free rider tương ứng là λf và λn. Tham số η biểu thị hiệu quả của việc chia sẻ file và được tính toán là rất gần với 1 trong [8]. Hiệu năng chia sẻ file của free-rider bằng 0. Tại thời điểm t, tốc độ upload của toàn bộ hệ thống là µ(ηxn(t) + y(t)). Tất cả các nút trong mạng cùng chia sẻ tốc độ upload được cung cấp bởi non free-rider và seed. ρ(t) cho biết tỉ lệ băng thống upload của non free-rider bị chiếm vởi free-rider. Áp dụng đẳng thức (2) ta có (3) Với 0 ≤ ρ(t) ≤ 1. Với seed khi upload không phân biệt free-rider hay non free-rider, do đó, tỉ lệ băng thông upload của seed bị chiếm bởi free-rider là: (4) Với 0 ≤ κ(t) ≤ 1. Do đó, tổng tốc độ download của non free-rider là : µ[(1-ρ(t))ηxn(t) + (1-κ(t))y(t)] Và tổng tốc độ download của free-rider là : µ[ρ(t)ηxn(t) + κ(t)y(t)] Tuy nhiên, tốc độ download của free-rider và non free-rider bị giới hạn bởi cxn(t) và cxf(t). Ta có : (5) Trong đó Dn(t) và Df(t) biểu thị tương ứng là tổng tốc độ download của non free-rider và free-rider tại thời điểm t(tốc độ non free-rider và free-rider rời khỏi các trạng thái tương ứng sau khi download xong). θxn(t) và θxf(t) tương ứng là tốc độ của non free-rider và free-rider rởi khỏi các trạng thái tương ứng khi đang download dở. Non free-rider chuyển sang trạng thái seed với tốc độ Dn(t) sau khi download xong. Seed rời bỏ trạng thái với tốc độ γ. Từ đó, tốc độ thay đổi của 3 trạng thái được xác định tương ứng bằng phương trình sau : (6) 3.3. Nghiên cứu hệ thống ở trạng thái ổn định (steady-state) Để nghiên cứu hệ thống ở trạng thái ổn định, chúng ta giả sử limt→∞xn(t), limt→∞xf(t), limt→∞y(t) tồn tại và : Trong đó xn, xf , và y là các giá trị cân bằng tương ứng của xn(t), xf(t) và y. Ở trạng thái ổn định t→∞ ta có : (7) Để đơn giản, chúng ta giả sử nút không bao giờ rời mạng khí chưa download xong (θ =0) và sẽ rời mạng ngay sau khi download hoàn thành (γ→∞). Với giả sử trên, từ (6) và (7) phương trình biểu thị trạng thái ổn định được viết lại thành : (8) Với (9) là giá trị cân bằng của ρ(t) và 0 ≤ ρ ≤ 1 Dễ thấy, với điều kiện thực tế c > µ thì và . Kết hợp với (8) ta thu được : (10) Với và Định lý 1 : Gọi Tn và Tf là thời gian download trung bình tương ứng của non free-rider và free-rider trong hệ thống. Trong một hệ thống không có seed, chúng ta có kết quả sau : (11) Chứng minh : Trong [12], áp dụng Little Law[3]. Ta có thời gian download trung bình cho một nút ở trạng thái ổn định được xác định bởi: Với T là thời gian download trung bình. Tương tự, trong mô hình của chúng ta, thời gian download trung bình tương ứng của non free-rider và free-rider được tính bởi Khi có một nút hoàn thành download, khả năng nó là free-rider là ρ , và khả năng nó là non free-rider là 1 – ρ. Do đó thời gian download trung bình của toàn bộ hệ thống là: Thay tương ứng các giá trị trong các biểu thức (9), (10), ta được kết quả của định lý. Nhận xét: Thông qua việc mô hình hóa hệ thống BitTorrent, chúng ta đã thấy được hiệu năng của hệ thống ở trạng thái ổn định và ảnh hưởng của hiện tượng free-riding lên hệ thống BitTorrent. Từ kết quả của định lý 1, xét trong điều kiện số lượng liên kết upload của một nút u=5, và với giá trị hiệu năng chia sẻ file η được xem xét trong [12] là gần như bằng 1, chúng ta thu được đồ thị biểu diễn sự phụ thuộc thời gian download trung bình của non free-rider, free-rider và hệ thống thông qua sự biến thiên của α: Thời gian download trung bình Hình 3: Thời gian download trung bình của non free-rider, free-rider và hệ thống theo sự biến thiên của α. Từ đồ thị trên cho thấy thời gian download trung bình Tf của free-rider luôn luôn lớn hơn thời gian download trung bình Tn của non free-rider. Đồng thời, giá trị của Tf cũng tăng rất nhanh khi α tăng lên, ngược lại Tn hầu như không tăng khi giá trị α nhỏ. Hơn nữa, khi α đạt giá trị 0.2 (=1/u) thì Tf không tồn tại (có nghĩa là một số free-rider không có đủ tài nguyên để kết thúc quá trình download).Ngược lại, non free-rider luôn luôn có thể hoàn thành quá trình download. Từ đó, có thể kết luận là cơ chế của BitTorrent có khả năng chống lại hiện tượng free-riding trong hệ thống không có seed, và thông qua Optimistic Unchoking, free-rider cũng không gây ảnh hưởng lớn đối với hiệu năng của toàn hệ thống. Từ đẳng thức (11) ta cũng thấy một điều rằng có thể tăng thời gian Tf bằng cách tăng số liên kết upload của mỗi nút u, tuy nhiên, điều này khó có thể thực hiện trong thực tế do nếu tăng số lượng kết nối TCP sẽ tăng thời gian trễ và ảnh hưởng đến hiệu năng của mạng. Ở trên, chúng ta đã giả sử γ→∞, có nghĩa là nút non free-rider sẽ rời mạng ngay sau khi quá trình download hoàn thành. Tuy nhiên, trong thực tế, sau khi hoàn thành download vẫn có một số lượng các nút vẫn ở lại hệ thống và đóng vai trò như seed. Do đó, free-rider vẫn có cơ hội nhận được thêm tài nguyên từ seed và có thể hoàn thành dược quá trình download. Bây giờ, chúng ta sẽ xem xét ảnh hưởng của hiện tượng free-riding lên hiệu năng của hệ thống khi giá trị γ thay đổi. Khi có tính đến γ, phương trình biểu diễn trạng thái ổn định của hệ thống được viết lại thành: (12) Trong đó Với ρ và κ là giá trị cân bằng tương ứng của ρ(t) và κ(t), 0 ≤ ρ, κ ≤ 1. Sau khi giải phương trình (12) ta thu được: (13) Khi Ngược lại, nếu tốc độ rời mạng γ của seed nhỏ hơn thì băng thông download c sẽ quyết định hiệu năng của mạng nếu giá trị của c là rất lớn []. Từ đó, ta có: (14) Khi Định lý 2: Gọi Tn và Tf là thời gian download trung bình tương ứng của non free-rider và free-rider trong hệ thống có seed, chúng ta có kết quả sau : (15) Khi Và (16) Khi Chứng minh: Dễ dàng chứng minh được định lý 2 tương tự như chứng minh định lý 1. Nhận xét: Khi tốc độ rời mạng của seed giảm, đồng nghĩa với việc số lượng seed có trong hệ thống tăng lên, số lượng tài nguyên dành cho các nút download cũng nhiều hơn. Từ kết luận của định lý 2, ta có đồ thị sau: Tỉ số giữa thời gian download trung bình Tn/ Tf Hình 4: Tỉ số giữa thời gian download trung bình của non free-rider trên thời gian download trung bình của free-rider biến thiên theo γ. Biểu đồ trong hình 4 biểu thị sự thay đổi về tỉ lệ giữa Tn và Tf khi thay đổi giá trị của γ. Ta thấy rằng, tỉ số này tăng lên khi tốc độ rời mạng của seed giảm đi. Và khi γ giảm đến 1 giá trị xác định () thì thời gian download trung bình của non free-rider và free-rider lúc đó là ngang nhau (thời gian này được xác định bởi băng thông download c). Khi γ tăng lên, thời gian download của free-rider dần dần tăng lên do đó, tỉ số giữa Tn và Tf giảm xuống. Từ đồ thị trên ta cũng thấy được một điều nữa là khi giá trị của α tăng lên, tỉ số giữa Tn và Tf cũng giảm xuống do thời gian download Tf tăng lên tương tự như trong hệ thống không có seed đã xét ở phần trước. Từ nhận xét trên, chúng ta có thể kết luận rằng cơ chế của BitTorrent không có hiệu quả trong việc hạn chế free-riding khi hệ thống có nhiều seed. Khi số lượng seed trong hệ thống tăng lên đến một giá trị nhất định, thời gian download của free-rider và non free-rider là ngang nhau. Chương 4. Chương trình mô phỏng OctoSim 4.1. Cài đặt và sử dụng chương trình 4.1.1. Giới thiệu, cách thức cài đặt và thiết lập môi trường để chạy chương trình OctoSim OctoSim : A BitTorrent Simulator là một ứng dụng viết bằng ngôn ngữ C# bởi các tác giả Ashwin Bharambe, Cormac Herley và Venkat Padmanabhan. Mã chương trình được các tác giả viết ra để thực hiện các thử nghiệm trong [4]. Có thể tìm và download chương trình tại địa chỉ trang web của Microsoft Research ( và tìm với từ khóa BitTorrent Simulator). Chương trình mô phỏng lại hệ thống BitTorrent theo các chi tiết sau: File được chia nhỏ thành các pieces, và không thể chia nhỏ hơn nữa, đồng thời, thuật toán Choking của BitTorrent cũng được triển khai một cách chính xác. Tuy nhiên, chế độ kết thúc (EndGame Mode) không được tính đến, tuy nhiên điều này cũng không ảnh hưởng nhiều đến các kết quả thử nghiệm. Để cài đặt và chạy chương trình, trên Linux, cần có mono và mcs (để biên dịch ngôn ngữ C#), trên Windows, sử dụng bộ công cụ lập trình Visual Studio. Để thực hiện các thử nghiệm trong khóa luận này, tôi đã sử dụng Visual Studio 2005 trên hệ điều hành Windows XP để build và chạy chương trình mô phỏng. Cấu hình cần thiết để chạy được chương trình mô phỏng này là máy tính có thể cài và chạy được Visual Studio, tuy nhiên, chương trình sử dụng các hàm tính toán và xử lý khá nhiều sự kiện nên một máy tính có CPU với tốc độ xử lý cao có thể giúp rút ngắn thời gian tiến hành các thử nghiệm. Đối với môi trường Windows, sau khi tải về mã nguồn chương trình từ Microsoft Research (sẽ được 1 file có đuôi là .msi), sau khi bung nén, chúng ta sẽ được một thư mục chứa mọi file liên quan đến chương trình (địa chỉ mặc định khi bung nén của thư mục thường là “C:\Program Files\Microsoft Research\MSR Simulator for the BitTorrent Protocol”, trong đó chúng ta cần chú ý đến 2 thư mục con là OctoSim chứa mã nguồn C# của chương trình và workloads chứa các file mẫu đầu vào của chương trình mô phỏng. 4.1.2. Đầu vào và đầu ra của chương trình mô phỏng Về mặt thực thi, OctoSim là một ứng dụng dòng lệnh (Console Application) cho phép nhập các giá trị đầu vào thông qua các tham số dòng lệnh hoặc file text. Các kết quả thử nghiệm được hiện một phần ngay trong cửa sổ Console và kết xuất trong các file text. Bây giờ chúng ta sẽ mô tả ngắn gọn về các file text đầu vào và đầu ra của chương trình. File đầu vào: Một vài mẫu của file đầu vào có thể tìm thấy trong thư mục workloads. Các file có phần mở rộng là .wl. Trong file này các lệnh được bố trí theo dòng, các dòng bắt đầu bằng # chỉ đó là những dòng chú thích, và chương trình sẽ bỏ qua khi đọc đến những dòng này. Cấu trúc của một dòng bình thường được xử lý bởi chương trình mô phỏng như sau: [end] Có thể hiểu một cách khái quát nội dung của 1 dòng sẽ xác định một sự kiện (một lệnh) được thực hiện vào thời điểm nào trong quá trình mô phỏng. Chi tiết cụ thể sẽ được mô tả kĩ hơn trong phần sau, khi chúng ta nói về nội dung file mã nguồn WorkloadProcessor.cs File đầu ra: Khi chạy chương trình mô phỏng OctoSim sẽ kết xuất ra 4 file text đầu ra có phần mở rộng lần lượt là .out.prm, .out.nds, .out.bw, .out.gph. Trong đó: File .out.prm lưu thông tin về giá trị của các tham số sử dụng trong chương trình như thời gian tiến hành thử nghiệm, thời gian và tốc độ tham gia vào mạng của các nút, kích cỡ file chia sẻ … File .out.nds có chứa các thông tin chung về các sự kiện xảy ra với các nút. Cấu trúc chung của một dòng trong file này là: [time] [node] [event] Có thể hiểu nội dung của dòng này là thời gian diễn ra sự kiện đối với nút, nút diễn ra sự kiện là nút nào, sự kiện đó là sự kiện gì và các thông tin chi tiết tương ứng với mỗi loại sự kiện. Thông tin chi tiết về từng loại sự kiện đối với 1 nút chúng ta có thể xem thêm trong file Logger.cs File .out.bw, file này chính xác đóng vai trò là file log của hệ thống. Cấu trúc của file chia thành các khối, mỗi khối bắt đầu bằng một dòng có nội dung là “time ”. Các dòng tiếp theo trong khối mô tả một cách vắn tắt về tình trạng của toàn bộ các nút trong mạng tại thời điểm xét, mỗi nút trên 1 dòng, cụ thể, thông tin trên mỗi dòng sẽ là: #d #u p s #p D Muốn biết chi tiết và hiểu hơn các khái niệm, có thể xem trong phương thức Dump của class Node trong file Node.cs. 4.2. Cấu trúc và chức năng của chương trình mô phỏng Tại thư mục được tạo ra sau khi bung nén chương trình, có chứa các thư mục con như sau: + cmu_scripts + exp_scripts + OctoSim + plotscripts + scripts + workloads. Tuy nhiên, khi xem xét và thực thi chương trình ta chỉ cần chú ý và tác động vào các file trong 2 thư mục OctoSim và workloads. Thư mục OctoSim chứa toàn bộ mã nguồn C# của chương trình. Sau đây, chúng ta sẽ mô tả một vài file mã nguồn quan trọng của chương trình 4.2.1. File Main.cs: Chức năng chính của file này là xử lý các tham số dòng lệnh và lưu vào một mảng tĩnh để xử lý sau. Về mặt cấu trúc trong file chứa class MainWrapper là class chứa hàm public static int Main(String[] args) sẽ được gọi đến đầu tiên khi chạy chương trình. Ngoài ra, trong lớp này còn khai báo một mảng tĩnh public static ArrayList cmdline_arguments dùng để lưu giá trị các tham số dòng lệnh. Nhiệm vụ chính trong hàm Main là đọc vào các tham số dòng lệnh, lưu nó vào mảng tĩnh đã được khai báo ở trên (chi tiết các tham số và ý nghĩa của các tham số có thể xem cụ thể trong file mã nguồn), sau đó tạo ra một thực thể new WorkloadProcessor(workload_file) để xử lý file nằm trong thư mục workloads đã nói ở trên. Nội dung chi tiết về WorkloadProcessor sẽ được nêu ngay sau đây. 4.2.2. File WorkloadProcessor.cs: Chức năng của file này là đọc nội dung file workload (*.wl), dịch nội dung các dòng tương ứng thành các chức năng hoặc gán tham số cho chương trình, tạo ra một thực thể Simulator và khởi động vòng lặp để xử lý các sự kiện của chương trình mô phỏng Về mặt cấu trúc, trong nội dung của file mã nguồn chỉ có 3 phương thức: void ProcessWorkload(string workloadfile): Đọc vào nội dung của file workload theo từng dòng, bỏ qua những dòng nào bắt đầu bằng kí tự ‘#’ (kí tự # để chỉ những dòng đó chỉ là những dòng chú thích), gọi phương thức GetTimeOfJob để lấy ra thời gian lệnh đó được thực hiện và kiểm tra kiểm tra xem thời gian thực hiện lệnh trong nội dung của dòng đó có còn hiệu lực hay không, nếu còn thì gọi đến hàm ProcessJob để thực hiện. public void ProcessJob(string jobstring):Xử lý nội dung trong từng dòng và thực hiện các chức năng tương ứng với từ khóa. Khi xem nội dung của phương thức này, chúng ta có thể hiểu thêm ý nghĩa của các từ khóa chứa trong file workload, đồng thời cũng biết được cách thức viết một dòng trong file workload sao cho chính xác và phù hợp với ý định của mình. Hai từ không thể thiếu khi viết file workload đó là "process_cmdline_args" dùng để chỉ cho chương trình biết cần xử lý các tham số dòng lệnh (đã được xử lý và lưu bởi hàm Main()), và "initialize" dùng để bắt đầu “chạy” chương trình mô phỏng. Thiếu đi 2 từ khóa này thì chương trình mô phỏng không hoạt động được như ý. Như thế, 2 dòng luôn luôn phải có trong file workload “now process_cmdline_args end” là và “now initialize end” . Ngoài ra còn có từ khóa "setparam" dùng để gán giá trị các tham số của chương trình. Chi tiết hơn có thể xem trong file mã nguồn. Thông tin và ý nghĩa của các tham số trong chương trình sẽ được nêu trong phần mô tả file SimParameter.cs. private long GetTimeOfJob(string job): Phương thức đọc lấy thời gian thực hiện của mỗi dòng lệnh trong file workload (lấy giá trị đầu tiên từ trái sang phải – chính là giá trị time được mô tả trong cấu trúc file workload đầu vào đã nói ở phần trước). 4.2.3. File Sim.cs: Chứa lớp đại diện cho sự mô phỏng của chương trình, với hàng đợi các sự kiện và xử lý sự theo băng thông. Về mặt cấu trúc, trong file có chứa 2 lớp và một giao diện: public interface TimerEvent: Khai báo mẫu cho một sự kiện được xử lý trong chương trình, để được lưu vào hàng đợi và xử lý, các sự kiện cần tuân theo mẫu này. public class WorkloadGenerator : Tạo ra các thông số môi trường cho các thử nghiệm ( ví dụ như sự phân phối băng thông của các nút, thời gian tham gia và rời khỏi mạng của các nút … tùy thuộc các tham số đầu vào). public class Sim: Đây chính là lớp đại diện cho toàn bộ một chương trình mô phỏng. Trong lớp này cần chú ý đến: private EventQueue triggers : Cây lưu giữ các sự kiện sẽ được xử lý của chương trình mô phỏng. Khi chương trình chạy sẽ duyệt cây từ gốc và xử lý các sự kiện. private SortedList nodes : Chứa danh sách toàn bộ các nút tham gia trong hệ thống. public void RaiseSimulationEvent(long ms, TimerEvent obj): Phương thức thêm một sự kiện vào trong hàng đợi, với đầu vào là nội dung của sự kiện và thời gian diễn ra sự kiện, phương thức này rất quan trọng và được dùng để xây dựng nên hàng đợi của chương trình mô phỏng. public void AssignBandwidth(Node node): Gán băng thông cho một nút. public Node CreateNode(): Thêm một nút vào danh sách các nút và gán băng thông cho nút đó (chuẩn bị cho một nút tham gia vào mạng). public void KillNode(Node node): Xóa đi một nút trong danh sách các nút đã lưu (sử dụng trong trường hợp nút rời khỏi mạng). public bool ProcessTill: Đây chính là phương thức tạo ra vòng lặp xử lý cho chương trình mô phỏng. Nó sẽ duyệt lần lượt các sự kiện trong hàng đợi và xử lý cho đến khi hết sự kiện hoặc hết thời gian quy định. Trong phương thức còn có chức năng xuất ra màn hình console một số thông tin về tiến trình thực hiện các thử nghiệm ở các thời điểm nhất định. 4.2.4. File ProtocolMain.cs: Chứa các sự kiện và chức năng điều khiển chương trình mô phỏng bằng cách đưa vào những sự kiện thích hợp tại những thời điểm hợp lý Về mặt cấu trúc, trong nội dung file bao gồm các lớp: public class CreateNodeEvent : TimerEvent: Khai báo và xử lý sự kiện tạo ra một nút mới. Sự kiện được gọi đến và xử lý khi có một nút tham gia mạng. public class KillNodeEvent : TimerEvent: Khai báo và xử lý sử kiện hủy bỏ một nút. Được sử dụng khi muốn một nút rời mạng. public class ScheduleSomeJoinsEvent : TimerEvent: Khai báo và xử lý sự kiện lập lịch cho một số nút tham gia vào mạng. public class ProtocolSim: Lớp chính trong file này, định nghĩa các cách thức xảy ra của các sự kiện trong chương trình. Một số phương thức cần chú ý trong lớp này là: public static void CreateNode(): Tạo ra một nút. public static void KillNode(Node n): Hủy một nút. private static void CreateSeeds(int n_seeds): Tạo ra các seed trong thời điểm bắt đầu (initial seeds). public static void Initialize(): Bắt đầu chương trình mô phỏng. public static void ScheduleSomeJoins(): Lập lịch cho toàn bộ các nút trong quá trình tham gia vào mạng. Các giá trị được sử dụng trong hàm này được thiết lập thông qua các tham số của chương trình. public static void SchedulePFCJoins(): lập lịch cho các nút khác tham gia vào mạng. Có thể đọc chi tiết hơn trong phần VIII.A của [4] (phần nói về Post-Flash Crowd), trong khóa luận này, tôi sẽ tận dụng chức năng này để thực hiện các thử nghiệm. 4.2.5. File Node.cs: Nội dung của file này được xem là “lõi” của toàn bộ hệ thống, trong file có lớp biểu diễn toàn bộ đời sống của 1 nút từ khi được tạo ra và tham gia vào mạng đến khi rời khỏi hệ thống. Về mặt cấu trúc, trong file có nhiều lớp, nhưng quan trọng nhất vẫn là lớp Node, đó là sự mô phỏng cho mỗi nút tham gia vào hệ thống. và trong lớp này cần chú ý đến: private LinkCap m_LinkCap : Chứa thông tin về băng thông download và upload của nút. private Hashtable m_Connections: Chứa toàn bộ kết nối của nút hiện tại đến các nút hàng xóm. private ArrayList m_Uploads : Chứa danh sách các liên kết đang upload. private ArrayList m_Downloads : Chứa danh sách các liên kết dang download. private PieceInfo[] m_PieceInfoArray : Chứa thông tin về toàn bộ các pieces chứa trong nút hiện tại. private bool m_AmSeed : Cờ để xác định xem nút có phải là seed hay không. public Node(Sim s, Oracle ora, int n_pieces) : Phương thức khởi tạo, trong này cho ta một cái nhìn tổng quan về một nút, và giá trị các thuộc tính của nút khi được khởi tạo. public void JoinNetwork() : Phương thức biểu diễn các hành động của một nút khi nó gia nhập vào hệ thống. Và lập lịch cho các hoạt động của nút. public void BecomeSeed() : Phương thức được sử dụng khi một nút hoàn thành download và ở lại thành seed trong hệ thống. private int FindPieceToDownload(Connection conn): Trong phương thức này có cài đặt quy tắc chọn piece theo Local Rarest First đã nói trong phần cơ chế của BitTorrent. public float GetTotalDownloadRate(),public float GetTotaluploadRate(): Trả về tốc độ download và upload của nút. public void Dump(StreamWriter stream): Phương thức xuất ra thông tin về một nút, được sử dụng để ghi vào file output *.out.bw. Ngoài ra còn rất nhiều thuộc tính và phương thức khác, có thể xem trực tiếp trong nội dung file mã nguồn. 4.2.6. File SimParameters.cs Đây là file liệt kê hầu hết các tham số được sử dụng bởi chương trình mô phỏng. Khi tiến hành các thử nghiệm, cần lưu ý nhiều đến file này. Về mặt cấu trúc, trong file có chứa lớp chính là public class SimParameters, trong lớp này có các thuộc tính được dùng làm tham số cho chương trình mô phỏng. Các tham số đã được mô tả khá kĩ trong file mã nguồn, ở đây, ta sẽ liệt kê ra một vài tham số quan trọng: public static long simulationTime: Tổng thời gian tiến hành một thử nghiệm public static long joinTime : Thời gian để các nút tham gia vào hệ thống. public static float joinRate : Tốc độ các nút tham gia vào hệ thống. public static int fileSize : Dung lượng của file sử dụng, tính theo kilobit. public static int blockSize : Độ lớn của mỗi piece, tính theo kilobit. public static double seedLeavingProbability : Tỉ lệ nút rời mạng sau khi hoàn thành download ( giá trị này luôn nằm trong khoảng từ 0 đến 1). public static int maxUploads: Số lượng kết nối upload đồng thời của 1 nút. public static int nInitialSeeds : Số lượng seed trong thời điểm bắt đầu mọi sự kiện, các seed này chính là nguồn cung cấp nội dung file cho toàn bộ hệ thống. 4.2.7. Các file khác Ngoài các file chính ở trên đã nêu, còn có một số file khác trong thư mục mã nguồn như Logger.cs, file này có chức năng chính là tạo ra các file text đầu ra của chương trình hay Choker.cs là file mô phỏng lại chiến lược TFT của BitTorrent … Chương 5. Các thí nghiệm mô phỏng và đánh giá 5.1. Kết luận sau khi xem xét mô hình và đề xuất phương án cải thiện 5.1.1. Kết luận thu được từ quá trình phân tích và tính toán Thông qua nghiên cứu mô hình xây dựng trong chương 3, chúng ta thấy rằng Optimistic Unchoking có khả năng dẫn đến sự mất công bằng trong mạng và hiện tượng free-riding. Đẳng thức (3) cho thấy rằng free-rider có thể nhận được một phần tài nguyên cung cấp bởi non free-rider thông qua Optimistic Unchoking. Tuy nhiên, kết quả thu được từ định lý 1 đã cho thấy rằng, phần tài nguyên hệ thống mà free-rider có thể thu được thông qua Optimistic Unchoking là không đáng kể, khi số lượng free-rider trong mạng tăng lên (tương ứng với sự tăng lên của α), thì thời gian download trung bình của free-rider cũng tăng lên đáng kể trong khi thời gian download trung bình của non free-rider không thay đổi nhiều. Mặt khác, từ kết quả thu được của định lý 2, chúng ta thấy rằng, khi số lượng seed trong hệ thống tăng lên thì thời gian download trung bình của free rider lại giảm đi, và khi số lượng seed trong hệ thống đạt đến một giá trị nhất định thì thời gian download trung bình của free-rider và non free-rider trở nên tương đương với nhau. Như vậy, ta có thể thấy rằng, trong hệ thống chia sẻ file BitTorrent, free-rider chủ yếu nhận được nguồn tài nguyên từ seed. 5.1.2. Đề xuất phương án cải thiện Ở trên chúng ta đã thấy được rằng, free-rider chủ yếu nhận được nguồn tài nguyên trong hệ thống nhờ có seed. Nguyên nhân của hiện tượng này là do trong cơ chế hiện tại của BitTorrent, seed là nút tự nguyện upload dữ liệu vào mạng, và nó sẽ upload dữ liệu cho một số lượng giới hạn các nút liên kết với nó có tốc độ download về từ nó nhanh nhất mà không phân biệt nút đó là free-rider hay non free-rider. Điều đó gây nên sự mất công bằng đối với các nút non free-rider. Trong khóa luận này, tôi xin đề xuất một thay đổi nhỏ trong cơ chế hiện tại của BitTorrent đối với seed. Đó là, khi chọn lựa nút hàng xóm để upload dữ liệu, seed sẽ xem xét đến sự đóng góp của nút đó trong mạng, với một quy tắc đơn giản là thay vì upload đến một số lượng giới hạn nút có tốc độ download từ nó là nhanh nhất thì nó sẽ upload dữ liệu cho một số lượng giới hạn các nút có tổng tốc độ upload vào hệ thống nhanh nhất, và từ chối upload cho nút có tổng tốc độ upload vào mạng bằng 0. Từ thay đổi nhỏ trên, chúng ta sẽ thấy rằng, trong hệ thống mới, seed sẽ ưu tiên hơn đối với các nút có đóng góp nhiều trong mạng, nút nào có tốc độ upload càng cao thì sẽ có cơ hội được phục vụ trước, như vậy sẽ cải thiện hơn tính công bằng trong mạng. Quy tắc thứ 2, không mở kết nối upload cho nút có tốc độ download bằng 0 nhằm loại bỏ cơ hội download từ seed của free-rider. Tuy nhiên, chúng ta lại thấy rằng, free-rider vẫn có thể nhận được một phần tài nguyên trong hệ thống do seed cũng vẫn áp dụng Optimistic Unchoking. Do hạn chế về thời gian và trình độ, tôi chưa có điều kiện kiểm chứng và đánh giá hiệu quả của phương án thay đổi đã đề xuất ở trên thông qua mô hình các tham số, tuy nhiên, chúng ta sẽ thấy được hiệu quả sau khi thay đổi cơ chế đối với seed trong hệ thống BitTorrent ở chương sau, khi tiến hành thử nghiệm trên mô phỏng. 5.2. Tiến hành các thử nghiệm Trong phần này, chúng ta sẽ tiến hành các thử nghiệm để xác nhận kết quả của định lý 1 và 2 cũng như đề xuất cải thiện nêu ở trên. Để chuẩn bị cho thử nghiệm, chúng ta mở file .sln bằng Visual Studio, và trong các thí nghiệm, sẽ sử dụng file đầu vào là Homog.wl trong thư mục workloads. Để có thể tiến hành được các thí nghiệm đã nêu, tôi đã chỉnh sửa lại chương trình mô phỏng một chút. Đó là thêm một thuộc tính đánh dấu node có phải là free-rider hay không (vì free-rider có hành động hoàn toàn khác với nút bình thường, nó không mở kết nối upload cho bất cứ nút hàng xóm nào). Trong các thí nghiệm, tôi sử dụng chức năng được thiết kế cho “post flash crown” trong bài báo [4] để đưa các free-rider vào hệ thống song song cùng với các nút bình thường. Và để thực hiện thử nghiệm 3, tôi cũng đã chỉnh sửa lại cơ chế choke đối với seed theo như mô tả trong phần đề xuất phương án cải thiện. 5.2.1. Thử nghiệm thứ nhất A. Mô tả thử nghiệm: Trong thử nghiệm này, chúng ta sẽ kiểm tra để xác nhận lại kết quả của định lý 1. Chúng ta sẽ xem xét ảnh hưởng của free-riding lên hệ thống khi thay đổi tốc độ tham gia vào mạng của free-rider từ 1 đến 12, và cố định tốc độ tham gia vào mạng của non free-rider là 100. B. Thiết lập các tham số - File size: 50MB - Block(piece) size: 256KB - #initial seed: 1 - Seed leaving probability: 1 - Non free-rider join rate: 100/s - Free rider join rate: thay đổi lần lượt từ 1 đến 12 - Join time : 10s - Băng thông của non free-rider: Download: 1500, Upload 400 - Băng thông của free-rider: Download: 1500, Upload 0 C. Kết quả thu được: Hình 5: Sự thay đổi thời gian download trung bình của free-rider và non free-rider theo sự biến thiên tốc độ tham gia mạng của free-rider. Từ kết quả thử nghiệm chúng ta thấy được rằng thời gian download trung bình của free-rider tăng lên một cách nhanh chóng (đường khá dốc) khi tăng tốc độ free-rider tham gia trong mạng (Tôi đã thử nghiệm khi λf bằng 20 thì 1 số free-rider không thể hoàn thành download – kết quả đó không được thể hiện trong biểu đồ này). Trong khi đó, thời gian download trung bình của các nút non free-rider lại thay đổi không đáng kể. Kết quả của thí nghiệm trong hình 5 thấy có sự tương ứng với biểu đồ lý thuyết thu được trong hình 3. Điều này chứng tỏ rằng cơ chế hiện tại của BitTorrent có khả năng hạn chế hiện tượng free-riding khá hiệu quả khi trong hệ thống không có seed. 5.2.2. Thử nghiệm thứ hai A. Mô tả thử nghiệm Trong thử nghiệm này, chúng ta sẽ xác nhận lại ảnh hưởng của seed đối với free-rider. Chúng ta sẽ cố định tốc độ tham gia vào mạng của cả free-rider và non free-rider tương ứng là 100 và 12. Và thay đổi tham số seed leaving probability (giá trị của tham số này là từ 0 đến 1, tương ứng với tỉ lệ số non free-rider rời khỏi hệ thống sau khi hoàn thành quá trình download, giá trị này bằng 1 có nghĩa là tất cả non free-rider đều rời hệ thống sau khi download hoàn thành, giá trị này bằng 0 có nghĩa là tất cả non free-rider sẽ ở lại hệ thống và trở thành seed sau khi hoàn thành quá trình download). B. Thiết lập các tham số - File size: 50MB - Block(piece) size: 256KB - #initial seed: 1 - Seed leaving probability: Nhận các giá trị 1, 0.975, 0.95, 0.8, 0.5, 0.2, 0 - Non free-rider join rate: 100/s - Free rider join rate: 12 - Join time : 10s - Băng thông của non free-rider: Download: 1500, Upload 400 - Băng thông của free-rider: Download: 1500, Upload 0 C. Kết quả thu được Hình 6: So sánh thời gian download trung bình của free-rider và non free-rider khi số lượng seed trong hệ thống thay đổi Từ kết quả thí nghiệm, chúng ta thấy rằng, khi số lượng seed trong hệ thống tăng lên thì thời gian download hoàn thành trung bình của free-rider giảm đi, và giảm đến 1 giá trị gần như cố định khi tỉ lệ rời mạng là 0.8 (lúc này, số nút non free-rider ở lại mạng và trở thành seed tương đương với số lượng free-rider có trong mạng, do đó, free-rider có thể dễ dàng có được đủ lượng tài nguyên hệ thống cần thiết để hoàn thành download sớm). Điều này cũng khẳng định, cơ chế của BitTorrent không hiệu quả trong việc hạn chế hiện tượng free-riding khi hệ thống có nhiều seed. 5.2.3. Thử nghiệm thứ ba A. Mô tả thử nghiệm Trong thử nghiệm thứ 3 này, chúng ta sẽ tiến hành xem xét hiệu của của đề xuất cải tiến của tôi đã nêu trong chương 4. Các tham số được thiết lập tương tự như trong thử nghiệm 2. Tuy nhiên, có sự thay đổi trong cơ chế của seed B. Thiết lập các tham số - File size: 50MB - Block(piece) size: 256KB - #initial seed: 1 - Seed leaving probability: Nhận các giá trị 1, 0.975, 0.95, 0.8, 0.5, 0.2, 0 - Non free-rider join rate: 100/s - Free rider join rate: 12 - Join time : 10s - Băng thông của non free-rider: Download: 1500, Upload 400 - Băng thông của free-rider: Download: 1500, Upload 0 C. Kết quả thu được Hình 7: Thời gian download trung bình của free-rider trong cơ chế cũ và mới Trong khi thử nghiệm với tỉ lệ rời mạng của non free-rider bằng 1 và cơ chế mới, trong hệ thống chỉ có 32 free-rider có thể hoàn thành download ( trên tổng số 120 free-rider có trong hệ thống), thời gian download trung bình trên biểu đồ là tính cho các nút hoàn thành download còn lại. Với tỉ lệ rời mạng của non free-rider là 0.975 thì chỉ có 41 nút hoàn thành được quá trình download, và với tỉ lệ là 0.95 thì có 57 nút hoàn thành download. Từ tỉ lệ 0.9 trở xuống, free-rider mới có đủ tài nguyên để hoàn thành quá trình download. Từ biểu đồ cho thấy rằng, sau khi thay đổi cơ chế của BitTorrent, thời gian download trung bình của free-rider bị tăng lên, và cơ chế mới tỏ ra đặc biệt hiệu quả khi hệ thống có số lượng seed ít. Khi số lượng seed trong hệ thống tăng lên (~ cỡ bằng số lượng free-rider thì free-rider vẫn có cơ hội nhận đủ tài nguyên thông qua Optimistic Unchoking). Điều đó chứng tỏ đề xuất cải thiện được nêu trong chương 4 cũng đạt được những hiệu quả nhất định. Chương 6. Kết luận và phương hướng tiếp theo Trong nội dung của khóa luận, tôi đã giới thiệu tổng quan về mô hình mạng ngang hàng và tập trung vào tìm hiểu cơ chế và cách thức hoạt động của hệ thống chia sẻ file ngang hàng BitTorrent, hệ thống chia sẻ file lớn và phổ biến nhất hiện nay. Nghiên cứu tập trung vào vấn đề Free-riding đối với hệ thống BitTorrent. Bằng việc mô hình hóa hệ thống BitTorrent với các tham số, chúng ta đã thấy được rằng, các free-rider vẫn có khả năng chiếm được một phần nguồn tài nguyên hệ thống thông qua Optimistic Unchoking. Tuy nhiên, các tính toán cũng đã chỉ ra được cơ chế thúc đẩy của BitTorrent có khả năng hạn chế hiệu quả hiện tượng free-riding trong môi trường không có seed, tuy nhiên, cơ chế đó lại không thành công khi hệ thống có nhiều seed. Dựa trên kết luận trên, tôi đã đề xuất một cải tiến nhỏ giúp cho hệ thống BitTorrent hoạt động hiệu quả hơn trong việc hạn chế hiện tượng free-riding. Các thử nghiệm trên chương trình mô phỏng đã chứng minh tính đúng đắn của những kết luận thu được từ quá trình tính toán lý thuyết. Kết quả của thử nghiệm 3 cho thấy đề xuất cải tiến đã có những hiệu quả nhất định, tuy nhiên, kết quả đó vẫn chưa đạt yêu cầu như mong muốn. Đề tài nghiên cứu về ảnh hưởng của hiện tượng free-riding lên hệ thống chia sẻ file ngang hàng BitTorrent đã đạt được những kết quả nhất định. Tuy nhiên, những kết quả nghiên cứu mới chỉ dừng lại ở góc độ lý thuyết và mô phỏng, và với hạn chế về thời gian và trình độ, rất có thể nghiên cứu của tôi gặp phải những sai sót. Vấn đề đảm bảo tính công bằng trên mạng chia sẻ file ngang hàng, đặc biệt là làm sao hạn chế hiệu quả hiện tượng free-riding luông là vấn đề quan trọng vì nó thúc đẩy người dùng tham gia đóng góp cho hệ thống, nâng cao tính bền vững và hiệu quả của hệ thống. Trong tương lai, nếu có điều kiện tôi sẽ tiếp tục nghiên cứu để có được những kiến thức sâu hơn về hệ thống chia sẻ file ngang hàng BitTorrent, từ đó có thể đề xuất được những cải tiến giá trị và hiệu quả hơn. Xa hơn nữa, có thể tìm hiểu và viết ứng dụng BitTorrent Client thực sự để những cải tiến có thể được đưa vào ứng dụng trong thực tế. Tài liệu tham khảo [1] [2] [3] D.Bertsekas and R. Gallager, “Data Networks”, Prentice Hall, Englewood Cliffs NJ 1987. [4] A.R. Bharambe, C. Herley, and V.N. Padmanabhan, “Analyzing and Improving a BitTorrent’s Performance Mechanism”, Infocom 2006. [5] Bram Cohen, “ Incentives Build Robustness in BitTorrent”, 2003. [6] L. Guo, S. Chen, Z. Xiao, E. Tan, X. Ding, and X. Zhang, “Measurements, Analysis, and Modeling of BitTorrent-like Systems,” Proc. Internet Measurement Conference (IMC) , Berkeley, CA,October 2005. [7] M. Izal, G. Urvoy-Keller, E. Biersack, P. Felber, A. Hamra, and L. Garces-Erice, “Dissecting BitTorrent: five months in a torrents lifetime,” Proc. Passive and Active Measurements, Antibes Juan-les-Pins, France, April 2004. [8] S. Jun, andM. Ahamad, “Incentives in BitTorrent Induce Free Riding,” Proc. the ACMSIGCOMM Workshop on Economics of Peer-to-Peer Systems (P2PECON), ACM Press, Aug. 2005. [9] T. Locher, Patrick Moor, S. Schmid, R. Wattenhofer, “Free-riding in BitTorrent is cheap”, 2006. [10] J. A. Pouwelse, P.Garbacki, D. H. J. Epema, and H. J. Sips, “A Measurement Study of the BitTorrent Peer-to-Peer File-Sharing System,” Technical Report PDS-2004-003, Delft University of Technology, The Netherlands, April 2004. [11] J. A. Pouwelse, P. Garbacki, D. H. J. Epema, and H. J. Sips, “The BitTorrent P2P File-Sharing System: Measurements and Analysis,” Proc. Fourth International Workshop on Peer-to-Peer Systems (IPTPS), February 2005. [12] D. Qiu and R. Srikant, “Modeling and Performance Analysis of BitTorrent-like Peer-to-Peer Networks,” SIGCOMM, Sep. 2004. [13] Jiadia Yu, Minglu Li, Jie Wu, “Free-Riding on BitTorrent-like File Sharing System: Modeling, Analysis and Improvement” IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS, VOL. 19, pages 954-966. [14] Nguyễn Ngọc Hà. Nghiên cứu mô phỏng các tham số ảnh hưởng tới hiệu năng của mạng BitTorrent. Khóa luận Tốt nghiệp Đại học, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội, 2008.

Các file đính kèm theo tài liệu này:

  • docNghiên cứu ảnh hưởng của hiện tượng tham gia mà không đóng góp lên hệ thống chia sẻ file ngang hàng bittorrent.doc