Spanner là hệ cơ sở dữ liệu phân tán toàn cầu của Google. Nó có khả năng mở rộng cho phép lưu trữ hàng tỷ tỷ dòng dữ liệu trong hàng triệu node phân tán qua hàng trăm datacenter. Trọng tâm chính của Spanner là quản lý sao chép dữ liệu qua các datacenter. Spanner hỗ trợ ACID cho các giao tác và cung cấp ngôn ngữ truy vấn dựa trên SQL. Spanner sử dụng một TrueTime API mới để đồng bộ và xử lý đồng thời.
Trang 1XỬ LÝ ĐỒNG THỜI TRÊN HỆ
CSDL SPANNER
1
Trang 2NỘI DUNG BÁO CÁO
1. Giới thiệu Spanner
2. Kiến trúc Spanner
3. Spanserver Software Stack
4. TrueTime
5. Timestamps and TrueTime
6. Điều khiển đồng thời (Concurrency Control)
7. Đánh giá
2
Trang 3Giới thiệu Spanner
Spanner là hệ cơ sở dữ liệu phân tán toàn cầu của Google.
Spanner có khả năng mở rộng cho phép lưu trữ hàng tỷ
tỷ dòng dữ liệu trong hàng triệu node phân tán qua hàng trăm datacenter.
Trọng tâm chính của Spanner là quản lý sao chép dữ liệu qua các datacenter.
Spanner hỗ trợ ACID cho các giao tác và cung cấp ngôn ngữ truy vấn dựa trên SQL.
Spanner sử dụng một TrueTime API mới để đồng bộ và
xử lý đồng thời
3
Trang 4Kiến trúc Spanner
Một sự triển khai Spanner gọi là
universe.
Một universe có nhiều zone
(physic location).
Một datacenter có một hoặc nhiều zone.
Một zone có một zonemaster
và hàng trăm đến hành nghìn
spanserver Spanner Server Configuration
Universemaster cung cấp thông tin trạng thái của tất cả các zone
hoặc thông debugging.
Placement driver tự động chuyển dữ liệu giữa các zones hoặc
định kỳ tương tác với server để tìm kiếm dữ liệu cần chuyển đổi.
4
Trang 5Spanserver Software Stack
Quản lý 100 – 1000 tablet.
Trạng thái của tablet lưu trong Colossus Distributed File System
dưới dạng file B-tree và write-ahead log.
Mỗi tablet được nhân bản qua nhiều datacenter sử dụng Paxos.
Mỗi Paxos có một leader tồn tại tương đối dài.
Tập hợp các bản sao (replicas) gọi là một nhóm Paxos (Paxos group)
5
Trang 6Spanserver Software Stack
Paxos Group
6
Trang 7True Time
Một API cung cấp thông tin về thời gian
Có các phương thức sau:
TT.now(): trả về thời gian hiện tại dưới dạng
TTinterval: [earliest, latest], đảm bảo thời gian tuyệt đối khi TT.now() được gọi là ở trong TTinterval.
TT.after(t): trả về true nếu chắc chắn đã qua thời gian chỉ định t, ngược lại: false
TT.before(t): trả về true nếu chắc chắn trước thời gian chỉ định t, ngược lại: false
7
Trang 8 TT.now()
time
earliest latest
TT.now() 2*ε
ε là biên độ lỗi tức thời (instantaneous error bound).
TTinterval tt = TT.now()
tt.lastest – tt.earliest = 2* ε
Thực thế, ε nằm trong khoảng từ 1 đến 7ms.
8
Trang 9Timestamps and TrueTime
Gán timestamp đến một transaction
Sử dụng 2PL đối với một write transaction
T
Pick s = TT.now().latest
Acquired locks Release locks
Wait until TT.now().earliest > s
s
average ε
Commit wait
average ε
Commit wait là khoảng thời gian mà coordinator leader đảm bảo các clients không nhìn thấy bất kỳ dữ liệu nào đã commit bởi T cho đến khi TT.after(s) là true
9
Trang 10Điều khiển đồng thời
Có 3 loại hoạt động mà Spanner hỗ trợ:
Read/write transaction
Read-only transaction
Snapshot reads
Hoạt động write đơn lẻ được cài đặt như một read/write transaction
Một hoạt động read (không phải snapshot read) được cài đặt như một read-only transaction
10
Trang 11Điều khiển đồng thời
Read/Write Transaction
Sử dụng two phase commit (2PC)
TC
Acquired locks Release locks
TP1
Acquired locks Release locks
TP2
Acquired locks Release locks
Notify participants of s
Commit wait done
Compute s for each
Start logging Done logging
Prepared
Compute overall s
Committed
Send s
11
Trang 12Điều khiển đồng thời
Read-Only Transaction
Spanner yêu cầu scope-expression cho mỗi read-only transaction.
Scope-expression là một biểu thức tóm tắt các khóa (key) sẽ được đọc bởi toàn bộ transaction.
Nếu giá trị của scope được thực thi bên trong một nhóm Paxos:
Client yêu cầu group leader cho một read-only transaction Paxos leader gán timestamp là LastTS() và thực thi hoạt động read.
LastTS() là giá trị timestamp của hoạt động write đã commit sau cùng trong một nhóm Paxos.
Nếu giá trị scope thực thi qua nhiều nhóm Paxos:
Client sử dụng TT.now().lastest như là một read timestamp.
Client chờ cho đến khi TT.after() là true.
Xác nhận giá trị timestamp đã qua.
Gửi read task trong transaction đến các bản sao (replicas)
12
Trang 13Điều khiển đồng thời
Schema Change Transaction
Sử dụng một transaction đặc biệt.
Đầu tiên, tạo một thời điểm ở tương lai và tạo và đăng ký một timestamp.
Điều này giúp cho schema thay đổi mà không ảnh hưởng đến các task đang diễn ra.
Read/write liên quan đến thay đổi schema được đồng bộ với timestamp đã đăng ký của schema.
Nếu timestamp của task sớm hơn timestamp của thay đổi schema, task được thực hiện sớm Ngược lại, nó bị chặn.
13
Trang 14Đánh giá
Spanner là hệ CSDL phân tán quy mô toàn cầu đầu tiên của Google và hỗ trợ giao tác phân tán nhất quán bên ngoài (externally-consistently)
Spanner kế thừa những ưu điểm từ BigTable và MegaStore và khắc phục nhược điểm của chúng
Một tính năng then chốt của Spanner là TrueTime
14
Trang 15Cảm ơn!
15