3 Định tuyến trên mạng ngang hàng
3.1 Mạng CAN 2–chiều với 6 nút Mỗi nút được gán cho một zone
rất đơn giản vì nó chỉ địi hỏi mỗi nút biết các nút hàng xóm liền kề của nút đó. Tuy nhiên, CAN tổ chức các khóa thành một khơng gian khố đa chiều nên làm cho hiệu quả định tuyến tăng lên rất nhiều so với việc duyệt các hàng xóm tuyến tính trong khơng gian một chiều.
Khơng gian khố
CAN sử dụng không gian tọa độ Decart d–chiều để cài đặt giao diện DHT.
Không gian tọa độ được chia thành các siêu khối chữ nhật (hyper–rectangle) và được gọi là các zone. Mỗi nút của hệ thống tương ứng với một zone và một nút được xác định bởi biên của zone đó. Một khố sẽ được ánh xạ vào một điểm nào đó trong khơng gian tọa độ và sẽ được lưu nào nút tương ứng vớizone chứa điểm được ánh xạ. Hình 3.1 mơ tả một mạng CAN hai chiều với sáu nút.
Khoá của CAN thu được bằng cách áp dụng một hàm băm thống nhất (uniform hash function). Cách đơn giản nhất cho việc chia khơng gian khố nhiều chiều từ các giá trị hàm băm phẳng là chia một tập cố định các bit thành tọa độ mỗi chiều. Giả sử, có một giá trị băm 160–bit, ta chia thành hai phần có
Hình 3.2: Định tuyến đến nút có khố k(x, y)trong khơng gian 2–chiều.
đầu thể hiện tọa độ trên trục Ox và 80–bit sau thể hiện tọa độ trên trục Oy.
Định tuyến
Mỗi nút duy trì một bảng định tuyến đến tất cả các nút hàng xóm liền kề trong khơng gian tọa độ. Trong khơng gian d–chiều, hai nút được xem là hàng
xóm nếu zone tương ứng của chúng giao nhau trên một chiều nào đó tức là chúng có chung một siêu phẳng d–1 chiều. Trong Hình 3.3, nút N1 và N5 là hàng xóm, nút N1 và N4 khơng là hàng xóm.
Thơng tin định tuyến của mỗi nút mạng trong CAN gồm có địa chỉ IP, số cổng và thông tin về zone của các hàng xóm. Dữ liệu này là cần thiết để truy cập vào các dịch vụ CAN trên một nút hàng xóm và biết vị trí của các nút hàng xóm trong khơng gian định danh. Nếu trong không giand–chiều được chia thành các zone có kích thước bằng nhau thì mỗi nút sẽ có 2d hàng xóm liền kề. Do đó, số nút tham gian vào CAN có thể tăng lên rất lớn trong khi đó các thơng tin định tuyến trên mỗi nút vẫn là hằng số.
Descart từ tọa độ nguồn đến tọa độ đích. Mỗi nút sử dụng thơng tin định tuyến của mình để đóng góp vào q trình này.
Mỗi thơng điệp trong CAN có chứa tọa độ nút đích. Nếu zone của nút hiện tại khơng chứa tọa độ của nút đích, nó sẽ chuyển thơng điệp tới nút hàng xóm có tọa độ gần nhất với nút đích, được minh họa trong Hình 3.2. Nếu các zone
trong khơng giand–chiều được chia đều nhau thì thủ tục định tuyến trung bình thực hiện trongO(d4)n1d bước. Do đó, nếu số chiều trong khơng gian (d) tăng lên thì sẽ làm giảm độ dài định tuyến trung bình.
Khả năng tự tổ chức
CAN tổ chức các nút thành một mạng chồng lấn một cách linh hoạt để thực hiện các thao tác trong khơng gian khố. CAN gán mỗi zone của khơng gian khố cho một nút, điều này đảm bảo không trùng lặp và khơng có khoảng trống trong khơng gian định danh.
• Tham gia
Để nút mới tham gia vào hệ thống,CAN cần phải cấp phát một zone cho nút mới và các nút tương ứng với các zone hàng xóm phải biết sự tồn tại của nút mới đó. Thủ tục tham gia được thực hiện qua ba bước như sau:
i) tìm một nút đã tồn tại trong CAN, ii) quyết địnhzone sẽ được gán cho nút mới và iii) cập nhật trạng thái của các hàng xóm.
Tại một vị trí được chọn ngẫu nhiên trong khơng gian khố, nút mới gửi một thông điệp đặc biệt (thông điệp join) cho các nút đã tham gia đế biết được nút mạng hiện đang quản lý zone chứa tọa độ của nút mới. Thông điệp join được chuyển tiếp bằng thủ tục định tuyến chuẩn trên CAN. Sau
khi, thơng điệp join tìm được nút đích d, zone của d sẽ tự chia nó thành hai phần và gán một nửa cho nút mới. Để dễ dàng cho việc hợp nhất các
Hình 3.3: Nút mới N7 đến zone của N1. N1 tự chia thành hai phần một phần gán choN7. Cập nhật tập hàng xóm của N1:{N7, N2, N6, N5} N7. Cập nhật tập hàng xóm của N1:{N7, N2, N6, N5}
nghĩa thứ tự các chiều sẽ được chia. Cuối cùng, nút d sẽ truyền các cặp khoá/giá trị tới nút mới mà nó phải chịu trách nhiệm.
Nút d và nút mới trao đổi thơng tin về các nút hàng xóm. Do đó, nút mới học được thơng tin về hàng xóm củad và nútd thêm nút mới là hàng xóm của mình. Sau đó, nút mới ngay lập tức thơng báo tới tất cả các hàng xóm về sự hiện diện của nó. Dựa vào thông điệp cập nhật, mỗi nút trong hệ thống cũng cung cấp tới các hàng xóm trực tiếp của nó một cách có chu kỳ về các hàng xóm và thơng tin của zone. Do vậy, chỉ có một lượng nhỏ
các vùng trong khơng gian khố bị ảnh hưởng khi một nút mới tham gia. Ảnh hưởng này chỉ phụ thuộc vào số chiều nhưng là hằng số so với số nút trong hệ thống.
• Nút lỗi
Các vùng lỗi hoặc các nút rời đi phải nhờ các nút đang sống để duy trì phân vùng hợp lệ của khơng gian khố CAN. Một nút phát hiện nút hàng
xóm bị lỗi khi nó khơng cịn gửi thơng điệp cập nhật nữa. Trong trường hợp này, nút hàng xóm này sẽ bắt đầu một bộ đếm thời gian. Khi bộ đếm
thời gian này hết giờ, nó sẽ gửi một thơng điệptiếp quản (takeover) tới các nút hàng xóm của nút bị lỗi. Bộ đếm thời gian được đặt cho các zone là khác nhau, các zone lớn có thời gian dài, các zone nhỏ có thời gian ngắn. Do đó, các nút có zone nhỏ sẽ gửi thơng điệp tiếp quản đến trước.
Khi một nút xảy ra lỗi thì dữ liệu nó sẽ bị mất. Tuy nhiên, các ứng dụng củaCAN được mong đợi là cập nhật dữ liệu một cách định kỳ các dữ liệu đã được chèn vào trong DHT. Do đó, hệ thống được phục hồi trở lại trạng
thái cuối cùng.
Trong khi định tuyến, một nút có thể bắt gặp trường hợp nút hàng xóm chuyển tiếp thơng điệp tới nút bị lỗi và cơ chế sửa chữa chưa được thiết lập. Trong trường hợp này, nó sẽ chuyển tiếp thơng điệp tới nút hàng xóm cịn sống gần nhất với nút đích. Nếu tất cả các nút hàng xóm bị lỗi thì nó sẽ là nút gần đích nhất, nó sẽ gửi thơng điệp làm ngập có kiểm sốt trong mạng chồng lấn cho đến khi nút gần nhất được tìm thấy.
• Rời mạng
Khi một nút l chủ động rời khỏi hệ thống, đầu tiên nó thơng báo cho nút
n mà nút này có thể hịa nhập với zone của nút l. Nếu nút hàng xóm này
khơng tồn tại, l sẽ chọn nút hàng xóm có thể tích nhỏ nhất sau đó sao chép các khóa và nội dung tài nguyên nó đang lưu trữ sang nút được chọn bởi vậy dữ liệu vẫn được duy trì.
Như vậy, việc các nút rời đi hoặc bị lỗi dẫn đến một nút hàng xóm quản lý nhiều hơn một zone trong một thời điểm. CAN sử dụng tiến trình ngầm để gán lại các zone cho các nút để ngăn ngừa việc phân mảnh khơng gian định danh.
• Hiệu quả định tuyến
CAN đi kèm với một số thiết kế tối ưu về việc giảm số lượng bước định tuyến trên mạng chồng lấn và giảm độ trễ. Kết hợp hai yếu tố này lại sẽ
cải thiện đáng kể hiệu suất định tuyến.
Việc tăng số chiều của khơng gian khố sẽ làm giảm số bước trong định tuyến và làm tăng số lượng hàng xóm của mỗi nút. Độ dài trung bình trong hệ thống có n nút và d chiều là O(d.n1d). Số chiều lớn cũng cải thiện khả
năng chịu lỗi trong việc định tuyến vì mỗi nút sẽ có một tập lớn hơn các nút hàng xóm để thay thế cho nút lỗi.
Đối với việc cân bằng tải, ta không chỉ xem xét yếu tố kích thước củazone
mà cịn cần xem xét nhiều yếu tố khác nữa. Đặc biệt, các cặp khoá/giá trị
phổ biến tạo ra các điểm nóng trong khơng gian khố và có thể làm giá trị tải tăng lên đáng kể trên các nút đang lưu trữ cặp khoá/giá trị này. Trong mạng CAN, các điểm nóng là ngun nhân gây ra tình trạng q
tải, ta có thể giảm tải bằng cơ chế cache và nhân bản. Mỗi nút sẽ cache một số các dữ liệu được truy cập thường xuyên và trả lời truy vấn với dữ liệu trong cache nếu có thể. Các nút q tải có thể nhân bản các khố phổ biến cho các nút hàng xóm của chúng. Do đó, dữ liệu được phân bố rộng trong không gian định danh.
3.2.2 Thuật tốn Chord
Thuật tốnChord được cơng bố bởi Stoica và đồng nghiệp năm 2001 [12]. Sự tinh tế của thuật toán xuất phát từ sự đơn giản của nó. Các khố củaChord là các chuỗi định danhl-bit. Chúng tạo thành một vòng tròn định danh một chiều.
Khơng gian khố
Mỗi mục dữ liệu và mỗi nút được gán với một khố. Thơng thường, cặp
khoá/giá trị (k, v) được lưu trữ bởi nút có giá trị khoá lớn hơn hoặc bằng k.
Nút như vậy được gọi là successor của khố k. Do đó, các nút trong vịng Chord
Hình 3.4: Khơng gian khóa củaChord
nhiệm cho tất cả các khố phía trước gần nhất của nó theo chiều ngược chiều kim đồng hồ.
Hình 3.4 là một ví dụ đơn giản về khơng gian khố của Chord. Mỗi chuỗi
định danh có độ dài là3–bit nên hệ thống sẽ có8 khố được đánh số từ000 đến
111. Trong ví dụ này, nút 001 là successor của khoá 001, nút 100 là successor
của các khoá 010, 011 và 100,...
Định tuyến
Cho một khơng gian khóa Chord, tất cả các khố được sắp xếp và liên kết
giữa khố và nút là duy nhất. Vì vậy, mỗi cặp khố/giá trị được cấp phát và được quản lý là duy nhất.DHT được hình thành bởi tập tất cả các cặpkhố/giá trị trên tất cả các nút trong vịng trịn định danh Chord. Các khóa để tra cứu
và cập nhật hoạt động hiệu quả nên việc định vị các nút chịu trách nhiệm cho các khóa trong thực tế được thực hiện một cách nhanh chóng.
Chord có thuật tốn định tuyến vơ cùng đơn giản, số trạng thái trên mỗi nút được yêu cầu là rất ít. Mỗi nút cần lưu trữ nútsuccessor của nó trên khơng
Hình 3.5: Bảng finger trong các nút mạng
gian khoá. Khi cần tra cứu một khoá, mỗi nút sẽ chuyển tiếp truy vấn tới nút
successor của nó trong khơng gian khố. Một trong số các nút sẽ quyết định khố nằm giữa nó và successor của nó. Do vậy, khố phải được lưu trữ bởi
successor của nó. Do đó, successor sẽ truyền kết quả trở lại nút truy vấn gốc. Rõ ràng, nếu áp dụng cách này thì số lượng thơng điệp tuyến tính được gửi đi trong trường hợp xấu nhất sẽ bằng số nút trong vòng tròn. Bởi vậy, Chord đã thêm vào cơ chế mới để tăng cường việc tìm kiếm khố.
Mỗi nút duy trì một bảng định tuyến, được gọi là bảng finger (xem Hình 3.5), liên kết đến các nút khác trong khơng gian khố. Với một khơng gian khố có độ dài l–bit thì bảng finger có tối đa l mục. Giả sử, trên nút có khố là n,
thì hàng thứ i trong bảng định tuyến chính là nút successor đầu tiên cách nút
n ít nhất 2i−1 vị trí (tức là nút successor của vị trí n+ 2i−1 ).
Bảng finger lưu trữ hầu hết l mục, kích thước của nó phụ thuộc vào số lượng khố hoặc nút được hình thành trong DHT. Mỗi dịng của bảng định tuyến
bao gồm khoá, địa chỉ IP, số cổng và có thể có một vài thơng tin kế tốn khác (book–keeping). Thậm chí với số lượng khố rất lớn, thì cũng chỉ có một lượng
tương đối nhỏ dữ liệu trên mỗi nút mà có thể ảnh hưởng tới việc quản lý và tìm kiếm. Mỗi dịng trong bảng finger của mỗi nút cung cấp thơng tin về các nút gần với nó nhất và khoảng cách liên kết giữa nút này và các nút có thơng tin trong bảng finger được tăng lên theo lũy thừa cơ số hai.
Thuật toán định tuyến Chord khai thác thông tin được lưu trữ trong bảng
finger của mỗi nút. Một nút sẽ chuyển tiếp truy vấn khoá k cho nút tiền nhiệm (predecessor) của k trên khơng gian khố thơng qua bảng finger. Khi truy vấn
tìm được nút n mà k nằm giữa nút n và successor của n trên khơng gian khố, nút n sẽ báo cáo rằng successor của n là câu trả lời của truy vấn.
Như vậy, cho dù khố k có ở xa so với nút gốc, truy vấn vẫn sẽ được định tuyến trên một khoảng cách lớn trên không gian định tuyến trong một bước. Cho các đoạn lũy thừa hai của bảng finger, mỗi bước định tuyến sẽ bao phủ ít
nhất một nửa khoảng cách còn lại trên khơng gian khố giữa nút hiện tại và nút đích. Kết quả này dẫn đến trung bình có O(log(N)) bước định tuyến cho một vòngChord với N nút tham gia. Stoica và đồng nghiệp đã chứng minh thời gian tra cứu trung bình là 12log(N) bước.
Khả năng tự tổ chức
Hệ thống Chord như mô tả ở trên cho phép các nút tham gia và rời bỏ hệ thống một cách dễ dàng cũng như chống lại các nút lỗi một cách hiệu quả nhất.
• Tham gia
Thứ tự để một nút mới tham gia vào Chord như sau: nút mới phải quyết định giá trị khố n của nó. Giao thức gốc của Chord không áp đặt và hạn chế lựa chọn này. Với một nút mới n, các nút o khác phải biết về sự tồn tại củan trong hệ thống. Bằng việc truy vấn đếno với khoá mà nút n sở hữu,
n nhận được successor s của nó. n thơng báo sự hiện diện của nó dẫn đến việc phải cập nhật predecessor của s thành n. Sau đó, nút n sẽ xây dựng bảngfinger bằng việc thực hiện các truy vấn tớio để tìm các successor tại
các vị trí n+ 20, n+ 21, n+ 22,... Lúc này, n có bảng finger của nó và các con trỏ liên kết đến successor là hợp lệ. Tuy nhiên, n khơng có mặt trong
bảng finger của các nút khác. Đặc biệt, n khơng biết predecessor của nó cũng như successor mới từ đó thuật tốn tra cứu khơng thích hợp cho việc quyết định predecessor của một nút.
• Giao thức ổn định
Chord giới thiệu giao thức ổn định để xác nhận và cập nhật các con trỏ
successor đến các nút tham gia và rời bỏ hệ thống. Tính ổn định địi hỏi phải bổ sung thêm một con trỏ predecessor và thực hiện cập nhật định kỳ trên mọi nút. Hàm ổn định của nút k yêu cầu successor của k trả lại predecessor của nó là p. Nếu p bằng k, k và successor chấp nhận là
predecessor và successor tương ứng của nhau. Thực tế, p nằm giữa k và
successor của nó chỉ ra là p hiện tại đã được thêm vào vịng Chord như là một successor của k. Do đó, nút k cập nhật các con trỏ successor của nó tới p và thơng báo p trở thành predecessor của nó.
Với giao thức ổn định, nút mới n không chủ động xác định predecessor.
Thay vào đó, predecessor tự phát hiện và sửa các con trỏ successor và
predecessor không ổn định bằng cách chạy một thủ tục nào đó (thủ tục
stabilize()). Sau khi nútnđã học được cácpredecessor của nó, nó sao chép tồn bộ khố mà nó chịu trách nhiệm, các khố này nằm giữa predecessor