.1 Phân loại các hệ thống mạng ngang hàng

Một phần của tài liệu (LUẬN án TIẾN sĩ) nghiên cứu nâng cao hiệu năng hoạt động của mạng ngang hàng có cấu trúc (Trang 36 - 85)

Ưu điểm chính của mạng ngang hàng có cấu trúc là khả năng mở rộng và hiệu quả trong tìm kiếm. Tuy nhiên, vấn đề tổ chức của các nút trong mạng là phức tạp, đây là nhược điểm chính của các hệ thống này và việc duy trì các ánh xạ trong bảng định tuyến là tương đối khó khăn do có một số lượng lớn các nút thường xuyên vào và ra hệ thống.

Phần tiếp theo trình bày chi tiết về mạng ngang hàng có cấu trúc, đây là kiến trúc mạng được sử dụng trong nghiên cứu của luận án.

1.4. Mạng ngang hàng có cấu trúc

Các nút và tài nguyên trong mạng ngang hàng khơng cấu trúc phân bố tự do gây khó khăn cho việc tìm kiếm, đồng thời khơng đảm bảo chắc chắn kết quả cho mỗi truy vấn. Vấn đề này càng trở nên khó khăn hơn khi số lượng nút trong mạng tăng, do đó mạng ngang hàng khơng cấu trúc ít được áp dụng trong các hệ thống có yêu cầu mở rộng cao. Để khắc phục hạn chế này, mạng ngang hàng có cấu trúc với kĩ thuật bảng băm phân tán được sử dụng phổ biến hơn. Phần tiếp theo trình bày về bảng băm phân tán, một cấu trúc dữ liệu được sử dụng để xây dựng các mạng ngang hàng có cấu trúc.

1.4.1. Bảng băm phân tán

Bảng băm phân tán (DHT) là một hệ thống phân tán lưu trữ các cặp khóa-giá trị (key-value) phân tán trên các nút (các máy tính) và cung cấp cơ chế lưu trữ, tìm kiếm dữ liệu tương tự như bảng băm thông thường. Mỗi nút trong DHT quản lý các khóa cùng với các giá trị được ánh xạ và có thể truy vấn chính xác, hiệu quả giá trị liên quan đến một khóa cho trước. Các giá trị được ánh xạ với các khóa trong DHT có thể là bất kỳ dạng dữ liệu nào, như tệp tin âm thanh, hình ảnh, video, hồ sơ người dùng, e-mail, v.v.

Về cấu trúc, DHT gồm các thành phần sau: khơng gian khóa (keyspace), sơ đồ phân hoạch khơng gian khóa (keyspace partitioning scheme) và một mạng phủ (overlay network) để kết nối các nút trong DHT.

Khơng gian khóa: là tập các chuỗi m bit. DHT ánh xạ khóa k của dữ liệu

và định danh của nút id vào cùng khơng gian khóa DHT thơng qua một hàm

băm đồng nhất (consistent hashing). Khóa k của dữ liệu được tạo ra bằng việc băm tên tệp dữ liệu hoặc nội dung tệp dữ liệu. Định danh id của nút được tạo ra bằng việc băm thông tin liên quan đến nút, như địa chỉ IP hoặc địa chỉ cổng (Port). Mỗi khóa k do một nút quản lý, mỗi nút quản lý một vùng khơng gian khóa liên tục nhau.

Hình 1.3. Ánh xạ dữ liệu vào mạng DHT

DHT hỗ trợ hai thao tác chính là: Put(k, Data) và lookup (k). Hàm put(k,

Data) với đầu vào là khóa k của dữ liệu và nội dung dữ liệu (Data) được dùng

để chuyển dữ liệu đến nút quản lý khóa k. Hàm lookup(k) được sử dụng tìm kiếm nút quản lý khóa k, khi tìm được nút quản lý khóa k sẽ tìm được dữ liệu tương ứng với khóa k.

Sơ đồ phân hoạch khơng gian khóa: là cách chia khơng gian khóa giữa

các nút tham gia hệ thống. Trong sơ đồ phân hoạch khơng gian khóa DHT, một hàm (k1, k2) định nghĩa khoảng cách từ khóa k1 đến khóa k2. Khoảng

cách này là một khái niệm trừu tượng không liên quan đến khoảng cách địa lý hay độ trễ mạng. Mỗi nút DHT có một định danh id trong khơng gian khóa và quản lý tất cả các khóa k gần với id nhất theo hàm khoảng cách . Một tính chất quan trọng của hàm băm đồng nhất đó là, việc thêm hoặc loại bỏ một nút chỉ làm thay đổi tập khóa do các nút có id liền với nó quản lý mà khơng ảnh hưởng đến tất cả các nút khác.

Mạng phủ: mỗi nút duy trì một tập các đường liên kết đến các nút khác

(nút láng giềng hoặc bảng tìm đường). Các liên kết này tạo thành một mạng phủ. Mạng phủ này cho phép các nút có thể tìm kiếm một khóa bất kỳ trong khơng gian khóa. Mỗi nút lựa chọn danh sách các nút láng giềng theo một cấu trúc nhất định, gọi là Topology của mạng. Tất cả các Toplogy của DHT đều có một tính chất quan trọng đó là, cho một khóa k bất kỳ, mỗi nút hoặc là có định danh id trùng với k hoặc là có một liên kết đến nút có định danh id gần với k hơn theo khái niệm khoảng cách khơng gian khóa được định nghĩa ở trên. Khi đó có thể dễ dàng định tuyến một thơng điệp đến nút quản lý khóa bằng thuật tốn tham lam được mơ tả như sau: tại mối bước, thông điệp chuyển tiếp tới nút láng giềng có định danh gần với k nhất theo hàm khoảng cách . Khi khơng có nút láng giềng như vậy, thì thơng điệp phải đến nút gần nhất, là nút quản lý khóa theo định nghĩa ở trên.

Hình 1.4. Mạng phủ DHT với 4 nút trong mạng

Hầu hết các hệ thống DHT cố gắng cân bằng tải định tuyến thông điệp, tải phân bố (tải xử lý truy vấn) và tải lưu trữ trên các nút tham gia. Tuy nhiên, vẫn tồn tại một số lý do khiến một số nút trong hệ thống có thể chịu tải cao

hơn những nút khác, đó là: một nút quản lý một phần rất lớn không gian địa chỉ, một nút quản lý phần không gian địa chỉ với một số lượng lớn các đối tượng dữ liệu và một nút quản lý các đối tượng dữ liệu đặc biệt phổ biến. Trong những trường hợp này, bổ sung cơ chế cân bằng tải có thể giúp phân bổ tải đồng đều hơn cho các nút. Ví dụ, một nút có thể chuyển một phần khơng gian địa chỉ quản lý cho các nút khác hoặc nhiều nút có thể quản lý một không gian địa chỉ.

Trong luận án này chúng tơi sử dụng kiến trúc mạng ngang hàng có cấu trúc Chord cho các nghiên cứu trong các chương tiếp theo. Phần tiếp theo sẽ trình bày chi tiết về mạng ngang hàng có cấu trúc Chord.

1.4.2. Mạng ngang hàng Chord

Chord là một trong những giao thức mạng ngang hàng có cấu trúc phổ biến nhất được xây dựng dựa trên bảng băm phân tán. Trong Chord, khóa của một tệp tin được quản lý bởi một nút trong mạng. Tùy thuộc vào ứng dụng, dữ liệu liên quan đến khóa có thể được lưu trữ tại nút quản lý khóa. Chord sử dụng phương pháp băm đồng nhất để tạo định danh dữ liệu và định danh của nút, phương pháp này tạo ra một phân bố tương đối đều các khóa vào các nút trong mạng. Kích thước của khơng gian khóa là một số ngun m bit, m là đủ lớn để xác suất cho hai nút hoặc hai định danh của dữ liệu trùng nhau là rất nhỏ. Do các khóa được phân bố tương đối đồng đều cho các nút cho nên khi một nút tham gia hoặc rời mạng thì chỉ có một số nhỏ các khóa chuyển từ nút này sang nút khác, điều này tạo nên một sự cân bằng tương đối trong mạng.

Chord khắc phục các vấn đề hay gặp trong mạng ngang hàng:

- Cân bằng tải: giao thức Chord phân phối số lượng khóa đồng đều đến từng nút, thơng qua đó gián tiếp mang lại hiệu quả cân bằng tải.

- Tính phân tán: mạng ngang hàng Chord là hệ thống phân tán hồn tồn, vai trị của các nút trong mạng là như sau. Mạng ngang hàng Chord có tính ổn định cao.

- Khả năng mở rộng: Trong mạng ngang hàng Chord, một nút chỉ lưu trữ thông tin về một số nút khác trong mạng, điều này làm cho mạng Chord hoạt động hiệu quả, đặc biệt là khả năng mở rộng mạng. Với một mạng gồm N nút, mỗi nút chỉ cần duy trì thơng tin về O(logN) các nút khác và mỗi truy vấn chỉ yêu cầu O(logN) thông điệp để định tuyến, do đó có thể đáp ứng cả với những hệ thống rất lớn.

- Khả năng chịu lỗi: Chord có khả năng tự điều chỉnh các bảng định tuyến trên mỗi nút để thích ứng với sự vào ra liên lục của các nút trong mạng. Chord đảm bảo với mỗi một khóa bất kỳ đều có một nút tương ứng, chịu trách nhiệm về khóa đó.

- Khả năng đặt tên linh hoạt: Chord khơng có bất kỳ ràng buộc nào trên cấu trúc khóa mà nó tìm kiếm. Điều này tạo cho các ứng dụng sử dụng Chord khả năng tùy biến trong việc gán tên với các khóa của Chord.

1.4.2.1. Mơ hình của Chord

Các nút trong mạng Chord được tổ chức thành dạng một vòng tròn. Định danh của các nút bắt đầu từ 0 đến 2m-1, m là số bit biểu diễn độ lớn của khơng gian khóa. Khóa k được quản lý bởi nút đầu tiên có định danh bằng hoặc lớn hơn k. Nút đó được gọi là nút successor của khóa k hay successor(k). Successor của một khóa chính là nút gần nhất theo chiều kim đồng hồ tính từ

Hình 1.5. Vịng Chord với độ dài khơng gian khóa là 6 bit

Hình 1.5 mơ tả một vòng Chord với m=6, có chứa 10 nút và 5 khóa. Successor của định danh 10 là nút 14 do đó khóa k10 được đặt ở nút n14.

Tương tự khóa k24 và k30 được đặt ở nút n32, khóa k38 tại nút n38 và khóa k54 tại nút n56.

Kĩ thuật băm đồng nhất được sử dụng trong Chord để giảm thiểu sự ảnh hưởng trong mạng khi có nút tham gia hoặc rời mạng. Khi nút n tham gia vào mạng, một số khóa được đặt tại successcor của n chuyển sang cho nút n quản lý. Trong ví dụ trên, nếu có một nút với định danh 26 tham gia vào mạng, nó nhận được khóa k24 chuyển từ nút n32.

Successor của một nút là nút tiếp sau nút đó trên vịng Chord, predecessor là nút liền trước nút đó trên vịng Chord.

Tìm kiếm đơn giản: Mỗi nút duy trì một liên kết đến nút successor của

nó. Truy vấn với khóa k được chuyển từ nút khởi tạo truy vấn đi qua các nút

successor cho đến khi gặp nút quản lý khóa k.

Hình 1.6. Tìm kiếm đơn giản trên Chord

Hình 1.6 (a) là đoạn giả mã tìm kiếm nút quản lý khóa k của nút n. Đầu

tiên nó kiểm tra xem khóa k có nằm trong khoảng của n và successor của n

hay không. Nếu k nằm giữa n và successor của nó thì find_successor trả lại successor của n. Ngược lại, n nhờ nút successor của n tìm kiếm nút quản ký

khóa k.

Trong hình 1.6 (b), nút n8 thực hiện truy vấn với khóa k54. Nút n8 gọi

hàm find_successor(k54), kết quả trả về là nút n56 (successor của khóa k54).

Truy vấn được chuyển tiếp lần lượt qua tất cả các nút trên vòng tròn nằm giữa nút n8 và n56.

Tìm kiếm nâng cao: Số lượng thơng điệp trong tìm kiếm đơn giản tỷ lệ

tuyến tính với số nút trong mạng. Để giảm thời gian tìm kiếm, Chord bổ sung thêm một số thông tin phục vụ việc định tuyến. Với khơng gian khóa có kích thức m bit, mỗi nút n duy trì một bảng định tuyến gồm m hàng, được gọi là

chứa định danh của nút n' sao cho n' là nút đầu tiên tiếp sau khóa n+2i-1 trong vịng trịn định danh, n'=successor(n+2i-1), với 1 ≤ i ≤ m. n' gọi là finger thứ i của nút n. Finger đầu tiên của một nút chính là successor của nút đó.

Hình 1.7. Bảng finger của nút n8

Hình 1.7 biểu diễn bảng định tuyến của nút n8. Finger đầu tiên trỏ đến

nút n14 do 14 là nút liền sau (8+20) mod 26 = 9. Tương tự finger cuối cùng của nút n8 trỏ đến nút n42 do 42 là nút liền sau (8+25) mod 26 = 40.

Với cách tổ chức như vậy, mỗi nút chỉ lưu thông tin về một số giới hạn các nút có trong mạng và chỉ biết một số nút nằm gần với nó.

Hình 1.8 là đoạn giả mã sử dụng bảng định tuyến để tìm successor của định danh id. Nếu id nằm giữa định danh n và định danh successor của nó thì

find_successor trả lại định danh successor của n. Ngược lại, n tìm kiếm trong

bảng định tuyến nút n’ có định danh ngay sau id theo ngược chiều kim đồng hồ và thực hiện hàm find_successor trên nút n’.

Hình 1.8. Giả mã của phương pháp tìm kiếm nâng cao

Trong hình 1.9, nút n8 tìm kiếm successor của khóa k54. Nút n42 là nút

gần khóa k54 nhất trong bảng định tuyến của nút n8, cho nên nút n8 thông qua

nút n42 để chuyển tiếp câu truy vấn. Tương tự truy vấn chuyển qua nút n51 và đến đích là nút n56.

1.4.2.3. Tham gia và ổn định mạng

Mạng Chord phải giải quyết các vấn đề với việc một nút mới tham gia vào mạng, rời khỏi mạng và đột ngột rời khỏi mạng. Để tham gia vào mạng, nút n thông qua nút n' đã tồn tại trong mạng. Nút n' thực hiện hàm

find_successor với tham số đầu vào là định danh id của nút n, truy vấn trả lại

kết quả nút n''successor của nút n. Kết thúc truy vấn, nút n biết được nút successor n'' của nó. Nút n thơng báo cho nút successor n'' về sự hiện diện của nó trong mạng để nút n'' cập nhật lại con trỏ predecessor đến nút n. Nút n khởi tạo bảng định tuyến và điền thông tin vào bảng định tuyến bằng cách sử dụng hàm find_successor. Cuối cùng các khóa được quản lý bởi nút n'' có định danh nhỏ hơn hoặc bằng n được chuyển về cho nút n quản lý.

Chord sử dụng giao thức stabilization để kiểm tra tính hợp lệ và cập nhật con trỏ successor khi một nút tham gia và rời khỏi mạng. Giao thức stabilization yêu cầu bổ sung thêm một con trỏ predecessor và được thực hiện

định kỳ trên mỗi nút. Hàm stabilize() trên nút n yêu cầu nút successor của n

trả lại nút predecessor p. Nếu p bằng n, n và successor của n thống nhất với

nhau về con trỏ successor và predecessor tương ứng. Nếu p nằm giữa n và successor của n, điều đó chứng tỏ p là nút vừa tham gia vào hệ thống và là successor của n, vì vậy nút n cập nhật con trỏ successor là nút p và thông báo

cho nút p cập nhật con trỏ predecessor là nút n.

nhất quán giữa con trỏ successor và predecessor thông qua hàm stabilize().

Sau khi nút n xác định được predecessor, nó sao chép tất cả các khóa mà nó quản lý, các khóa giữa predecessor(n) và n.

Ở giai đoạn này, tất cả các con trỏ successor được cập nhật và các truy

vấn có thể được định hướng đến đích. Vì nút mới n khơng có trong bảng tìm đường của các nút khác, cho nên các truy vấn được chuyển tiếp qua

predecessor của n. Sau đó, predecessor của nút n chuyển tiếp truy vấn đến n

thông qua con trỏ successor của nó. Nhiều nút tham gia mạng đồng thời có

thể dẫn đến nhiều chuyển tiếp tuyến tính thơng qua con trỏ successor.

Số lượng các nút trong bảng tìm đường cần được cập nhật là O(logN),

với N là số nút trong hệ thống. Để tối ưu hóa chi phí cập nhật bảng tìm đường khi các nút ra vào mạng nhiều, mỗi nút chạy thủ tục fix_finger() một cách

định kỳ để cập nhật bảng tìm đường. Nó chọn một hàng ngẫu nhiên trong bảng tìm đường tại vị trí i (1 <i ≤ m) và kiểm tra tính đúng đắn của successor hiện tại của n+2i -1.

Khi một nút n chủ động rời mạng, các khóa do n quản lý được chuyển

cho nút successor của n và thông báo cho các nút successor và predecessor n

biết về việc n rời mạng. Điều này đảm bảo dữ liệu không bị mất và thông tin định tuyến trong bảng tìm đường khơng bị thay đổi.

Chống lỗi và tạo bản sao: Khi một nút n đột ngột rời mạng sẽ gây ra

việc mất mát các khóa, do đó một số nút sẽ khơng truy vấn được các khóa bị mất. Chord giải quyết vấn đề này bằng cách mỗi nút lưu thêm thông tin một danh sách các nút nằm sau nó trong vịng Chord. Nếu một nút n đột ngột

không liên lạc được với successor thì nó sẽ sử dụng các nút liền sau trong

Một phần của tài liệu (LUẬN án TIẾN sĩ) nghiên cứu nâng cao hiệu năng hoạt động của mạng ngang hàng có cấu trúc (Trang 36 - 85)

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

(158 trang)