Chương 3. ĐIỀU KHIỂN TẮC NGHẼN TRONG MẠNG NGANG HÀNG CÓ CẤU TRÚC
3.3. Điều khiển tắc nghẽn bằng thay đổi bảng định tuyến
Trong phần này, chúng tôi mô tả chi tiết thuật toán điều khiển tắc nghẽn đề xuất (thuật toán CA-Chord). Thuật toán hoạt động bằng cách thay đổi bảng định tuyến để tránh định tuyến các câu truy vấn đi qua nút tắc nghẽn trong mạng ngang hàng có cấu trúc. Khi nút tắc nghẽn nhận được một yêu cầu truy vấn, nó sẽ gửi một thông báo tắc nghẽn trở lại nút gửi (nút nguồn hoặc nút chuyển tiếp các câu truy vấn) để thông báo tình trạng tắc nghẽn. Thông báo tắc nghẽn có chứa thông tin về nút thay thế do nút tắc nghẽn lựa chọn. Nút gửi sẽ thay đổi bảng định tuyến bằng cách thay thế nút tắc nghẽn trong bảng định tuyến bởi nút thay thế trong thông báo tắc nghẽn mà nó nhận được. Nút thay thế nằm sau nút tắc nghẽn trên đường định tuyến của truy vấn. Khi nút tắc nghẽn trở lại trạng thái bình thường, nó gửi thông báo hết tắc nghẽn cho các nút gửi đã nhận được thông báo tắc nghẽn của nó để các nút này thay đổi bảng định tuyến trở về trạng thái ban đầu.
74
Phương pháp này có thể tránh tắc nghẽn cục bộ thông qua việc tận dụng khả năng của các nút không tắc nghẽn để định tuyến gói tin, đồng thời không làm tăng số bước trong đường đi của gói tin, không làm ảnh hưởng đến mô hình mạng Chord và không làm tăng kích thước của bảng định tuyến.
Phương pháp CA-Chord hoạt động theo các bước sau:
Bước 1: Phát hiện tắc nghẽn
Mỗi nút trong hệ thống có khả năng định tuyến C, là số tối đa các thông báo truy vấn mà nút đó có thể định tuyến trong một đơn vị thời gian. Giá trị C được xác định dựa trên kích thước của thông báo truy vấn và băng thông được sử dụng cho việc định tuyến các thông báo truy vấn. Gọi B là băng thông mà một nút sử dụng cho việc định tuyến các thông báo truy vấn, đơn vị đo của B là Mbps, S là kích thước của thông báo truy vấn, đơn vị đo của S là Byte. Khi đó, khả năng định tuyến của một nút được xác định theo công thức 3.1:
𝐶 = 𝐵
8 × 𝑆 (3.1)
Giả sử kích thước của thông báo truy vấn là 200 Byte, băng thông của nút là 100Mbps và người dùng thiết lập băng thông định tuyến các thông báo truy vấn là 10Mbps thì khả năng định tuyến của nút đó là 6250 (10 Mbps / 200 Byte = 10000000 bit/s / 200 * 8 bit = 6250) thông báo trên một giây.
Nếu tốc độ thông báo truy vấn đến một nút lớn hơn khả năng định tuyến thì nút đó sẽ không xử lý thêm bất kỳ một thông báo truy vấn nào nữa và các thông báo truy vấn đến sau sẽ bị loại bỏ. Trạng thái này được gọi là trạng thái
"tắc nghẽn cứng". Trạng thái "tắc nghẽn cứng" của một nút cho biết nút đó bị tắc nghẽn hoàn toàn, không còn khả năng xử lý thông báo truy vấn. Tốc độ thông báo truy vấn đến được tính toán dựa trên việc đếm số thông báo truy vấn đến trong một giây.
75
Để tránh xảy ra mất mát gói tin khi tắc nghẽn, mỗi nút sẽ theo dõi tốc độ gói tin đến phục vụ phát hiện sớm tắc nghẽn. Chúng tôi định nghĩa một tham số T gọi là ngưỡng tắc nghẽn mềm cho biết trạng thái tắc nghẽn của một nút.
Ngưỡng tắc nghẽn mềm được xác định theo công thức (2) dưới đây:
T = p * C (2) với p là một tham số hệ thống và 0 < p< 1.
Khi tốc độ thông báo truy vấn gửi đến của một nút đạt đến ngưỡng tắc nghẽn mềm, chúng tôi xem nút đó ở trạng thái bị tắc nghẽn. Trong trường hợp này, nút sẽ kích hoạt thủ tục xử lý tránh tắc nghẽn, tuy nhiên các thông báo truy vấn đến vẫn được xử lý như bình thường. Trạng thái này được gọi là
"trạng thái tắc nghẽn mềm".
Giá trị của ngưỡng tắc nghẽn mềm T ảnh hưởng đến "độ nhạy" của việc phát hiện tắc nghẽn. Nếu T quá nhỏ, các nút dễ dàng được coi là bị tắc nghẽn ngay cả khi chúng vẫn có khả năng xử lý. Mặt khác, nếu T quá lớn, quá trình xử lý nghẽn được thực hiện muộn, dẫn đến một nút bị tắc nghẽn hoàn toàn, điều này sẽ làm tăng số lượng gói tin bị loại bỏ. Giá trị thích hợp của T được xác định dựa trên một số thí nghiệm cụ thể trong đánh giá thuật toán.
Mỗi nút duy trì một danh sách các nút láng giềng đứng sau (theo chiều kim đồng hồ) trong không gian định danh ở trạng thái không tắc nghẽn và danh sách các nút phía trước (theo ngược chiều kim đồng hồ) mà nó gửi thông báo tắc nghẽn. Khi một nút thay đổi từ trạng thái tắc nghẽn sang trạng thái không tắc nghẽn, nó sẽ thông báo trạng thái của nó cho các nút trong danh sách nút phía trước nó để các nút này cập nhật lại bảng định tuyến. Danh sách các nút láng giềng đứng sau không bị tắc nghẽn được dùng để lựa chọn ra nút thay thế tốt nhất.
Bước 2: Xử lý tắc nghẽn
76
Khi một nút ở trạng thái "tắc nghẽn mềm" nhận được một thông báo truy vấn mới, nó sẽ thực hiện các tác vụ sau để tránh định tuyến gói tin đi qua các nút tắc nghẽn:
- Nút nhận thông báo truy vấn trong trạng thái tắc nghẽn (nút tắc nghẽn) gửi thông báo tắc nghẽn trở lại nút gửi thông báo truy vấn để thông báo trạng thái tắc nghẽn của nó và thông tin về nút thay thế. Nút thay thế là nút không tắc nghẽn có khả năng định tuyến truy vấn tốt nhất trong danh sách các nút láng giềng đứng sau không bị tắc nghẽn do nút tắc nghẽn quản lý. Phương pháp lựa chọn này làm giảm số lượng nút (nghĩa là số lượng hop) mà gói tin phải đi qua, tăng hiệu năng của toàn hệ thống. Thông tin về nút nhận thông báo tắc nghẽn được nút tắc nghẽn lưu vào cơ sở dữ liệu của nó để hạn chế việc gửi lặp lại các thông báo tắc nghẽn không cần thiết. Thuật toán xử lý tắc nghẽn tại nút n được mô tả bằng đoạn giả mã trong Hình 3.1. Trong đoạn mã đó, v là nút tốt nhất chưa bị tắc nghẽn sau nút n, s là nút chuyển tiếp câu truy vấn đến nút n.
Hình 3.1. Giả mã thuật toán xử lý tắc nghẽn tại nút n
- Khi nút gửi nhận được gói tin thông báo tắc nghẽn, nó thay thế nút tắc nghẽn trong bảng định tuyến bằng nút thay thế được chọn. Các gói tin mới sau đó sẽ được chuyển đi theo đường định tuyến mới.
77
Để khôi phục lại trạng thái ban đầu của bảng định tuyến, mỗi nút sẽ lưu giữ đường định tuyến gốc trước khi thay đổi bảng định tuyến để tạo đường định tuyến mới.
Bảng 3.2 dưới đây là một ví dụ cho việc xử lý tránh tắc nghẽn. Giả sử nút ni có định danh là Ni, bảng định tuyến ban đầu của nút ni như sau:
Idx Target ID Active Route Origin Route
1 Ni + 20 na na
2 Ni + 21 nb nb
… …
k-1 Ni + 2k-1 nk-1 nk-1
k Ni + 2k nk nk
… … … …
m Ni + 2m nx nx
Bảng 3.2. Bảng định tuyến ban đầu của nút ni
Khi nút nk bị tắc nghẽn, nếu nút ni chuyển một gói tin đến nút nk, nút nk
sẽ thông báo trạng thái tắc nghẽn của nó tới nút ni. Bảng định tuyến của nút ni
được thay đổi như trong bảng 3.3 dưới đây:
Idx Target ID Active Route Origin Route
1 Ni + 20 na na
2 Ni + 21 nb nb
… …
78
k-1 Ni + 2k-1 nk-1 nk-1
k Ni + 2k nt nk
… … … …
m Ni + 2m nx nx
Bảng 3.3. Bảng tìm đường của nút ni sau khi thay đổi
Ở đây, nút nt là nút thay thế của nút nk trong bảng định tuyến của nút ni. Sau khi bảng định tuyến được thay đổi, các thông báo truy vấn tiếp theo đến một nút sẽ được định tuyến theo tuyến đường mới dựa trên cơ chế định tuyến của Chord.
Bước 3: Xử lý sau khi hết tắc nghẽn
Mặc dù việc thay thế bảng định tuyến giúp tuyến đường đến đích ngắn hơn, tuy nhiên nếu giữ nguyên bảng định tuyến như vậy thì sau một khoảng thời gian hoạt động, các nút trong bảng định tuyến sẽ có xu hướng xa dần nút ban đầu dẫn đến phá vỡ cấu trúc của mạng Chord và làm tăng độ trễ định tuyến. Do đó, sau khi hết tắc nghẽn một nút phải xử lý để đưa bảng định tuyến trở lại trạng thái ban đầu.
Khi trạng thái của nút thay đổi từ trạng thái tắc nghẽn sang trạng thái thông thường (nghĩa là số lượng gói tin đến trong một đơn vị thời gian nhỏ hơn ngưỡng tắc nghẽn mềm T), các thao tác sau đây được thực hiện:
- Nút vừa ra khỏi trạng thái tắc nghẽn sau một khoảng thời gian nhất định gửi thông báo hết tắc nghẽn tới các nút mà nó đã gửi thông báo tắc nghẽn.
79
- Nút nhận thông báo hết tắc nghẽn thay đổi tuyến đường đang hoạt động trong bảng định tuyến trở lại tuyến đường ban đầu. Ví dụ, khi ni nhận được thông báo hết tắc nghẽn từ nk, nó sẽ chuyển tuyến đường đang hoạt động trong bảng định tuyến của nó đi qua nút nk.
Khi nút nk ra khỏi trạng thái tắc nghẽn, nó chọn ngẫu nhiên z nút đã nhận thông báo tắc nghẽn để gửi thông báo hết tắc nghẽn. Quá trình này được thực hiện trong một khoảng thời gian t. Số z được chọn sẽ ảnh hưởng trực tiếp đến mức độ tải phục hồi trạng thái ban đầu của nút. Nếu số z quá nhỏ, nó sẽ khiến nút nhận thông báo hết tắc nghẽn trở lại trạng thái định tuyến bình thường chậm. Nếu số z quá cao, nó có thể làm cho nút không tắc nghẽn trở lại trạng thái bị tắc nghẽn một cách dễ dàng. Thuật toán xử lý hết tắc nghẽn tại nút n được mô tả bằng đoạn giả mã trong Hình 3.2. Trong đoạn giả mã đó, v là nút được chọn để gửi thông báo hết tắc nghẽn, z là tổng số nút sẽ được chọn để gửi thông báo hết tắc nghẽn.
Hình 3.2. Giả mã thuật toán xử lý hết tắc nghẽn tại nút n
Bước 4: Cập nhật danh sách các nút láng giềng đứng sau không bị tắc nghẽn có khả năng định tuyến tốt nhất
80
Danh sách các nút láng giềng đứng sau không bị tắc nghẽn có khả năng định tuyến tốt nhất của một nút có thể bị thay đổi do các nút vào ra trong mạng và sự thay đổi trạng thái của một nút từ trạng thái tắc nghẽn sang trạng thái không tắc nghẽn và ngược lại. Để duy trì danh sách trên, định kỳ trong một khoảng thời gian t mỗi nút n gửi thông tin đến các nút láng giềng đứng sau theo cơ chế Chord để cập nhật danh sách này. Mỗi nút n' khi nhận được thông báo cập nhật sẽ căn cứ vào hiệu số của khả năng định tuyến C của nút và tải làm việc hiện tại (số thông báo truy vấn định tuyến đang thực hiện) để xác định khả năng định tuyến còn có thể thực hiện được (khả năng định tuyến sẵn sàng). Căn cứ vào thông tin về khả năng định tuyến sẵn sàng của nút n' gửi cho nút n, nút n sẽ cập nhật lại danh sách các nút láng giềng đứng sau không bị tắc nghẽn có khả năng định tuyến tốt nhất.
Hình 3.3. Truy vấn thông thường trong mạng Chord (m=6)
Xét mạng Chord với 6 bit không gian khóa (64 định danh) như trong hình 3.3.
Nút n8 thực hiện truy vấn với k = 54. Khi hệ thống hoạt động bình thường, bảng định tuyến của nút n8 được thể hiện trong hình 3.3 (a). Khi nút
81
n42 bị tắc nghẽn, nó sẽ thông báo trạng thái nghẽn tới nút n8. n8 sẽ thay đổi bảng định tuyến của nó như trong hình 3.3 (b). Trên nút n8, tất cả đường định tuyến qua nút n42 sẽ được đổi thành n48 (kế tiếp của nút n42). Số lượng các nút mà truy vấn phải đi qua vẫn là 3, đó là số cần thiết trong trường hợp ban đầu.
Giả sử nút n48 đang ở trạng thái tắc nghẽn. Trong bảng định tuyến của n8, nút n48 sẽ được thay thế bằng n51. Trên nút n8, giả sử rằng chúng ta cần truy vấn khóa 49. Vì khóa 49 thuộc phạm vi [42, 51], truy vấn sẽ phải đi qua nút n42 và được xử lý như bình thường. Trong quá trình hoạt động, chúng tôi giả sử một số nút có bảng định tuyến đi qua nút n42 phải thay đổi thành các nút khác khi nút n42 bị tắc nghẽn. Khi n42 thoát khỏi trạng thái nghẽn, các nút có bảng định tuyến đã được thay đổi sẽ được khôi phục về trạng thái ban đầu.
Thuật toán điều khiển tắc nghẽn CA-Chord lựa chọn nút tốt nhất không bị tắc nghẽn trên đường định tuyến gói tin để thay cho nút bị tắc nghẽn. Nút không bị tắc nghẽn được chọn là nút đứng sau nút tắc nghẽn. Với cơ chế lựa chọn đề xuất, thuật toán đảm bảo được luôn tận dụng được các nút có khả năng định tuyến tốt nhất trong hệ thống, đồng thời làm giảm số bước định tuyến, rút ngắn được quãng đường định tuyến, tránh được tắc nghẽn xảy ra.
Do đó, tỷ lệ truy vấn thành công của thuật toán CA-Chord được cải thiện và nâng cao. Việc thay thế nút tắc nghẽn trong bảng định tuyến và bổ sung thêm một trường thông tin để lưu trữ đường định tuyến gốc (đường định tuyến lúc khởi tạo nút) không làm tăng quá cao chi phí cho việc duy trì bảng định tuyến.
Với cơ chế xử lý hết tắc nghẽn, các đường định tuyến gốc được khôi phục sau khi một nút ra khỏi trạng thái tắc nghẽn sẽ làm cho cấu trúc mạng được duy trì, bảng định tuyến không bị phá vỡ cấu trúc.