Tóm lại, ZooKeeper giúp bạn xây dựng các ứng dụng phân tán.
Làm thế nào nó hoạt động
Bạn có thể mô tả ZooKeeper như một dịch vụ đồng bộ hóa được nhân rộng với tính nhất quán cuối cùng. Thật mạnh mẽ, vì dữ liệu bền bỉ được phân phối giữa nhiều nút (tập hợp các nút này được gọi là "tập hợp") và một máy khách kết nối với bất kỳ trong số chúng (nghĩa là một "máy chủ" cụ thể), di chuyển nếu một nút bị lỗi; miễn là phần lớn các nút đang hoạt động, tập hợp các nút ZooKeeper vẫn còn sống. Cụ thể, một nút chủ được chọn một cách linh hoạt bởi sự đồng thuận trong toàn bộ; nếu nút chủ thất bại, vai trò của chủ sẽ di chuyển sang nút khác.
Cách viết được xử lý
Bậc thầy là cơ quan để viết: theo cách này, việc viết có thể được đảm bảo để được duy trì theo thứ tự, tức là viết là tuyến tính . Mỗi khi khách hàng ghi vào nhóm, phần lớn các nút vẫn giữ thông tin: các nút này bao gồm máy chủ cho máy khách và rõ ràng là chủ. Điều này có nghĩa là mỗi lần ghi làm cho máy chủ cập nhật với chủ. Tuy nhiên, điều đó cũng có nghĩa là bạn không thể viết đồng thời.
Sự đảm bảo của ghi tuyến tính là lý do cho việc ZooKeeper không hoạt động tốt đối với khối lượng công việc chi phối ghi. Cụ thể, nó không nên được sử dụng để trao đổi dữ liệu lớn, chẳng hạn như phương tiện truyền thông. Miễn là giao tiếp của bạn liên quan đến dữ liệu được chia sẻ, ZooKeeper sẽ giúp bạn. Khi dữ liệu có thể được viết đồng thời, ZooKeeper thực sự gây cản trở, bởi vì nó áp đặt một trật tự hoạt động nghiêm ngặt ngay cả khi không thực sự cần thiết theo quan điểm của người viết. Sử dụng lý tưởng của nó là để phối hợp, nơi các thông điệp được trao đổi giữa các khách hàng.
Cách đọc được xử lý
Đây là nơi ZooKeeper vượt trội: các lần đọc đồng thời vì chúng được phục vụ bởi máy chủ cụ thể mà máy khách kết nối tới. Tuy nhiên, đây cũng là lý do cho tính nhất quán cuối cùng: "chế độ xem" của máy khách có thể bị lỗi thời, do máy chủ cập nhật máy chủ tương ứng với độ trễ giới hạn nhưng không xác định.
Chi tiết
Cơ sở dữ liệu được sao chép của ZooKeeper bao gồm một cây znodes , là các thực thể đại diện cho các nút hệ thống tệp (nghĩ về chúng như các thư mục). Mỗi znode có thể được làm giàu bằng một mảng byte, nơi lưu trữ dữ liệu. Ngoài ra, mỗi znode có thể có các znode khác bên dưới, thực tế tạo thành một hệ thống thư mục nội bộ.
Mã số tuần tự
Thật thú vị, tên của znode có thể là tuần tự , có nghĩa là tên mà khách hàng cung cấp khi tạo znode chỉ là một tiền tố: tên đầy đủ cũng được đưa ra bởi một số thứ tự được chọn bởi đoàn. Ví dụ, điều này rất hữu ích cho mục đích đồng bộ hóa: nếu nhiều khách hàng muốn nhận khóa trên một tài nguyên, thì mỗi người có thể tạo đồng thời một mã znode liên tiếp trên một vị trí: bất kỳ ai có số thấp nhất đều được quyền khóa.
Mã số phù du
Ngoài ra, một znode có thể là phù du : điều này có nghĩa là nó bị hủy ngay khi máy khách tạo ra nó ngắt kết nối. Điều này chủ yếu hữu ích để biết khi nào khách hàng thất bại, điều này có thể có liên quan khi bản thân khách hàng có trách nhiệm nên được thực hiện bởi một khách hàng mới. Lấy ví dụ về khóa, ngay khi khách hàng có khóa ngắt kết nối, các khách hàng khác có thể kiểm tra xem họ có được quyền khóa không.
Xem
Ví dụ liên quan đến ngắt kết nối máy khách có thể có vấn đề nếu chúng ta cần thăm dò định kỳ trạng thái của znodes. May mắn thay, ZooKeeper cung cấp một hệ thống sự kiện trong đó đồng hồ có thể được đặt trên znode. Những chiếc đồng hồ này có thể được thiết lập để kích hoạt một sự kiện nếu znode được thay đổi hoặc loại bỏ cụ thể hoặc những đứa trẻ mới được tạo ra dưới nó. Điều này rõ ràng hữu ích khi kết hợp với các tùy chọn tuần tự và phù du cho znodes.
Sử dụng nó ở đâu và như thế nào
Một ví dụ điển hình về việc sử dụng Zookeeper là tính toán bộ nhớ phân tán, trong đó một số dữ liệu được chia sẻ giữa các nút máy khách và phải được truy cập / cập nhật một cách rất cẩn thận để tính đến sự đồng bộ hóa.
ZooKeeper cung cấp thư viện để xây dựng các nguyên hàm đồng bộ hóa của bạn, trong khi khả năng chạy một máy chủ phân tán sẽ tránh được vấn đề một điểm lỗi mà bạn gặp phải khi sử dụng kho lưu trữ thông báo (giống như nhà môi giới).
ZooKeeper là tính năng ánh sáng, có nghĩa là các cơ chế như bầu cử lãnh đạo, khóa, rào cản, v.v. chưa có mặt, nhưng có thể được viết trên các nguyên thủy ZooKeeper. Nếu API C / Java quá khó sử dụng cho mục đích của bạn, bạn nên dựa vào các thư viện được xây dựng trên ZooKeeper như lồng và đặc biệt là người quản lý .
Đọc thêm ở đâu
Ngoài tài liệu chính thức, khá hay, tôi khuyên bạn nên đọc Chương 14 của Hadoop: Hướng dẫn dứt khoát có ~ 35 trang giải thích về cơ bản những gì ZooKeeper làm, tiếp theo là một ví dụ về dịch vụ cấu hình.