Bộ mô phỏng của Jonathan Ledlie

Một phần của tài liệu Một phương pháp phi tập trung cho cân bằng tải trong các mạng ngang hàng có cấu trúc 04 (Trang 33)

Bộ mô phỏng của Jonathan Ledlie [5] thực hiện các thuật toán cân bằng tải trên kiến trúc mạng ngang hàng có cấu trúc Chord. Nó được viết bằng C++ trên hệ điều hành Linux. Sau đó, dựa trên bộ mô phỏng này, tác giả Nguyễn Thị Mi đã sửa đổi để mô phỏng chạy được trên Window.

Trong đó, các ID của node được sắp xếp trật tự trên không gian định danh của vòng Chord. Bộ mô phỏng gồm các bước được thực hiện tuần tự trong hàm main của file lb.cc: các node tham gia và thoát khỏi mạng, update bảng định tuyến, thực hiện truy vấn và cân bằng tải.

 Các node tham gia và thoát khỏi mạng

Việc tham gia và thoát khỏi mạng của các node sẽ được mô tả thông qua

birth(myInitialVsCount) và death(). Trong mô phỏng, tác giả sử dụng phân bố Pareto để mô tả quá trình vào/ra của các node trong mạng. Ở đây, tác giả dùng hai file đầu vào:

- Một file chứa thông tin về khả năng riêng (capacity) của từng node là file

gnutelle.4096n. File này gồm hai cột: cột đầu tiên là định danh ID của node, còn cột thứ hai là capacity của node đó. Ví dụ:

1 10 2 106 3 10 4 10 5 106 6 10 …

- Một file chứa thông tin vào/ra của các node ở mỗi vòng là file

pareto.4096n.3hours. File này gồm 3 cột: cột đầu tiên là số vòng (round) tính theo giây, thời gian bắt đầu là 0, cột thứ hai mô tả hoạt động của node tại thời điểm đó (b/d/w/r/q) với b: birth, d: death, w: chuyển đổi tải, r: trạng thái ghi của node là true và q: chỉ xuất hiện ở cuối file để kết thúc chương trình. Cột thứ ba là định danh ID của node thực hiện hành động ở cột thứ hai. Ví dụ:

 Cập nhật bảng định tuyến

Ban đầu các server ảo có một bảng định tuyến rỗng. Sau đó, nó sẽ sử dụng cơ chế định tuyến của Chord để hoàn thiện bảng định tuyến của mình. Nếu một server ảo có định danh là a, thì hàng i trong bảng định tuyến của nó là successor của key a+2i mod D (với D = 2160). Các server ảo dùng hàm fixFingers() trong file fingers.cc để cập nhật bảng định tuyến của mình.

Mỗi hàng trong bảng định tuyến hay còn gọi là finger sẽ có timeout là 30s. Mỗi lần finger này được sử dụng thành công thì timeout sẽ được thiết lập lại. Khi node rời bỏ mạng, các server ảo trỏ đến node không được thông báo.

 Thực hiện truy vấn

Các hàm phân bố được thực hiện trong file distribution.cc. Nếu các truy vấn gửi tới các node giống nhau thì phân bố truy vấn được gọi là phân bố uniform. Ngược lại, các truy vấn gửi đến các node không đồng đều thì phân bố truy vấn được gọi là phân bố Zipf. Dưới đây là hàm phân bố Zipf:

Trong đó, N là số

vấn (node có thứ hạng càng cao thì bị truy vấn càng nhiều) và thị đặc điểm của phân bố. Giá trị

thứ hạng khác nhau. Ta sẽ sử dụng các giá trị biến thiên của

thuật toán cân bằng tải sẽ cho kết quả như thế nào trong trường hợp mạng có độ skew khác nhau: = 0.8, = 1.2.

Truy vấn được khởi tạo từ node với đích được chọn từ phân bố đồng đều hoặc phân bố Zipf. Mỗi hop trong truy vấn sử dụng finger thích hợp để định tuyến truy vấn về đích. Nếu hop là node nặng tải thì truy vấn thất bại. Ngược lại, truy vấn thành công khi chúng đến được node đích.

 Cân bằng tải

