Client A/ Replica1: Wx1 thực hiện thao tác gán giá trị x:= 1 Client B/ Replica2: Rx đọc giá trị của phần tử dữ liệu x, được kết quả trả về là 1 Read: luôn được thực thi tại chỗ Write: th
Trang 1TRƯỜNG ĐẠI HỌC HẢI
PHÒNG KHOA CÔNG NGHỆ THÔNG
TIN
Hệ phân tán
BÁO CÁO BÀI TẬP LỚN MÔN HỆ THỐNG PHÂN TÁN
Đề tài : SAO LẶP VÀ TÍNH NHẤT
QUÁN
Sinh viên thực hiện :
Vũ Đức Hải Nguyễn Hữu Long
Mục Lục
1 Sao lặp
Trang 22 Tính nhất quán
• Mô hình
• Giao thức
3 Phát tán cập nhật
4 Sắp đặt các replica
1 Sao lặp và các kiểu sao lặp
dữ liệu
Để cho các bản sao được thống nhất, ta thường phải đảm bảo rằng tất cả các thao tác có xung đột đều được thực hiện ở mọi nơi theo cũng một thứ tự
Sao lặp là tạo các bản sao dịch vụ trên nhiều máy
Bao gồm:
– Độ tin cậy
• Dư thừa – Hiệu năng
• Tăng năng lực xử lý
• Giảm liên lạc – Tính mở rộng được (giảm tập trung)
• Ngăn chặn quá tải tại một server đơn (mở rộng
về kích thước)
• Tránh độ trễ liên lạc (mở rộng về địa lý) Hai kiểu
– Sao lặp dữ liệu
– Sao lặp điều khiển
1.1 Sao lặp dữ liệu :
Trang 3Sao lặp server dữ liệu:
Caching tại trình duyệt Web:
Trang 41.2Sao lắp điều khiển
Trang 51.3 Sao lặp cả dữ liệu và điều khiển:
1.4 Distributed data store:
Các thao tác cho data store:
– Read Ri(x)b data store
– Write Wi(x)a
Các thao tác không có tính chất tức thời:
• Thời điểm phát ra: khi client gửi yêu cầu
• Thời điểm thực hiện: khi một bản sao thực hiện yêu cầu
• Thời điểm hoàn thành: khi client nhận được kết quả trả lời
– Sự hợp tác giữa các bản sao (replica)
– Ví dụ: hai client truy nhập hai replica khác nhau của một data store:
Trang 6Client A/ Replica1: W(x)1 thực hiện thao tác gán giá trị x:= 1
Client B/ Replica2: R(x) đọc giá trị của phần tử dữ liệu x, được kết quả trả về là 1
Read: luôn được thực thi tại chỗ
Write: thực thi tại chỗ, sau đó phát tán sang các bản sao
khác
Một kho dữ liệu là một tập hợp các thiết bị lưu trữ được bố trí một cách phân tán trên các máy khác nhau Mỗi tiến trình truy nhập dữ liệu trong kho tại một bản sao của kho đặt tại cùng một máy tính hoặc một máy gần đó Các thao tác ghi được phát tán tới các bản sao khác
Một mô hình nhất quán là một hợp đồng giữa một kho dữ liệu phân tán (distributed data store) và các tiến trình, mà trong đó kho dữ liệu quy định chính xác kết quả của các thao tác đọc và ghi khi có sự tương tranh xảy ra
• Khi một bản sao được cập nhật, tất cả các bản sao khác phải được cập nhật theo
• Tùy theo thứ tự và cách thức cập nhật → không nhất quán
• Hai loại không nhất quán:
– Staleness - Ì trệ :
• bản này được cập nhật chậm chễ so với bản kia – Thứ tự thực thi các thao thác
• Thứ tự khác nhau ở các bản sao khác nhau
Dữ liệu không phân tán:
Trang 7– Thứ tự thực hiện các thao tác của mỗi client được giữ nguyên
– Tính gắn kết của dữ liệu được tôn trọng
Các thao tác đọc và ghi xảy ra đồng thời có thể dẫn đến xung đột
Các thao tác xung đột
– Đọc-ghi
– Ghi-ghi
Tính nhất quán:
– Thứ tự thực thi của các thao tác xung đột có ảnh hưởng đến tính nhất quán
– Thứ tự bộ phận (partial order): thứ tự các thao tác của MỘT client
– Thứ tự đầy đủ (total order): thứ tự chung cho tất cả các thao tác xung đột
Ví dụ về các thao tác xung đột và thứ tự thực thi:
Client A: x = 1; x = 0;
Client B: print (x); print (x);
Các kết quả có thể thu được tại B: , 11, 10, 00
Các môn hinh nhất quán:
– Một mô hình áp dụng cho toàn bộ data-store
– Mọi client đều thấy các thao tác được sắp thứ tự cùng kiểu
– Mỗi client có thể yêu cầu một mô hình nhất quán cụ thể
Trang 8– Các client khác nhau thấy các thao tác được sắp thứ
tự khác nhau
consistency models:
Một kho dữ liệu là một tập hợp các thiết bị lưu trữ được bố trí một cách phân tán trên các máy khác nhau Mỗi tiến trình truy nhập dữ liệu trong kho tại một bản sao của kho đặt tại cùng một máy tính hoặc một máy gần đó Các thao tác ghi được phát tán tới các bản sao khác
Một mô hình nhất quán là một hợp đồng giữa một kho dữ liệu phân tán (distributed data store) và các tiến trình, mà trong đó kho dữ liệu quy định chính xác kết quả của các thao tác đọc và ghi khi có sự tương tranh xảy ra Strong ordering – sắp theo thứ tự mạnh
– Với mọi client, thứ tự thực hiện các thao tác ghi là như nhau
• Ví dụ: tất cả các client đều thấy W(x)a W(x)b W(x)c
– Các mô hình Strict, Sequential, Causal, FIFO (PRAM) Weak ordering – sắp thứ tự yếu
– Sắp thứ tự các nhóm thao tác ghi thay vì sắp theo
từng thao tác ghi – Các chuỗi ghi tại một replica được gộp thành nhóm – Chỉ phát tán kết quả của các nhóm thao tác ghi
• Ví dụ {W(x)a W(x)b W(x)c} == {W(x)b W(x)a W(x)c}
– Các mô hình Weak, Release, Entry
Kết quả của một chuỗi thực thi bất kì đều giống như thể các thao tác của tất cả các tiến trình được thực hiện theo một thứ tự tuần tự nào đó, và các thao tác của mỗi tiến trình đều theo thứ tự được quy định bởi chương trình tương ứng
Trang 9Trong đó, W i (x)a kí hiệu thao tác ghi giá trị a vào phần tử dữ liệu x do tiến trình P i thực hiện, còn R i (x)b kí hiệu thao tác đọc giá trị phần tử dữ liệu x do tiến trình P i
thực hiện với kết quả trả về là b Giả thiết mỗi phần tử dữ
liệu đều có giá trị khởi đầu là NIL Khi không có nhầm lẫn
về việc tiến trình nào truy nhập dữ liệu, ta bỏ qua chỉ số ở
các ký hiện W và R.
Định nghĩa của mô hình nhất quán chuỗi có nghĩa rằng khi các tiến trình chạy song song trên các máy khác nhau, một chuỗi đan xen bất kì có hiệu lực của các thao tác đọc và ghi đều chấp nhận được, nhưng tất cả các tiến trình đều nhìn thấy chính chuỗi đan xen đó
Theo định nghĩa này, thời gian không có vai trò quan trọng Xét 4 tiến trình thao tác với cùng một phần tử dữ
liệu x Trong hình (a), đầu tiên tiến trình P1 thực hiện thao
tác W(x)a Sau đó (theo thời gian tuyệt đối), tiến trình P2
thực hiện thao tác ghi b vào x Tuy nhiên, cả hai tiến trình
P3 và P4 đều đọc được giá trị b trước, sau đó mới đọc giá trị
a Nói cách khác, thao tác ghi của P2 trông như là đã được
thực hiện trước thao tác ghi của P1
Ngược lại, hình (b) vi phạm mô hình nhất quán chuỗi
vì không phải tất cả các tiến trình đều nhìn thấy cùng một chuỗi đan xen của các thao tác ghi Cụ thể, đối với tiến
trình P3 thì phần tử dữ liệu được gán giá trị b trước rồi sau
đó mới nhận giá trị a, còn tiến trình P4 thì sẽ kết luận là giá
trị cuối cùng là b
Thao tác read đối với một phần tử dữ liệu x trả về giá trị tương ứng với kết quả của lần write gần đây nhất đối với x
Trang 10Thứ tự theo thời gian tuyệt đối của tất cả các lần truy nhập đến dữ liệu dùng chung
consistency models:
Đảm bảo về thứ tự thao tác cho một client
– Client di chuyển và truy nhập data-store tại các
replica khác nhau (có sửa dữ liệu) – Các client không dùng chung dữ liệu
– Các client khác nhau có thể thấy các kiểu sắp thứ tự khác nhau cho các thao tác
Nói cách khác:
– Kết quả của một thao tác tùy theo client thực hiện nó – Kết quả còn phụ thuộc vào lịch sử của các thao tác
mà client đó thực hiện Các mô hình nhất quán mô tả trong mục trước nhằm cung cấp một view nhất quán trên toàn hệ thống đối với một kho dữ liệu Giả thuyết quan trọng là các tiến trình song song có thể cùng cập nhật kho dữ liệu, và cần đảm bảo tính nhất quán
trong tình trạng tương tranh đó Ví dụ, trong trường hợp tính nhất quán của object-based entry, kho dữ liệu đảm bảo rằng khi một đối tượng được gọi, tiến trình gọi được cung cấp một bản sao của đối tượng đó với tất cả các thay đổi đã từng được thực hiện trước đó (bởi tiến trình đó cũng như các tiến trình khác)
Trong mục này, ta xem xét một lớp đặc biệt của các kho dữ liệu phân tán - các kho dữ liệu không có các cập nhật đồng thời hoặc nếu có thì chúng có thể được phân giải dễ dàng, hầu hết
Trang 11các thao tác là đọc dữ liệu Các kho dữ liệu này cung cấp một
mô hình nhất quán rất yếu - eventual consistency
Mục tiêu của các mô hình nhất quán hướng client là làm thế nào để tránh phải nhất quán trên toàn hệ thống bằng cách chú trọng vào nhu cầu của các client cụ thể thay vì vào việc server cần gìn giữ cái gì
Mô hình nhất quán hướng client đảm bảo với mỗi client tính nhất quán của các truy nhập dữ liệu cho chính client đó thực hiện Nó không đảm bảo tính nhất quán của các truy nhập
tương tranh do các client khác nhau thực hiện
Các mô hình hướng client là dành cho các user di động Ví dụ: xét một cơ sở dữ liệu phân tán mà bạn có thể truy nhập qua máy tính xách tay Giả sử máy tính xách tay của bạn đóng vai trò của một hệ thống front-end đối với CSDL Tại địa điểm A, bạn truy nhập CSDL để thực hiện các thao tác đọc và cập nhật Tại địa điểm B, bạn tiếp tục công việc, nhưng nếu bạn không truy nhập chính server mà bạn đã dùng khi ở địa điểm A thì bạn
có thể phát hiện sự không nhất quán như:
• các cập nhật mà bạn đã thực hiện tại A chưa được chuyển tiếp tới B
• bạn có thể đọc các mục mới hơn những gì đã đọc tại A
• các cập nhật của bạn tại B có thể sẽ xung đột với những cập nhật đã làm tại A
Trong trường hợp này, điều duy nhất mà bạn thực sự cần
là những mục mà bạn đã đọc hay cập nhật tại A cũng xuất hiện tại B ở tình trạng giống hệt như bạn đã thấy khi rời A Khi đó, CSDL sẽ có vẻ nhất quán đối với bạn
Các mô hình nhất quán hướng client được mô tả bằng hệ
thống kí hiệu sau: X i [t] kí hiệu phiên bản của phần tử dữ liệu x tại bản sao dữ liệu địa phương L i vào thời điểm t Phiên bản X i [t]
là kết quả của chuỗi các thao tác ghi tại L i xảy ra kể từ khi khởi
tạo Ta kí hiệu chuỗi thao tác đó là WS(x i [t]) Nếu biết các thao tác trong chuỗi WS(x i [t1]) đã được thực hiện tại bản sao địa
phương L j cho tới một thời điểm t2 sau đó (nghĩa là là một phần
của WS(x j [t2])), ta viết WS(x i [t1] : x j [t2]) Nếu thứ tự về thời gian
là rõ ràng, có thể bỏ qua chỉ số thời gian
Trang 12Mô hình data-store cho client-centric consistency:
Các phần tử dữ liệu có chủ
Không có xung đột write-write
Một thao tác ghi lên phần tử dữ liệu x được hoàn thành trước tất cả các thao tác ghi tiếp theo đối với x bởi cùng một client.
Một kho dữ liệu được xem là cung cấp mô hình đọc-đơn điệu nếu thỏa mãn điều kiện sau:
Nếu một tiến trình đọc giá trị của một phần tử dữ liệu x, thao tác đọc bất kì sau đó do tiến trình đó thực hiện đối với x sẽ luôn
luôn trả về giá trị trùng với giá trị đó hoặc một giá trị mới hơn
Nói cách khác, mô hình đọc đơn điệu đảm bảo rằng
nếu một tiến trình đã nhìn thấy một giá trị của x tại một thời điểm t thì sau đó nó sẽ không bao giờ nhìn thấy một phiên bản cũ hơn của x.
Tất cả các thao tác ghi của cùng một client được sắp thành chuỗi
Trang 13 Ghi đơn điệu - monotonic writes
Một thao tác ghi do một thao tác thực hiện đối với x được hoàn thành trước thao tác ghi bất kì tiếp theo đối với x của chính tiến trình đó.
Nói cách khác, một thao tác ghi trên một bản sao của phần tử dữ liệu x chỉ được
thực hiện khi bản sao đó đã được cập nhật với tất cả các thao tác ghi mà client đó đã thực hiện trước đó (có thể các thao tác đó đã xảy ra tại các bản sao khác) Nếu cần, thao tác ghi mới phải đợi đến khi các thao tác ghi cũ hơn kết thúc.
Hiệu ứng của một thao tác ghi của một tiến trình đối với phần tử dữ liệu x sẽ luôn được nhìn thấy bởi thao tác đọc tiếp theo của chính tiến trình đó đối với x
Mô hình Read Your Writes có quan hệ gần gũi với mô hình đọc đơn điệu Một kho dữ liệu được xem là cung cấp tính nhất quán Read your write nếu các điều kiện sau được thỏa mãn:
Hiệu ứng của một thao tác ghi của một tiến trình đối
với phần tử dữ liệu x sẽ luôn được nhìn thấy bởi thao tác đọc tiếp theo của chính tiến trình đó đối với x.
Minh họa một kho dữ liệu cung cấp tính nhất quán
read-your-writes Trong đó, tiến trình P thực hiện thao tác ghi W(x1) rồi sau đó là thao tác đọc tại một bản sao địa phương khác read-your-writes đảm bảo rằng hiệu ứng của thao tác ghi được nhìn thấy bởi thao tác đọc sau đó Nó
thể hiện ở WS(x1 : x2), nghĩa là W(x1) là một phần của
WS(x2) Còn hình bên cạnh, W(x1) không có trong WS(x2),
nghĩa là hiệu ứng của thao tác ghi trước của tiến trình P chưa được chuyển tới L2
Trang 14 Writes follow Reads
Cuối cùng là mô hình
Một thao tác ghi của một tiến trình P đối với phần tử
dữ liệu x tiếp theo một thao tác đọc x của chính tiến trình
đó được đảm bảo là sẽ được thực hiện trên chính giá trị đã
đọc được hoặc một giá mới hơn của x.
Mô hình này đảm bảo người dùng của một dịch vụ newgroup chỉ nhìn thấy bài trả lời cho một bài viết sau khi nhìn thấy chính bài viết đầu
Một thao tác ghi đối với x được thực hiện trên một bản sao của x với giá trị đã được cập nhật theo lần đọc gần nhất của cùng client
Giao thức nhất quán: cài đặt một mô hình nhất quán
Primary-based protocols – các giao thức ghi tại bản chính của dữ liệu
– Remote-write protocols –ghi từ xa
– Local-write protocols – ghi tại chỗ
Replicated-Write protocols – các giao thức ghi tại bản sao – Active replication – chủ động sao chép
– Quorum-Based protocols – bỏ phiếu
Trang 15Tất cả các lệnh ghi được thực hiện tại duy nhất 1 server Các cập nhật bị block cho đến khi đã được thực hiện tại tất
cả các bản sao
Trang 16Các cập nhật (ghi) được gửi cho toàn bộ các replica
Cần multicast thứ tự đầy đủ
Hoặc sequencer/coordinator gắn số thứ tự trong chuỗi
Dữ liệu
– Tốn băng thông,
– có lợi khi dữ liệu được cập nhật nhỏ và ít khi cập nhật
b Thao tác cập nhật
– Các replica tự thực hiện thao tác
– tốn ít băng thông
c Thông báo rằng bản dữ liệu của các replica khác đã cũ
– Có lợi khi dữ liệu lớn và được thường xuyên cập nhật
Pull & push
Pull (client-based):
Các cập nhật được lan truyền chỉ khi được yêu cầu Thích hợp: Ghi nhiều đọc ít
Có thể có polling delay (replica phải kiểm tra xem đâu là phiên bản mới nhất trước khi thực hiện thao tác đọc)
Push (server-based):
Trang 17Các cập nhật được lan truyền ngay
Thích hợp: Ghi ít đọc nhiều; yêu cầu cao về mức độ tươi mới của dữ liệu đọc
Nơi ghi phải biết về tất cả các replica → tính mở rộng được
4 Sắp đặt các replica
Replica cố định:
– Tập các replica khởi đầu
– Do chủ của data-store tạo và bảo trì
– Cho phép ghi
Replica server (server-initiated replica)
– Tăng hiệu năng
– Không do chủ data-store bảo trì
– Đặt gần các nhóm client
– Thiết kế bằng tay hoặc tự động dựa theo các thông
số về lượng dữ liệu, người sử dụng, tỷ lệ đọc/ghi
Replica client (client-initiated replica)
– Cache ở client
– Có tính chất tạm thời
– Chủ data-store không biết về các replica này
Đặt gần client
Trang 18permanent replicas : bản sao thường xuyên
Server -initiated replicas : server bắt đầu bản sao
Client - initiated replicas :Client bắt đầu sao
Server -initiated replication : server bắt đầu mô phỏng client -initiated replication : client bắt đầu mô phỏng
Replica cố định:
– Tập các replica khởi đầu
– Do chủ của data-store tạo và bảo trì
– Cho phép ghi
Replica server (server-initiated replica)
– Tăng hiệu năng
– Không do chủ data-store bảo trì
– Đặt gần các nhóm client
– Thiết kế bằng tay hoặc tự động dựa theo các thông
số về lượng dữ liệu, người sử dụng, tỷ lệ đọc/ghi
Replica client (client-initiated replica)
– Cache ở client
– Có tính chất tạm thời
– Chủ data-store không biết về các replica này
– Đặt gần client