Chương 1 KIẾN THỨC NỀN TẢNG
4.3. Sao lưu dữ liệu dựa trên phân cụm trong mạng P2P
4.3.3. Sao lưu và truy vấn dữ liệu
Trong hệ thống đề xuất, các mảnh dữ liệu của một tệp tin được lưu trữ tại một số nút thuộc cùng một cụm với nút quản lý khóa của tập tin. Khóa của tệp tin là một khóa duy nhất, được sinh ra từ nội dung của tệp tin và được dùng trong các truy vấn dữ liệu. Nút quản lý khóa của tệp tin quản lý các thông tin sao lưu dữ liệu của tập tin. Thông tin bao gồm danh sách các nút lưu trữ các mảnh dữ liệu của tập tin. Khi các nút ra/vào xuất hiện trong mạng, nút quản lý khóa của tệp tin thực hiện quá trình duy trì tính sẵn sàng dữ liệu bằng cách kiểm tra các mảnh dữ liệu của tệp tin đó và thực hiện việc bổ sung các mảnh dữ liệu nếu cần thiết.
Tiến trình sao lưu một tệp dữ liệu mới tại nút s được thực hiện theo các bước trong hình Hình 4.3 và được mô tả bằng đoạn giả mã Hình 4.4.
Hình 4.3. Ví dụ về sao lưu một tệp dữ liệu
yêu cầu sao lưu đến nút quản lý khóa (nút n) dựa trên thuật toán định tuyến DHT (dòng 2-3, Hình 4.4).
Hình 4.4. Giả mã sao lưu dữ liệu tại nút s
• Bước 2. Nút quản lý khóa gửi danh sách các nút có dung lượng lưu trữ chưa dùng tốt nhất trong cụm đến nút nguồn (dòng 4, Hình 4.4).
• Bước 3. Sau khi nhận được danh sách các nút có dung lượng lưu trữ chưa dùng tốt nhất, nút nguồn ngẫu nhiên chọn một số nút sao lưu từ danh sách. Sau đó, nút nguồn tạo các mảnh dữ liệu ra từ tệp tin bằng cách sử dụng phương pháp mã xóa và gửi mảnh dữ liệu cùng với khóa của tệp tin tới một nút sao lưu dữ liệu để lưu trữ. Nếu nút sao lưu không có đủ khoảng trống để lưu trữ mảnh dữ liệu, nó thông báo cho nút nguồn và nút nguồn chọn một nút dự phòng khác (dòng 5-11, Hình 4.4).
• Bước 4. Khi quá trình sao lưu kết thúc, nút nguồn cung cấp cho nút quản lý khóa của tệp tin danh sách các nút trong cụm lưu trữ các mảnh dữ liệu (dòng 12, Hình 4.4). Nút quản lý khóa sẽ lưu trữ thông tin khóa của tệp tin và danh sách các nút lưu trữ các mảnh dữ liệu vào cơ sở dữ liệu của nó.
Vì số nút trong một cụm là lớn cho nên khả năng để nút nguồn tìm được một nút lưu trữ các mảnh dữ liệu của tệp tin là không khó. Quá trình lựa chọn ngẫu nhiên các nút sao lưu từ danh sách các nút có dung lượng lưu trữ chưa dùng tốt nhất giúp cho các nút trong cụm cân bằng được tải lưu trữ.
Khi một nút muốn truy vấn một tệp tin, nó gửi một thông báo truy vấn đến nút quản lý khóa của tệp tin. Nút quản lý khóa tìm kiếm trong cơ sở dữ liệu và gửi lại danh sách các nút lưu trữ mảnh dữ liệu của tệp tin. Nút truy vấn chọn ngẫu nhiên các nút lưu trữ mảnh dữ liệu từ danh sách nhận được và gửi thông báo truy vấn đến các nút này cho đến khi nó lấy được k mảnh dữ liệu cần thiết để tái tạo lại tệp tin.
Vì thông tin về các nút lưu trữ các mảnh dữ liệu là điều kiện cần để giải quyết truy vấn, nút quản lý khóa cũng lưu trữ thông tin này trong danh sách các nút successor của nó. Nếu nút quản lý khóa rời mạng đột ngột, nút
successor sẽ chịu trách nhiệm về thông tin này. 4.3.4. Khôi phục tệp tin
Khi một nút rời mạng, nó sẽ chuyển thông tin về các tệp tin sao lưu mà nó chịu trách nhiệm quản lý cho nút successor của nó và gửi thông báo về trạng thái rời khỏi mạng cho nút đầu tiên của cụm. Nếu một nút rời mạng do lỗi mạng hoặc sự cố của nút thì nút successor dò tìm nút gặp sự cố dựa trên thủ tục ổn định mạng của giải thuật DHT. Sau đó, nút successor sẽ gửi thông báo về nút rời mạng đến nút đầu tiên của cụm. Tuy nhiên, trong cả hai trường
Như đã đề cập ở trên, chúng ta cần phải duy trì ít nhất k mảnh dữ liệu của tệp tin trong mạng để đảm bảo tính sẵn sàng của tệp tin.
Để giải quyết vấn đề trên, định kỳ nút đầu tiên của cụm sẽ gửi một thông báo cập nhật chứa danh sách các nút rời mạng trong một cụm hoặc ngay lập gửi danh sách này khi số nút rời mạng trong khoảng thời gian cập nhật lớn hơn một giá trị ngưỡng cho trước. Khi một nút nhận được một thông báo cập nhật, nó sẽ kiểm tra danh sách nút sao lưu đối với các tệp dữ liệu mà nó chịu trách nhiệm quản lý. Nếu nút rời mạng nằm trong danh sách này, số lượng các mảnh dữ liệu của mỗi tệp tin sao lưu tại nút rời mạng sẽ được đếm lại. Nếu tổng số mảnh dữ liệu của một tệp tin nhỏ hơn giá trị ngưỡng m thì nút quản lý thực hiện khôi phục lại các mảnh đã mất, trong đó m phải lớn hơn hoặc bằng k
- số mảnh dữ liệu cần thiết để tái tạo tệp tin (Hình 4.5).
Để khôi phục lại một mảnh dữ liệu bị mất, nút quản lý khóa của tệp tin sẽ chọn một nút sao lưu từ danh sách các nút có dung lượng lưu trữ chưa dùng tốt nhất và gửi một thông báo yêu cầu khôi phục đến nút đó. Nội dung thông báo chứa thông tin của các mảnh dữ liệu hiện có và danh sách các nút đang giữ các mảnh dữ liệu này. Nút sao lưu mới nhất sẽ lấy các mảnh dữ liệu từ các nút sao lưu khác, tái tạo lại tệp tin và tạo ra các mảnh dữ liệu bị mất. Nếu có nhiều mảnh dữ liệu cần lưu trữ, nút đó sẽ gửi các mảnh dữ liệu này đến các nút lưu trữ mới, nút mới này được chọn ngẫu nhiên từ danh sách các nút có dung lượng lưu trữ chưa dùng tốt nhất và gửi danh sách các nút sao lưu mới này cho nút quản lý khóa của tệp tin.
Thủ tục sao lưu dữ liệu có thể đảm bảo tính sẵn sàng của các tệp tin, tuy nhiên, việc thu thập lại các mảnh dữ liệu để tái tạo lại tệp tin sẽ mất chi phí di chuyển dữ liệu lớn. Để giảm chi phí sao lưu, các nút tìm kiếm tệp tin có thể tạo ra các mảnh dữ liệu bị mất do các nút rời mạng để lại và gửi các mảnh dữ liệu này đến các nút sao lưu mới. Thủ tục này có thể mô tả như sau (hình 4.6).
Khi một nút muốn truy vấn một tệp tin, nó sẽ gửi thông báo truy vấn đến nút quản lý khóa của tệp tin. Nút quản lý khóa kiểm tra số mảnh dữ liệu sao lưu hiện có của tệp tin. Nếu có mảnh dữ liệu bị mất, nó sẽ thông báo cho nút truy vấn gửi các mảnh dữ liệu bị mất đến các nút sao lưu mới được lựa chọn. Nội dung thông báo chứa danh sách các nút có dung lượng lưu trữ chưa dùng tốt nhất. Sau khi nút truy vấn tái tạo lại tệp tin nó sẽ tạo ra các mảnh dữ liệu bị mất và gửi các mảnh dữ liệu này đến các nút được lựa chọn từ danh sách các nút có dung lượng lưu trữ chưa dùng tốt nhất do nút quản lý khóa gửi để lưu trữ tại các nút đó. Trong trường hợp này, mảnh dữ liệu bị mất được khôi phục lại với chi phí bằng chi phí di chuyển một mảnh dữ liệu từ nút truy vấn đến nút sao lưu mới được lựa chọn.
Do độ trễ truyền tin trong việc chuyển thông báo cập nhật thông tin cụm và tỷ lệ nút ra/vào trong mạng cao nên số mảnh dữ liệu của một tệp tin bị mất có thể nhiều. Nếu số mảnh hiện có của một tệp tin nhỏ hơn số mảnh cần thiết để tái tạo lại tệp tin thì tệp tin đó sẽ không phục hồi được. Trong trường hợp này, nút quản lý khóa của tệp tin sẽ thông báo cho các nút lưu trữ xóa các mảnh dữ liệu liên quan đến khóa của tệp tin đó.
4.3.5. Xây dựng cụm
Chúng tôi đề xuất hai phương pháp xây dựng cụm trong thuật toán chúng tôi đưa ra, đó là xây dựng cụm tĩnh và xây dựng cụm động. Hai phương pháp đó được mô tả cụ thể như sau:
Xây dựng cụm tĩnh
Trong phương pháp xây dựng cụm tĩnh, không gian khóa DHT được chia thành m phần tương ứng với m cụm. Với không gian khóa gồm d-bit,
biên của cụm thứ k được định nghĩa bởi khóa đầu tiên và khóa cuối cùng theo hướng cùng chiều với kim đồng hồ, được xác định như sau:
Theo cách phân chia này số cụm trong không gian khóa là cố định (m
cụm), biên của một cụm cũng cố định theo số cụm. Các nút tham gia mạng sau khi có định danh sẽ thuộc một trong các cụm được phân chia. Số nút tham gia mạng có rải đều cho các cụm hay không phụ thuộc rất nhiều vào việc thiết kế hàm băm để sinh ra định danh của không khóa DHT.
Xây dựng cụm động
Trong mạng P2P, các nút tự do ra/vào mạng. Do đó, nếu phạm vi không gian khóa của một cụm là cố định, số lượng các nút trong một cụm có thể chênh lệch nhau tương đối nhiều, tùy thuộc vào số nút hiện có trong mạng. Nếu số lượng các nút trong một cụm nhỏ thì việc tìm kiếm một nút có khả năng lưu trữ sẵn sàng cao cho việc lưu trữ các mảnh dữ liệu là tương đối khó khăn. Nếu số lượng các nút trong một cụm lớn, thời gian cần thiết để một thông báo cập nhật thông tin cụm đi qua tất cả các nút trong một cụm là rất lớn và do đó thời gian cập nhật thông tin cụm cũng rất lớn. Có nghĩa là danh sách các nút có dung lượng lưu trữ cao trong cụm có thể bị lỗi và việc sao lưu có thể không thực hiện được vì nút nguồn có thể không tìm thấy bất kỳ nút sẵn sàng nào trong danh sách để sao lưu. Thêm nữa, nếu danh sách nút bị mất được thông báo đến các nút trong cụm quá chậm, việc sao lưu tệp tin có thể không thực hiện được do không đủ các mảnh dữ liệu sẵn có. Vì vậy, số lượng các nút trong một cụm nên giữ được một con số hợp lý.
khi số lượng các nút trong một cụm lớn hơn một ngưỡng cho trước. Khi nút đầu tiên của một cụm nhận được thông báo cập nhật thông tin cụm từ nút cuối cùng, nó sẽ kiểm tra số lượng các nút trong cụm. Nếu số nút trong cụm lớn hơn một giá trị ngưỡng splitThreshold cho trước, nó sẽ khởi tạo thủ tục tách cụm bằng cách gửi một thông báo cập nhật khác để thông báo cho tất cả các nút trong cụm mới đầu tiên về việc chia tách. Nút đầu tiên cũng gửi một thông báo đến nút đầu tiên của cụm thứ hai bằng các thủ tục định tuyến trong DHT. Điểm đến của thông điệp sẽ là khoá đầu tiên của cụm thứ hai. Nút đầu tiên của cụm thứ hai cũng gửi một thông báo cập nhật đến các nút khác trong cùng một cụm.
Không gian khóa của các cụm mới được chia theo phương pháp dưới đây. Nếu không gian khóa của cụm gốc trước khi chia là [𝐾𝑓𝑑, 𝐾𝑙𝑑), thì không gian khóa của hai cụm mới sau khi chia là một nửa của cụm gốc theo công thức (1).
𝐾𝑓𝑑1 = 𝐾𝑓𝑑
𝐾𝑙𝑑1 = 𝐾𝑓𝑑2 = 𝐾𝑓𝑑 + 1
2(𝐾𝑙𝑑 − 𝐾𝑓𝑑) (1) 𝐾𝑙𝑑2 = 𝐾𝑙𝑑
trong đó [𝐾𝑓𝑑1, 𝐾𝑙𝑑1] là không gian khóa của cụm mới thứ nhất và [𝐾𝑓𝑑2, 𝐾𝑙𝑑2] là không gian khóa của cụm mới thứ 2.
Thủ tục tách một cụm thành hai cụm mới B và C được mô tả bằng đoạn giả mã trong Hình 4.7. Thủ tục này được thực hiện tại nút đầu tiên của cụm được tách.
Hình 4.7. Đoạn giả mã thủ tục tách một cụm thành cụm B và C
Số nút trong một cụm có thể giảm do các nút ra/vào hệ thống mạng. Để đảm bảo các nút trong một cụm đủ lớn, nếu tổng số các nút trong hai cụm liền kề nhỏ hơn một giá trị ngưỡng mergeThreshold cho trước thì hai cụm này sẽ được nhập thành một cụm. Trong trường hợp này, khi số nút trong một cụm nhỏ hơn một ngưỡng cho trước, nút đầu tiên sẽ kiểm tra số lượng các nút trong cụm láng giềng mà nó cũng thuộc về cụm đó. Nếu điều kiện sáp nhập thỏa mãn, nút đầu tiên sẽ gửi một thông báo đến nút đầu tiên của cụm láng giềng. Nếu nút đầu tiên của cụm láng giềng đồng ý hợp nhất, nó sẽ gửi một thông báo trả lời, sau đó hai nút đầu tiên sẽ gửi thông báo cập nhật đến tất cả các nút trong cụm mới được sáp nhập. Thủ tục nhập cụm hàng xóm A vào cụm B thành cụm C được mô tả bằng đoạn giả mã trong Hình 4.8. Thủ tục này được thực hiện tại nút đầu tiên của cụm B. Nút đầu tiên của cụm B cũng là nút cuối cùng của cụm A.
Hình 4.8. Giả mã thủ tục nhập cụm hàng xóm A vào cụm B thành cụm C
Vì một cụm có thể được chia thành một số cụm, do đó các mảnh dữ liệu của một tệp tin có thể không được lưu trữ tại các nút trong cùng một cụm với nút quản lý khóa. Trong trường hợp này, khi nút lưu trữ mảnh dữ liệu của một tệp tin rời mạng, nút quản lý khóa của tệp tin có thể không biết nút đó rời mạng. Để giải quyết vấn đề trên, nút đầu tiên của một cụm sẽ gửi danh sách các nút rời mạng của cụm đó đến các nút đầu tiên của k cụm láng giềng. Cụm
A và cụm B là các cụm k láng giềng nếu có nhiều nhất k cụm giữa chúng. Việc cập nhật danh sách các nút rời mạng được thực hiện tương đối dễ dàng vì nút đầu tiên của một cụm cũng chính là nút cuối cùng của cụm liền trước. Danh sách các nút rời mạng trong k cụm láng giềng sau đó được gửi kèm với thông báo cập nhật tới tất cả các nút trong cụm. Trong trường hợp nút chứa mảnh dữ liệu của một tệp tin thuộc một cụm mà cụm đó không thuộc k láng giềng của cụm có chứa nút quản lý khóa của tệp tin thì mảnh dữ liệu sẽ được di chuyển đến một nút trong cùng một cụm với nút quản lý khóa của tệp tin.
4.3.6. Đảm bảo tính cục bộ và cân bằng tải
Việc duy trì các mảnh dữ liệu của một tệp tin trong một cụm tạo ra một lượng thông tin dư thừa trong mạng do phải chuyển các mảnh dữ liệu giữa các nút. Hơn nữa, độ trễ truyền tin giữa các nút trong cùng một cụm ảnh hưởng đến thời gian cập nhật thông tin và do đó ảnh hưởng đến tỷ lệ thành công của việc duy trì tệp tin. Để giảm lượng thông tin dư thừa trong mạng và độ trễ truyền tin, các nút trong cùng một cụm nên ở các vị trí gần nhau về vật lý. Ngoài ra, khi số lượng các tệp tin phân phối vào một cụm lớn hơn tổng khả năng chứa của các nút trong cụm thì trong cụm sẽ có một số nút bị quá tải.
Để giải quyết các vấn đề trên, thuật toán đề xuất cho phép một nút mới tham gia vào mạng có thể lựa chọn một vị trí từ tập các vị trí được chọn ngẫu nhiên trong không gian khóa. Khi một nút mới tham gia mạng, thay vì chỉ sinh ra ngẫu nhiên một định danh cho nút, nút đó có thể tạo ra một tập gồm m
định danh nút, mỗi định danh nút sẽ tương ứng với một vị trí dự tuyển trong không gian khóa DHT, với m là một tham số hệ thống. Tập m định danh nút có thể được sinh ngẫu nhiên bằng cách dùng một hàm băm với dữ liệu vào là tổ hợp thông tin khác nhau của một nút như địa chỉ IP và một số giá trị ngẫu nhiên. Tiếp theo, nút mới sẽ gửi một thông báo truy vấn đến nút successor của