Trung bình 30s, các node kiểm tra cân bằng tải một lần. Node sẽ kiểm tra tải hiện thời của nó là trên hay dưới tải định mức target (0.99x và 0.1x capacity). Nếu bị mất cân bằng tải, node sẽ thực hiện cân bằng tải theo các thuật toán: di chuyển server ảo một- một, threshold, k-choices và proportion. Code của các thuật toán cân bằng tải nằm chủ yếu ở file server.cc. Với việc gán giá trị cho tham số activeLBmethod, ta sẽ chạy với thuật toán tương ứng. Nếu activeLBmethod = ‘t’ thì thuật toán cân bằng tải là di chuyển server ảo một-một. Nếu activeLBmehthod = ‘g’ thì thuật toán cân bằng tải là threshold. Nếu activeLBmehthod = ‘p’ thì thuật toán cân bằng tải là proportion. Nếu activeLBmehthod = ‘k’ thì thuật toán cân bằng tải là k-choices. Còn nếu activeLBmehthod = ‘-’ thì không sử dụng thuật toán cân bằng tải nào. 4.2. Mô tả mô phỏng của giải pháp cân bằng tải mới

Các node vật lý được cài đặt là class PhysicalServer PS trong vòng Chord bao gồm các trường sau: id – định danh node, capacity – tải định mức, work – tải hiện thời, mismatch – độ lệch tải, isOverload – trạng thái của node, newid – id của node trên vòng Chord mới. Các server ảo được cài đặt là class VirtualServer VS của node cũng được lưu gồm các trường: double key – định danh của server ảo, int original_PS_ID – định danh của node đang quản lý VS, workPerRound – tải của VS. Các hàm thực hiện các bước của giải pháp cân bằng tải mới được mô tả trong file honghien.cc.

Vòng Chord mới sẽ được tạo dựa vào độ lệch tải trên vòng Chord cũ, sử dụng hàm NCN_create_nChord(numberOfOverloadPS). Độ lệch tải mismatch giữa tải định mức C và tải hiện thời W của node trên vòng Chord ban đầu được tính bằng công thức:

Dựa vào độ lệch tải này, ID của node trên vòng Chord mới được xác định như sau: if (ps[i].getCapacity() > ps[i].getWorkPerRound())

