Sơ đồ thuật toán của giải pháp mới

Một phần của tài liệu (LUẬN văn THẠC sĩ) 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 32 - 37)

.

Hình 3.4 Sơ đồ thuật toán của giải pháp mới

Như vậy, chương 3 đã

server ảo cải tiến cho phương pháp di chuy pool đã nói trong chương 2. Thu

thuật toán di chuyển server trung của thuật toán di chuy bình thường mà không sợ hệ

Hình 3.4. Sơ đồ thuật toán của giải pháp mới

ã trình bày giải pháp cân bằng tải phi tập trung s n cho phương pháp di chuyển server ảo nhiều-nhiều s

ương 2. Thuật toán này vẫn chưa cải thiện được hi n server ảo nhiều-nhiều, tuy nhiên, nó đã bước đầu phá v t toán di chuyển server ảo nhiều-nhiều, và hoàn toàn có th

ệ thống bị đổ vỡ khi bị tấn công.

p trung sử dụng các u sử dụng global c hiệu năng của u phá vỡ tính tập u, và hoàn toàn có thể hoạt động

Chương 4. Mô phỏng và đánh giá

Để so sánh giải pháp mới với các phương pháp đã có, chương này sẽ mô tả mô phỏng giải pháp mới. Trước đó, tác giả Jonathan Ledlie đã xây dựng một bộ mô phỏng các thuật toán cân bằng tải: k-choices, di chuyển một-một, threshold và proportion.

Khóa luận tốt nghiệp “Cân bằng tải trong các mạng ngang hàng” của tác giả Nguyễn

Thị Mi cũng đã mô phỏng được thêm phương pháp di chuyển nhiều-nhiều và phương pháp cân bằng tải phi tập trung dựa trên server ảo [3]. Chương này sẽ đi vào việc thực hiện mô phỏng, từ đó có thể đánh giá hiệu năng của các phương pháp đã có và giải pháp cân bằng tải mới.

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

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ụ:

0 10 1 106 2 10 3 10 4 106 5 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ụ:

0 b 0 0 b 1 0 b 10 0 b 100 0 b 1000 0 b 1002 …  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ố lượng node được truy vấn, k là thứ hạng của node được truy

vấn (node có thứ hạng càng cao thì bị truy vấn càng nhiều) và là giá trị lũy thừa biểu thị đặc điểm của phân bố. Giá trị đại diện cho mức độ truy vấn giữa các node có các thứ hạng khác nhau. Ta sẽ sử dụng các giá trị biến thiên của để xem xét xem các 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().

Một phần của tài liệu (LUẬN văn THẠC sĩ) 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 32 - 37)

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

(46 trang)