Zookeeper
2024-02-18
distributed synchronization
Khái niệm
Key feature:
- replicated across multiple servers
- scale horizontally: add thêm node là chạy
- Data consistency
- cluster state: mọi thành viên cần biết vai trò và có cách xử lí khi leader chết
Ứng dụng
Distributed systems coordination:
- Configuration management
- Leader election
- Locks in distributed systems
- Manage cluster membership
ZNode
Như kiểu hệ thống file system thôi: hỗ trợ các lệnh: create, delete, getData, setData, getChildren, exists, get set ACL.
Key feature:
- có thể đồng thời: lưu dữ liệu + có child znode
- lưu current version, last transaction id
- ACL, authen (user, pass)
- client có thể đặt watch vào znode: nhận thông báo về change dữ liệu trên nó và child của znode đó (+ thêm, xóa child znode)
Các loại znode
loại | đặc điểm | ví dụ |
---|---|---|
Persistent Znode (mặc định) | k xóa dữ liệu đi | persistent data, save config, schema db |
Ephemeral ZNodes | xóa dữ liệu (xóa znode đó) khi client hết phiên (k nhận được ping request từ client) | 1 znode có các child là list các server, các server sẽ connect tới child đó. nếu server chết thì child đó chết. nếu đặt watch vào node cha sẽ nhận được thông báo về child chết |
Ephemeral Sequential Znode | như Ephemeral ZNodes, khác cái là các child name sẽ được thêm cái đuôi tăng dần | ứng dụng trong việc bầu leader |
Persistent Sequential Znode | đuôi tăng + persit | null |
Usecase:
leader election: 3 hướng tiếp cận
cách làm | đặc điểm | hạn chế |
---|---|---|
tạo persistent /election. các server tạo ephemeral /leader. bên trong chứa thông tin leader (ip) | các server khác không thể tranh làm leader vì đã có 1 /leader rồi. k thể tạo znode /leader nữa | khi leader chết, /election sẽ kích hoạt watcher tới tất cả các server, lúc đó sẽ có rất nhiều server tranh nhau ghi vào (k tốt). cách giải quyết ghi (hạn chế số lượng hoặc dùng sequential - cách 2) |
thay vì dùng ephemeral /leader, thì dùng ephemeral sequential znode /leader- |
giải quyết vấn đề ghi | chưa giải quyết được vấn đề là watcher sẽ thông báo cho các server(để các server cập nhật leader là ai) |
chỉ notify 1 server khi leader down | null | null |
distributed locks: Tạo /lock. thằng nào ghi xong thì xóa session đi cho thằng khác có thể giữ
group Membership/Managing Cluster state: live_node, all_node
active - stand by