{

newID = ps[i].getId() + (int)(floor(ps[i].getMismatch())) *

FACTOR;

ps[i].setNewID(newID); // them truong new_id cho PS } else

{

newID = ps[i].getId();

ps[i].setNewID(newID); // PS nang tai co id moi bang id cu numberOfOverloadPS = numberOfOverloadPS + 1;

}

Nếu có PS nặng tải thì thực hiện chèn NCN_insert_nChord(). Nếu đến một lúc nào đó, vẫn còn PS nặng tải mà không thể chèn được thì chuyển sang bước hoán đổi NCN_dislodge_nChord().

Hình 4.1. M ô tả quá trình hoạt động của giải pháp mới

Mỗi node sẽ có 1 b ảng định tuyến được cài đặt là class PsFinger trong file server.h:

class PsFinger {

private:

ChordID *psfinger; // Mang cac finger public:

PsFinger(); ~PsFinger();

void fixPsFingers(ChordID newId); ChordID getPsKey(int index)

{

return (ChordID) psfinger[index]; }

};

Tại bước chèn, ta phải thực hiện tìm được node thỏa mãn điều kiện là định danh id của nó phải lớn hơn một giá trị cụ thể nào đấy. Ở đây ta sẽ sử dụng hàm findBestFitPs(PhysicalServer*inputPs,ChordID pivotId)với đầu vào là node tìm kiếm inputPs và một giá trị cho trước pivotId. Hàm này nằm trong file honghien.cc và được cài đặt như sau:

PhysicalServer* findBestFitPs(PhysicalServer* inputPs, ChordID

pivotId) {

map<ChordID, PhysicalServer*>::iterator p; while (true){

ChordID successorId = inputPs-

>getPsFingerId(0); if (successorId == pivotId) {

ps = findSuccessor(successorId); return ps;

}

else if (successorId > pivotId) {

p = pServers.find(successorId); return p->second;

} else{

ChordID key = findClosetPreceding(currentPs, pivotId);

p = pServers.find(key); currentPs = p->second;

} }

Ở đây, ta sử dụng 2 hàm là hàm tìm successor của một node có định danh newID: findSuccessor(ChordID newID)và hàm tìm predecessor của một node có định danh pivotId: findClosetPreceding(PhysicalServer* currentPs, ChordID pivotId)

PhysicalServer* findSuccessor(ChordID newID) { map<ChordID, PhysicalServer*>::iterator p; p = pServers.upper_bound(newID); if (p == pServers.end()) { p = pServers.begin(); } return p->second; }

ChordID findClosetPreceding(PhysicalServer* currentPs, ChordID

pivotId) {

ChordID key = 0;

ChordID currentId = currentPs->getNewID(); for (int i = fingerPsCount - 1; i >= 0; i--) {

key = currentPs->getPsFingerId(i); if (pivotId > key && key > currentId) { return key; } } return -1; }

Sau bước chèn, ta lại kiểm tra số PS nặng tải, nếu số PS nặng tải =0 thì thuật toán kết thúc thành công, nếu không thì chuyển sang bước hoán đổi. Tại bước hoán đổi, nếu thực hiện hoán đổi được thì sẽ quay lại bước chèn. Thuật toán kết thúc khi không còn PS nặng tải nào hoặc khi không thể hoán đổi được nữa.

Khi tạo được vòng Chord mới, khi chèn được các VS vào các PS nhẹ tải và ngay cả khi hoán đổi các VS giữa các PS ta đều cần phải update bảng định tuyến của các node PS. Ở tất cả các bước sẽ đều gọi hàm updateNewChord() trong file

honghien.cc

void updateNewChord() {

ASSERT(pServers.size() == psActiveCount);

map<ChordID, PhysicalServer*>::iterator p = NULL; for (p = pServers.begin(); p != pServers.end(); p+ +) {

((PhysicalServer*) p->second)->fixPsFingers(); }

}

Bảng định tuyến PsFinger của các node gồm 2 cột: cột thứ nhất là id, cột thứ hai là successor(id) tương ứng. Khi cập nhật vòng Chord mới, các bảng định tuyến phải được cập nhật theo. Hàm cập nhật bảng định tuyến fixPsFingers của các node nằm trong file honghien.cc được cài đặt như sau:

void PsFinger::fixPsFingers(ChordID newId) {

ChordID rowId = 0;

PhysicalServer* ps = NULL;

for (int i = 0; i < fingerPsCount; i++) {

rowId = newId + fingerStep[i]; ps = findSuccessor(rowId); psfinger[i] = ps->getNewID(); }

}

4.3. Kết quả

Theo đánh giá của các tác giả trước, thì các phương pháp cân bằng tải di chuyển server ảo có kết quả tốt hơn các phương pháp k-choices, proportion và threshold, nên ở đây tôi chỉ so sánh kết quả thử nghiệm của mô phỏng trong các trường hợp: Di chuyển server ảo một-một, Di chuyển server ảo nhiều-nhiều, Giải pháp cân bằng tải phi tập trung mới đề xuất trong luận văn này.

Trong file lb.cc, tham số activeLBmethod được sử dụng để chạy các thuật toán cân bằng tải. Ta sẽ thay đổi tham số activeLBmethod tương ứng với các thuật

toán: giá trị ‘t’ (di chuyển server ảo một-một), ‘d’ (di chuyển server ảo nhiều-nhiều),

‘h’ (giải pháp cân bằng tải phi tập trung mới). 4.3.1. Lượng truy vấn trên một node thay đổi

Trong mô phỏng, để biểu diễn lượng truy vấn đến các node trên một giây (một round) ta dùng tham số queryPerRound. Mô phỏng này mô tả hoạt động của 4096 node có khả năng trung bình là capacityAverage = 100, thời gian sống trung bình là 3600 giây và được thực hiện trong khoảng 1000 round để xem xét hiệu năng của mạng khi sử dụng các thuật toán cân bằng tải trong hai trường hợp: truy vấn đồng đều (uniform) và truy vấn không đồng đều (zipf với =0.8 và với =1.2 ).

Hình 4.2. Tỷ lệ phần trăm truy vấn thành công khi lượng tải thay đổi (truy vấn dạng Uniform)

Khi các truy vấn trong mạng được phân bố đều, ở dạng Uniform, hiệu quả của giải pháp cân bằng tải phi tập trung mới và thuật toán di chuyển server ảo nhiều-nhiều là ngang nhau và tốt hơn so với thuật toán di chuyển server ảo một-một. Đặc biệt, khi lượng truy vấn đến node tăng q =10 thì sự khác biệt này càng rõ.

Hình 4.3. Tỷ lệ phần trăm truy vấn thành công khi lượng tải thay đổi (truy vấn dạng Zipf 0.8)

Hình 4.4. Tỷ lệ phần trăm truy vấn thành công khi lượng tải thay đổi (truy vấn dạng Zipf 1.2)

Khi các truy vấn trong mạng ở dạng phân bố Zipf, giải pháp cân bằng tải phi tập trung mới hoạt động có hiệu quả ngang bằng so với các thuật toán di chuyển server ảo nhiều-nhiều.

4.3.2. Độ lệch trong truy vấn giữa các node thay đổi

Để đánh giá các thuật toán hoạt động thế nào khi độ skew của mạng tăng ( các node bị truy vấn nhiều ít khác nhau), ta sẽ sử dụng các thông số sau: queryPerRound = 10, lifeTimeAverage = 3600, capacityAverage = 100. Thay đổi tham số keyDistStr với các các giá trị: U, Z/0.8/4096, Z/1.2/4096 để tạo ra các trạng thái skew của mạng.

Hình 4.5. Tỷ lệ phần trăm truy vấn thành công khi độ skew của mạng thay đổi

Từ đồ thị trên, ta nhận thấy rằng, khi độ skew của mạng thay đổi, giải pháp cân bằng tải mới đề xuất vẫn có hiệu quả hoạt động ngang bằng với phương pháp di chuyển server ảo nhiều-nhiều và đều tốt hơn phương pháp di chuyển server ảo một-một.

Với các kết quả thu được, ta thấy rằng thuật toán cân bằng tải phi tập trung mới và thuật toán di chuyển server ảo nhiều-nhiều hoạt động hiệu quả hơn so với thuật toán di chuyển server ảo một-một. Chúng đều hoạt động tốt và đồng đều khi các truy vấn ở dạng Uniform và dạng Zipf. Như vậy, thuật toán cân bằng tải phi tập trung mới đã thành công trong việc phá vỡ tính tập trung hóa của thuật toán di chuyển server ảo nhiều- nhiều, mang lại tính chất phi tập trung ban đầu cho mạng ngang hàng có cấu trúc.

Chương 5. Kết luận

Từ việc nghiên cứu về mạng ngang hàng, mạng ngang hàng có cấu trúc, những ưu và nhược điểm của mạng này so với mô hình mạng client/server, cơ chế quản lý node và dữ liệu trong hệ thống mạng ngang hàng, các nguyên nhân gây mất cân bằng tải và các thuật toán cân bằng tải đã có theo hướng sử dụng server ảo trong mạng ngang hàng có cấu trúc Chord, luận văn đã đề xuất một giải pháp cân bằng tải phi tập trung mới khắc phục nhược điểm tập trung hóa của phương pháp di chuyển server ảo trước đó.

Dựa trên bộ mô phỏng các thuật toán cân bằng tải trong Chord của các tác giả Jonathan Ledlie và tác giả Nguyễn Thị Mi, luận văn cũng đã mô phỏng được giải pháp cân bằng tải phi tập trung đề xuất mới và thu được kết quả khả quan, ngang bằng với phương pháp trước.

 Về mặt nội dung, luận văn đã đạt được những kết quả sau:

- Tìm hiểu cơ sở lý thuyết về mạng ngang hàng, so sánh ưu và nhược điểm với mô hình mạng client/server, mạng ngang hàng có cấu trúc, bảng băm phân tán, Chord, cơ chế ổn định mạng của Chord

- Tìm hiểu các khái niệm liên quan đến tải, các nguyên nhân gây mất cân bằng tải trong mạng ngang hàng có cấu trúc, các thuật toán cân bằng tải theo hướng sử dụng server ảo đã có.

- Đã đề xuất giải pháp mới cân bằng tải phi tập trung dựa trên server ảo trong mạng ngang hàng có cấu trúc dựa trên những phương pháp đã có. Giải pháp này khắc phục nhược điểm tập trung của phương pháp di chuyển server ảo nhiều-nhiều bằng cách không sử dụng global pool - một cấu trúc dữ liệu để lưu trữ các server ảo gây nặng tải và thực hiện cân bằng tải cho hệ thống, mà dựa vào độ lệch tải của các node trong vòng Chord cũ để xây dựng thêm một vòng Chord mới, từ đó dựa vào cách truy vấn trong vòng Chord để tìm ra các node thỏa mãn yêu cầu của thuật toán.

- Đã nghiên cứu bộ mô phỏng các thuật toán cân bằng tải trước đó của các tác giả trước. Từ đó, mô phỏng được giải pháp cân bằng tải phi tập trung mới đề xuất và tiến hành phân tích đánh giá các kết quả thu được, so sánh với kết quả của các phương pháp trước trong hai trường hợp: truy vấn đến các node trong mạng tăng, độ lệch giữa truy vấn đến các node biến thiên.

Qua các kết quả mô phỏng đạt được cho thấy giải pháp đề xuất mới đã phá vỡ được tính tập trung hóa của phương pháp di chuyển server ảo nhiều-nhiều, có hiệu quả gần tương đương với thuật toán di chuyển server ảo nhiều-nhiều.

 Hướng phát triển của luận văn:

Từ các kết quả thu được, ta thấy rằng giải pháp cân bằng tải phi tập trung mới có kết quả ngang bằng với phương pháp di chuyển server ảo nhiều-nhiều trước đó. Trong các nghiên cứu tiếp theo cần phải cải tiến được giải pháp để hiệu quả cân bằng tải tốt hơn hẳn so với phương pháp cũ. Theo hướng nghiên cứu, ta có thể tìm hiểu thêm về vấn đề bảo mật để đảm bảo hệ thống khỏi các tác nhân nguy hiểm trong mạng ngang hàng có cấu trúc.

TÀI LIỆU THAM KHẢO Tiếng Việt

[1] Bùi Thị Lệ Hằng (2009), Sử dụng thông tin gần kề vị trí trong khảo duyệt web, Luận văn thạc sĩ trường Đại học Công nghệ, Đại học Quốc gia Hà Nội.

[2] Lê Anh Tuấn (2014), Định tuyến an toàn trong cấu trúc bảng băm phân tán Chord kép, Luận văn thạc sĩ trường Đại học Công nghệ, Đại học Quốc gia Hà Nội.

[3] Nguyễn Thị Mi (2009), Cân bằng tải trong các mạng ngang hàng có cấu trúc, 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

Tiếng Anh

[4] A. Rao, K. Lakshminarayanan, S. Surana, R. Karp, and I. Stoica. Load Balancing in Structured P2P Systems. In Proceedings of the Second International Workshop on Peer-to-Peer Systems (IPTPS ’03), Berkeley, CA, February 2003.

[5] J. Ledlie and M. Seltzer. Distributed, secure load balancing with skew, heterogeneity, and churn. Technical Report TR-31-04, Harvard University, December 2004.

[6] Sonesh Surana, Brighten Godfrey, Karthik Lakshminarayanan, Richard Karp, Ion Stoica (2004), Load Balancing in Dynamic Structured Peer-to-peer Systems.

[7] I. Stoica, R. Morris, D. Karger, M. F. Kaashoek, and H. Balakrishnan. Chord: A scalable peer-to-peer lookup service for internet applications. In Proceedings of the ACM

Một phần của tài liệu Một phương pháp phi tập trung cho cân bằng tải trong các mạng ngang hàng có cấu trúc 04 (Trang 33)

Tải bản đầy đủ (DOCX)

(46 trang)
w