Chương 4: Xây dựng cây cân bằng.
29 Hình 4.8: Sơ đồ cây.
Hình 4.8: Sơ đồ cây.
Trường hợp 1: nút B và nút được gửi tin nhắn yêu cầu chuyển đổi là hai cha con. Tức là nút được gửi tin nhắn có thể là nút C hoặc nút D. Để không mất tính tổng quát, già dụ rằng nút D là nút có băng thông cao hơn nút B và là nút có băng thông cao nhất trong tập các nút ứng viên của B. Tiếp đó, sau khi nhận được SWITCH_REQUEST_MESSAGE từ nút B, nút B sẽ được chuyển xuống vị trí của nút D và nút D sẽ chuyển lên vị trí của nút B, đồng thời nút D sẽ kéo cả con của nó lên theo cùng, cho đến hết băng thông. Giả dụ, băng thông của nút D là 4(băng thông) vậy sau khi chuyển lên vị trí nút B, nó còn dư hai băng thông để nhận thêm nút con, vậy thì nó sẽ kéo hai nút con có băng thông cao nhất lên cùng (giả dụ ở đây là E và F). Còn nút G sẽ được chuyển làm con của B. Sau khi hoàn thành việc đổi vị trí, cấu trúc cây của chúng ta sẽ có dang như hình 4.9.
30
Hình 4.9: Cấu trúc cây sau khi Switch, trường hợp 1
Trường hợp 2: nếu nút nhận được SWITCH_REQUEST_MESSAGE là nút lá. Ở đây, các nút đó sẽ có thể là các nút H,I,J,…... Giả dụ, nút H là nút có băng thông lớn nhất, vì vậy nó sẽ nhận được SWITCH_REQUEST_MESSAGE từ nút B. Trường hợp này khá đơn giản, sau khi nhận được yêu cầu chuyển đổi từ nút B, nút H sẽ được chuyển lên vị trí của nút B và đồng thời nút B sẽ được chuyển đến vị trí là con của nút H. Nút H sẽ nhận toàn bộ con của nút B làm con cộng thêm cả với nút B. Nút H hoàn toàn đủ băng thông để thực hiện việc này bởi vì băng thông của nút H lớn hơn băng thông của nút B cho nên băng thông nút E ít nhất lớn hơn băng thông nút B một đơn vị vì thế có thể hoàn toàn nhận thêm cả B làm con sau khi đã nhận toàn bộ con của nút B. Cấu trúc cây sau khi tái cấu trúc được biểu diễn như hình 4.10.
Trường hợp 3: nút nhận được SWITCH_REQUEST_MESSAGE là nút không ở hai trường hợp trên, nó không có quan hệ cha con với nút B và cũng không phải là nút lá. Trong cấu trúc hình 4.8, nó có thể là những nút E, F,G….. Giả sử, nút E là nút có băng thông lớn nhất và được nú B gửi SWITCH_REQUEST_MESSAGE đến cho.
31
Hình 4.10: Cấu trúc cây sau khi Switch, trường hợp 2
Đầu tiên, nút E sẽ được chuyển lên vị trí của nút B đông thời nhận toàn bộ con của nút B làm con của chính nó. Hơn thế nữa, nút E sẽ nhận luôn nút B làm con, do băng thông của nút E chắc chắn sẽ đủ để làm việc đó. Nếu vẫn còn thừa băng thông, nút E sẽ kéo cả con của nó, tức là nút H hoặc I hoặc J, lên phía trên cũng với nó. Nếu không còn đủ băng thông để thực hiên việc này, thì các con cũ còn lại của E sẽ được chuyển thành còn của B. Giả dụ băng thông của E hiện tại là 4 băng thông, E sẽ nhận B,C,D làm con và còn thừa một băng thông. Một băng thông này nó sẽ dành cho nút con có băng thông cao nhất trong số con của nó, ví dụ là nút H. Và nút I,J sẽ được chuyển làm còm của B. Cấu trúc cây của chúng ta sẽ được tái cấu trúc lại như hình 4.11.
32
Hình 4.11: Cấu trúc cây sau khi switch, trường hợp 3
Trên đây là ba trường hợp tổng quát có thể xảy ra trong cơ chế switch của chúng tôi. Sau khi đổi vị trí các nút như trong ba trường hợp đó, các nút sẽ phải lần lượt gửi các tin nhắn cập nhật thông tin đến các nút bị ảnh hưởng. Các thông tin về nút cha, con, các nút kéo dữ liệu về phải được cập nhật sao cho đúng đắn nhất. Nút B sẽ gửi PULL_UPDATE_MESSAGE tới những nút kéo dữ liệu từ nút B và nút X(nút B gửi
SWITCH_REQUEST_MESSAGE cho). Nút cũng gửi
PULL_REQUEST_UPDATE_MESSAGE tới những nút gửi dữ liệu tới nút B và nút X.
Sau đó, nút B sẽ gửi CHILD_UPDATE_MESSAGE tới các nút con của nó và các nút con của nút X. Nút B cũng gửi PARENT_UPDATE_MESSAGE tới các nút cha của nút B và nút X. Suốt quá trình chuyển đổi giữa nút B và nút X, trang thái của hai nút trên sẽ để ở trạng thái bận.
33