TRƯỜ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
2. 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 :
Sao lặp server dữ liệu:
Caching tại trình duyệt Web:
1.2
Sao lắp điều khiển
1.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:
Client 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
2.
Tính nhất quán
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:
–
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:
•
•
Data-centric (lấy dữ liệu làm trung tâm)
–
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
Client-centric (lấy client làm trung tâm)
–
Mỗi client có thể yêu cầu một mô hình nhất quán cụ
thể
–
Các client khác nhau thấy các thao tác được sắp thứ
tự khác nhau.
•
Các mô hình nhất quán hướng dữ liệu - data-centric
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
Nhất quán chuỗi - Sequential consistency:
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.
Trong đó, Wi(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 Pi thực hiện, còn Ri(x)b kí
hiệu thao tác đọc giá trị phần tử dữ liệu x do tiến trình Pi
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.
•
Strict consistency:
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
Thứ 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
•
Các mô hình nhất quán hướng client - Client-centric
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
cá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: Xi[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 Li vào thời điểm t. Phiên bản Xi[t]
là kết quả của chuỗi các thao tác ghi tại Li xảy ra kể từ khi khởi
tạo. Ta kí hiệu chuỗi thao tác đó là WS(xi[t]). Nếu biết các thao
tác trong chuỗi WS(xi[t1]) đã được thực hiện tại bản sao địa
phương Lj cho tới một thời điểm t2 sau đó (nghĩa là là một phần
của WS(xj[t2])), ta viết WS(xi[t1] : xj[t2]). Nếu thứ tự về thời gian
là rõ ràng, có thể bỏ qua chỉ số thời gian.
Mô 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
•
Đọc đơn điệu - monotonic reads
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.
•
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.
•
Read your writes:
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.
•
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.
•
•
Các giao thức nhất quán
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
Remote-Write Protocols
Tấ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
•
Local-Write Protocols
•
Active replication : mở rộng hoạt động
Cá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.
3.
•
•
Phát tán cập nhật
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):
Cá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
Hệ thống replica
permanent 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.
–
–
–
–
–
–
–
–
–
–
–