View profile

#165 - Ứng dụng của ZooKeeper trong hệ thống phân tán

Revue
 
 

Grokking Newsletter

April 5 · Issue #166 · View online

Tuyển tập những bài viết hay cùng sự kiện bổ ích dành cho kĩ sư phần mềm tại Việt Nam.


Những bài viết hay
GraalVM — Make Java Great Again GraalVM — Make Java Great Again
Airflow 2.0 Providers Airflow 2.0 Providers
Improving large monorepo performance on GitHub Improving large monorepo performance on GitHub
Góc Distributed System
Ứng dụng của ZooKeeper trong việc xây dựng hệ thống phân tán
Nhắc tới ZooKeeper, lập trình viên sẽ nhớ ngay tới các thư viện hoặc framework nổi tiếng sử dụng như Kafka; Hadoop. Zookeeper thường được nghĩ tới như là một hierarchical key-value database và có thể dùng cho mục đích leader election / configuration management / … Vậy thật sự Zookeeper cung cấp những chức năng gì?
ZooKeeper là một service cung cấp một tập interface API cơ bản, từ đó lập trình viên có thể dựa vào đó viết tiếp những ứng dụng nâng cao hơn như configuration management; leader election; distributed locking; distributed queue; …. Cụ thể một vài API cơ bản:
  • Tạo/xóa node: lập trình viên có thể tạo ra một node khởi nguyên hoặc con của một node khác (ví dụ: A/B/C), đây cũng là lí do tại sao ta gọi ZooKeeper là “hierarchical” key-value database. Node lá có thể kèm theo bất cứ giá trị nào (value trong key-value). Mỗi node có thể phụ trợ thêm một vài thuộc tính như ephemeral (tự xóa khi session kết thúc) / sequential (tự cấp ID tăng dần và duy nhất cho các node con) / …
  • Listen trên một node: khi có bất cứ sự thay đổi nào trên node đó, client sẽ nhận được event thông báo. Tuy rằng đây là một sự kiện bất đồng bộ (ta không thể biết khi nào thay đổi được tạo ra), nhưng có một đặc tính rất đặc biệt là serializability write nhưng là FIFO read: dù thế nào thì các read event nhận được phải tuân theo quy luật nguyên nhân-hệ quả.
Ví dụ với kịch bản C1 và C2 làm tuần tự như sau:
C1 gán A = 3
C2 listen vào key A
Sau đó C1 và C2 cùng thực hiện song song các thao tác:
C1 xóa key A
C1 gán B = 4
C2 đọc key B
Như vậy, ở C2 sẽ có 2 events: đọc key B và nhận thay đổi từ key A. Thứ tự này có thể là tuần tự so với C1:
C1 xóa key A
C1 gán B = 4
C2 nhận được event A bị xóa
C2 đọc key B = 4
Hoặc đan xen với C1:
C1 xóa key A
C2 nhận được event A bị xóa
C1 gán B = 4
C2 đọc key B = 4
Không bao giờ thứ tự nhận event bị đảo ngược (không tuân theo quy luật nguyên nhân-hệ quả) ví dụ như
C1 xóa key A
C1 gán B = 4
C2 đọc được B = 4
C2 nhận được event key A bị xóa (vô lí, vì sự kiện key A bị xóa phải xuất hiện trước event gán B = 4)
Với 2 bộ API này, lập trình viên có thể tạo ra ứng dụng Group Membership Protocol bằng cách như sau:
  • Tạo ra một node G để biểu diễn group
  • Khi mỗi node join vào group, sẽ tạo ra một ephemeral node với id định danh duy nhất được gửi từ client hoặc tự generate bằng cách áp dụng thuộc tính sequential.
  • Lắng nghe các events trên node G
  • Khi có một node leave -> event trigger -> nhận ra một thành viên thoát group
ZooKeeper cung cấp nhiều API hơn vậy. Ta có thể tham khảo tiếp cách xây dựng các ứng dụng nâng cao hơn bằng ZooKeeper thông qua bài viết sau
Code & Tools
This Week Sponsors
Là một trong các sàn giao dịch P2P năng động tại nhiều quốc gia, Remitano cung cấp thị trường uy tín, an toàn tối đa và đơn giản cho hoạt động mua bán tiền mã hóa của hàng triệu khách hàng, với sản phẩm đầu tư đa dạng, giao dịch tức thời và đội ngũ hỗ trợ 24/7 bao gồm các chuyên gia ngân hàng có nhiều kinh nghiệm trong các sản phẩm tài chính, tiền điện tử, và hệ thống thanh toán, đảm bảo mang đến trải nghiệm tốt với mức phí thấp nhất cho người dùng.
Quotes
“Some of the best programming is done on paper, really. Putting it into the computer is just a minor detail.”
― Max Kanat-Alexander
Did you enjoy this issue?
If you don't want these updates anymore, please unsubscribe here.
If you were forwarded this newsletter and you like it, you can subscribe here.
Powered by Revue
Charmington La Pointe, 181 Cao Thang, Dist 10, Ho Chi Minh city, Viet Nam