Bảng dưới thể hiện các đường định tuyến mà P0 có thể sử dụng khi chuyển tiếp gói tin.
Ví dụ với dòng thứ 3, với đích là nút P3 lựa chọn đầu tiên của P0 là chuyển qua nút P2 sử dụng đường dẫn l0-2 và lựa chọn thứ hai là qua P1 sử dụng đường dẫn l0-1. Nếu như nút đích lưu khóa cần tìm thì sẽ không có lựa chọn thứ hai (N/A). Nếu hai nút có cùng khoảng cách đến khóa cần tìm ta chọn nút bên trái làm lựa chọn đầu tiên.
Định tuyến thích nghi: Mỗi nút ghi nhận giá trị của cờ h trong gói trả về trên cả hai đường định tuyến. Với mỗi cặp đường định tuyến mỗi nút duy trì k (ở đây k=2) giá trị xác suất đã quan sát được (op) của giá trị cờ h trong gói trả về như bảng dưới:
Các giá trị xác suất này là thông tin duy nhất mà mỗi nút cần phải duy trì cho việc định tuyến chống tắc nghẽn. Mỗi nút sẽ chỉ phải lưu thêm O(log(n)) thông tin thêm do đó mạng vẫn sẽ giữ được khả năng mở rộng cao.
Thay đổi lưu lượng: Để đạt được mục đích tăng thông lượng đạt được trên toàn mạng ta thực hiện việc chuyển lưu lượng chuyển qua các nút. Mỗi nút có thể sử dụng k đường định tuyến để chuyển tiếp gói tin (ở đây k=2). Như ở bảng trên mỗi nút lưu xác suất op1 và op2, giữa vào các xác suất này một nút sẽ chuyển lượng f1 lưu lượng qua đường định tuyến thứ nhất và f2 lưu lượng qua đường thứ hai (f1+f2=1). Một nút cập nhật giá trị f1 và f2 bằng cách sử dụng công thức:
δ = (op1 – op2 ) · φ f1 = f1 − δ, f2 = f2 + δ fmin ≤ fi, fj ≤ 1 – fmin
trong đó δ là lưu lượng chuyển từ đường định tuyến thứ nhất sang đường định tuyến thứ hai. Giá trị φ là một hằng số xác định tốc độ chuyển lưu lượng từ đường định tuyến này sang đường khác. Nếu δ có giá trị âm lưu lượng sẽ được chuyển ngược lại. Các giá trị f được có cận dưới được xác định bởi giá trị fmin
như công thức ở trên nhằm đảm bảo luôn luôn nhận được phản hồi về khả năng của mỗi đường định tuyến.
Với trường hợp k>2 đầu tiên chúng ta tính toán giá trị opmean là giá trị trung bình của tất cả các opi. Sau đó chúng ta sẽ tăng giảm fi dựa vào việc so sánh các giá trị opi và opmean.
Một nút cập nhật các giá trị op mỗi khi có truy vấn mới. Khi một nút chuyển tiếp các truy vấn từ các nút khác, nó sẽ chia lưu lượng theo các hướng dựa vào các tính toán về khả năng của từng đường định tuyến. Do đó trên mỗi nút truy vấn sẽ được định tuyến theo đường tối ưu, qua đó sẽ tăng thông lượng đạt được trên toàn mạng.
Nhược điểm của phương pháp này là khi muốn tăng số lượng các đường định tuyến, ta phải tăng kích thước bảng định tuyến. Sẽ là rất tốn kém tài nguyên nếu như mỗi nút phải duy trì bảng theo dõi trạng thái của nhiều nút khác. Đồng thời việc bỏ phương pháp định tuyến tham lam sẽ làm tăng số lượng gói tin truyền trên mạng.
Chương 4. Điều khiển tắc nghẽn sử dụng phương pháp thay đổi bảng định tuyến
4.1. Đề xuất phương pháp
Như các phân tích ở chương trước về các cơ chế điều khiển tắc nghẽn đã có, ta thấy còn một số nhược điểm cần khắc phục. Khóa luận này nhằm đưa ra một phương pháp điều khiển tắc nghẽn sử dụng việc thay đổi bảng định tuyến với mục đích chính là: điều khiển tắc nghẽn, giảm thiểu tối đa sự gia tăng số lượng nút phải đi qua với mỗi truy vấn so với phương pháp định tuyến tham lam đã có, đồng thời không làm ảnh hưởng quá nhiều đến mô hình hoạt động của mạng Chord, tránh phát sinh lãng phí tài nguyên cho việc duy trì thêm nhiều thông tin và các gói tin phụ phục vụ cho việc thay đổi định tuyến này.
Để thực hiện các yêu cầu trên ta sẽ tìm cách tác động đến bảng định tuyến trên từng nút để khi có nút tắc nghẽn trên bảng định tuyến, nút đó sẽ được thay thế bằng nút lân cận. Để tối thiểu số lượng nút phải đi qua với mỗi truy vấn ta sẽ ưu tiến thay thế nút tắc nghẹn bằng nút lân cận nằm ngoài khoảng giữa nút truy vấn và nút đang bị tắc nghẽn. Để đơn giản khi ta chuyển định tuyến đến nút lân cận nếu như nút đó cũng gặp tình trạng tắc nghẽn thì ta tiếp tục chuyển đến nút lân cận tiếp theo. Ta chỉ giữ trong mỗi mục của bảng định tuyến hai giá trị của nút đích đó là nút đích ban đầu và nút đích được chuyển định tuyến tới tại thời điểm hiện tại.
4.2. Nội dung chi tiết
Ta đi vào nội dung chi tiết của phương pháp đã được khái quát ở trên. Để đảm bảo việc điều khiển tắc nghẽn ta xét lần lượt các bước gặp phải khi cần giải quyết bài toán tắc nghẽn trên một hệ thống.
4.2.1. Phát hiện tắc nghẽn.
Trên mỗi nút ta tính toán tốc độ xử lý gói tin tối đa mà nút đó có thể xử lý được, ta có thể tính toán giá trị đó thông qua tốc độ xử lý và đường truyền của máy. Việc tính toán này không nằm trong nội dung của khóa luận này. Ta quy định trên mỗi nút sẽ tồn tại hai giá trị giới hạn gọi là hardLimitRate và softLimitRate, lần lượt ứng với tốc độ xử lý tối đa của máy trên một đơn vị thời gian: limitRate và x*limitRate (với x là hằng số 0<x<1). Khi tốc độ gói tin tới nút chạm tới mức softLimitRate ta coi như máy đó bước vào giai đoạn “tắc nghẽn mềm” và sẽ tiến
hành các phương thức chống tắc nghẽn với nút đó. Khi tốc độ gói tin tới mức hardLimitRate thì lúc đó máy bị tắc nghẽn hoàn toàn. Việc tính toán giá trị của hằng số x sẽ ảnh hưởng đến độ “nhạy” của việc phát hiện tắc nghẽn, nếu x quá nhỏ các nút sẽ dễ dàng bị coi là tắc nghẽn dù vẫn còn khả năng phục vụ, nếu x quá lớn sẽ khiến cho việc xử lý tắc nghẽn trên nút diễn ra quá muộn dẫn tới trường hợp nút bị tắc nghẽn hoàn toàn kéo theo số lượng gói tin bị loại bỏ sẽ tăng.
4.2.2. Xử lý trong trường hợp có tắc nghẽn
Khi phát hiện “tắc nghẽn mềm” trên nút, nếu nút nhận được một truy vấn tới thì hệ thống sẽ tiến hành các động thái sau:
Nút nhận đang bị tắc nghẽn sẽ gửi gói tin đến nút vừa gửi truy vấn đến nó thông báo mình bị tắc nghẽn. Nút nhận lưu lại danh sách các nút nó đã gửi thông báo tắc nghẽn đến.
Nút gửi truy vấn (có thể là nút vừa chuyển tiếp truy vấn) đến nút tắc nghẽn tiến hành thay đổi bảng định tuyến của nó: chuyển nút tắc nghẽn thành các nút lân cận không bị tắc nghẽn.
Truy vấn đến nút đang bị “tắc nghẽn mềm” vẫn tiếp tục được xử lý như bình thường
Để tiến hành thay đổi bảng định tuyến đồng thời giữ lại giá trị nút đích ban đầu ta thay đổi bảng định tuyến (bảng finger) bằng cách thêm một cột lưu giữ giá trị định tuyến ban đầu. Khi đó bảng finger có dạng ví dụ như sau:
Finger Active Route Origin Route
1 (Pi + 1) Pa Pa
2 (Pi + 2) Pb Pb
3 (Pi + 4) Pc Pc
… … …
M (Pi + 2m) Px Px
Finger Active Route Origin Route 1 (Pi + 1) Pa Pa 2 (Pi + 2) Pt Pb 3 (Pi + 4) Pc Pc … … … M (Pi + 2m) Px Px
Với Pt là successor của Pa. Việc chọn lựa nút thay thế là nút “xa hơn” nút nguồn so với nút ban đầu nhằm mục đích giảm thiểu số lượng nút mà gói tin phải chuyển qua.
Nếu có một truy vấn tới Pi mà theo bảng finger gốc truy vấn đó sẽ chuyển qua nút Pb, thì trong thời điểm này truy vấn đó sẽ được chuyển tới:
Pt nếu khóa của truy vấn không nằm trong khoảng của Pb và Pt
Pb nếu khóa của truy vấn nằm trong khoảng Pb và Pt
Trong trường hợp gói tin đến khi nút đang bị tắc nghẽn hoàn toàn (tốc độ gói tin đến vượt quá hardLimitRate) thì gói tin đó sẽ bị loại bỏ.
4.2.3. Xử lý khi hết tắc nghẽn
Các nút trong hệ thống thực hiện việc kiểm tra định kỳ số lượng truy vấn tới để so sánh với các giới hạn đã có. Khi một nút đang từ trạng thái tắc nghẽn chuyển về trạng thái không tắc nghẽn (có lượng truy vấn tới trong một đơn vị thời gian nhỏ hơn softLimitRate), hệ thống sẽ tiến hành các bước sau:
Nút vừa ra khỏi trạng thái tắc nghẽn sẽ gửi thông báo về tình trạng của mình cho một số nút trong danh sách các nút nó đã gửi thông báo tắc nghẽn mà nó đã lưu lại như mô tả ở bước trên.
Nút nhận được thông báo hết tắc nghẽn sẽ thay đổi các mục có liên quan về nút vừa gửi thông báo trong bảng định tuyến về trạng thái như ban đầu.
Ví dụ như trường hợp trên khi nhận được thông báo hết tắc nghẽn từ Pb, thì Pi sẽ chuyển Pt lại thành Pi trong bảng định tuyến của nó.
Số lượng nút sẽ nhận được thông báo khi nút đích hết tắc nghẽn cũng cần được quan tâm ở đây. Ta chỉ chọn ra một số lượng nhất định trong số các nút trong danh sách nút đã nhận được thông báo tắc nghẽn. Số lượng nút nhận được thông báo hết tắc nghẽn sẽ gián tiếp ảnh hưởng đến mức độ khôi phục lại tải sau tắc nghẽn của một nút, nếu ta đặt giá trị này quá thấp sẽ làm cho nút chậm trở lại trạng thái phục vụ bình thường, nếu như quá cao sẽ dễ làm cho nút bị tắc nghẽn trở lại.
4.3. Ví dụ minh họa
Ta xét một mạng Chord đơn giản với không gian khóa 8 bit để minh họa cho giải pháp vừa đưa ra:
Hình 15: Truy vấn thông thường trên mạng Chord (m=8).
Ta thực hiện việc truy vấn khóa 54 trên nút P8. Hình 13 mô tả quá trình truy vấn thông thường theo đúng như thuật toán ban đầu của Chord. Khi đó bảng finger trên nút P8 có dạng: