Giải thích về Zoo Zoo Apache


376

Tôi đang cố gắng để hiểu ZooKeeper, cách thức hoạt động và những gì nó làm. Có ứng dụng nào có thể so sánh với ZooKeeper không?

Nếu bạn biết, thì bạn sẽ mô tả ZooKeeper như thế nào với một giáo dân?

Tôi đã thử wiki apache, sourceforge ... nhưng tôi vẫn không thể liên quan đến nó.

Tôi mới đọc thông qua http://zookeeper.sourceforge.net/index.sf.shtml , vì vậy không có nhiều dịch vụ như thế này sao? Có đơn giản như chỉ cần sao chép một dịch vụ máy chủ?


6
Tương tự nhưng không phải là câu trả lời chính xác mà bạn đang tìm kiếm: stackoverflow.com/questions/1479442/real-world-use-of-zookeeper
zengr


Bạn có thể đọc bài viết này ZooKeeper: Phối hợp chờ miễn phí cho các hệ thống quy mô Internet được viết bởi hai Yahoo! kỹ sư
yaphet

Đây là một bài nói chuyện về công nghệ giới thiệu về Apache ZooKeeper của Camille Fournier, người là CTO của RentTheRunway. Tôi hi vọng nó hữu ích.
Genadinik

@Luca Geretti ... Theo tôi, Zookeper cung cấp bộ apis để chúng ta có thể sử dụng nó để phối hợp ứng dụng phân tán. đúng nếu tôi đã sai lầm.
dùng3797438

Câu trả lời:


434

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.


2
Tôi không chắc là tôi hiểu sơ đồ liên lạc mà bạn đang đề xuất, nhưng bạn có thể sử dụng ZooKeeper để "xuất bản" thông tin từ nhà sản xuất và có một số người tiêu dùng đọc nó. Mặt khác, nếu chỉ tồn tại một phiên bản của mỗi loại máy chủ thì việc sử dụng ZK có rất ít lợi ích.
Luca Geretti

57
IMO điều này không giải thích được ZooKeeper là gì đối với một giáo dân. Khi nào tôi cần ZooKeeper? Tôi sẽ viết gì cho nó? vấn đề gì nó giải quyết? Đây có phải là một cửa hàng khóa-giá trị? Một công cụ tìm kiếm? Một khóa phân phối? Tại sao tôi chọn ZooKeeper hơn, ví dụ Redis hoặc tệp hoặc JIRA hoặc ghi chú sau đó? Bạn rõ ràng biết rất nhiều về ZooKeeper - nhưng bạn có thể giải thích nó ít kỹ thuật hơn không?
Dan Passaro

1
Vì Zookeeper có ghi tuyến tính, điều đó không ngăn tôi sử dụng API không đồng bộ để tạo các nút và nhận phản hồi trong cuộc gọi lại? Mặc dù trong nội bộ nó có thể không cho phép viết đồng thời, hoặc tôi đang thiếu một cái gì đó?
jdk2588

1
"Mỗi lần khách hàng ghi vào nhóm, phần lớn các nút vẫn lưu 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ủ" => bạn có thể vui lòng chỉ cho tôi tài liệu không. hoặc một cái gì đó nơi này được giải thích? Tôi tự hỏi liệu có thể thay đổi trạng thái đã được thực hiện thành công không bao gồm máy chủ mà máy khách được kết nối (trong trường hợp đó, khách hàng có thể gặp phải hành vi kỳ lạ là không thể đọc được ghi của chính mình trong giây lát)
giác quan

2
Hoàn toàn và hoàn toàn phản đối với câu hỏi được hỏi. Nếu đó là một chiếc đồng hồ, anh ta sẽ tìm kiếm "thiết bị giữ thời gian" không phải là mô tả về con cái, xe lửa, sự thoát hiểm và sự tương tác của chúng dựa trên thời gian dao động, mô men quán tính và tác động của tinh thể sapphire nhân tạo.
Rick O'Shea

10

Zookeeper là một trong những máy chủ và dịch vụ nguồn mở tốt nhất giúp điều phối đáng tin cậy các quy trình phân tán. Zookeeper là một hệ thống CP (Tham khảo Định lý CAP) cung cấp tính nhất quán và dung sai phân vùng. Bản sao trạng thái Zookeeper trên tất cả các nút làm cho nó trở thành một dịch vụ phân tán cuối cùng nhất quán.

Hơn nữa, bất kỳ nhà lãnh đạo mới được bầu nào cũng sẽ cập nhật những người theo dõi với các đề xuất bị thiếu hoặc với một ảnh chụp nhanh về nhà nước, nếu những người theo dõi có nhiều đề xuất bị thiếu.

Zookeeper cũng cung cấp một API rất dễ sử dụng. Bài đăng trên blog này, các ví dụ API của Zookeeper , có một số ví dụ nếu bạn đang tìm kiếm các ví dụ.

Vậy chúng ta sử dụng cái này ở đâu? Nếu dịch vụ phân tán của bạn cần một quản lý cấu hình tập trung, đáng tin cậy và nhất quán, khóa, hàng đợi, v.v., bạn sẽ thấy Zookeeper là một lựa chọn đáng tin cậy.


4
"Zookeeper là một hệ thống CP (Tham khảo Định lý CAP) cung cấp tính nhất quán và dung sai phân vùng", tôi nghĩ rằng Zookeeper có chủ và người theo dõi, khi chủ xuống, một trong những người theo dõi sẽ được bầu làm Người lãnh đạo, vì vậy Zookeeper nên cung cấp AP, tuy nhiên C cuối cùng là nhất quán.
YuFeng Shen

5
Theo định lý CAP, "C" thực sự có nghĩa là tính tuyến tính. ZooKeeper trên thực tế cung cấp "tính nhất quán tuần tự" và điều đó có nghĩa là các cập nhật từ khách hàng sẽ được áp dụng theo thứ tự mà họ đã nhận được .. Điều này yếu hơn tính tuyến tính nhưng vẫn rất mạnh, mạnh hơn nhiều so với "tính nhất quán cuối cùng". Zookeeper không phải là A và điều này là do Nếu người lãnh đạo không thể được bầu (không có đại biểu) thì người quản lý vườn thú sẽ không yêu cầu. Đây là lý do tại sao nó không có sẵn cao.
Binu George

7

Tôi hiểu ZooKeeper nói chung nhưng có vấn đề với các thuật ngữ "đại biểu" và "tách não" để có thể tôi có thể chia sẻ những phát hiện của mình với bạn (tôi coi mình cũng là một giáo dân).

Giả sử chúng ta có một cụm ZooKeeper gồm 5 máy chủ. Một trong những máy chủ sẽ trở thành người lãnh đạo và những người khác sẽ trở thành người theo dõi.

  • 5 máy chủ này tạo thành một đại biểu. Đại biểu đơn giản có nghĩa là "những máy chủ này có thể bầu chọn ai sẽ là người lãnh đạo".

  • Vì vậy, việc bỏ phiếu dựa trên đa số. Đa số chỉ đơn giản là "hơn một nửa" nên hơn một nửa số lượng máy chủ phải đồng ý cho một máy chủ cụ thể trở thành người dẫn đầu.

  • Vì vậy, có một điều tồi tệ có thể xảy ra được gọi là "chia não". Một bộ não phân chia chỉ đơn giản là như vậy, theo như tôi hiểu: Cụm 5 máy chủ chia thành hai phần, hoặc gọi nó là "nhóm máy chủ", có thể là một phần của 2 và 3 máy chủ khác. Đây thực sự là một tình huống tồi tệ vì nếu cả hai "đội máy chủ" phải thực hiện một đơn đặt hàng cụ thể, làm thế nào bạn sẽ quyết định nên chọn đội nào? Họ có thể đã nhận được thông tin khác nhau từ khách hàng. Vì vậy, điều thực sự quan trọng là phải biết "nhóm máy chủ" nào vẫn có liên quan và cái nào có thể / nên bỏ qua.

  • Đa số cũng là lý do bạn nên sử dụng số lượng máy chủ lẻ. Nếu bạn có 4 máy chủ và một bộ não phân chia trong đó 2 máy chủ tách biệt thì cả hai "nhóm máy chủ" có thể nói "này, chúng tôi muốn quyết định ai là người lãnh đạo!" Nhưng làm thế nào bạn nên quyết định 2 máy chủ bạn nên chọn? Với 5 máy chủ, thật đơn giản: Nhóm máy chủ có 3 máy chủ chiếm đa số và được phép chọn nhà lãnh đạo mới.

  • Ngay cả khi bạn chỉ có 3 máy chủ và một trong số đó không thành công, 2 máy chủ còn lại vẫn chiếm đa số và có thể đồng ý rằng một trong số họ sẽ trở thành nhà lãnh đạo mới.

Tôi nhận ra một khi bạn nghĩ về nó một thời gian và hiểu các thuật ngữ nó không còn quá phức tạp nữa. Tôi hy vọng điều này cũng giúp bất cứ ai hiểu các điều khoản này.


1

Zookeeper là một máy chủ nguồn mở tập trung để duy trì và quản lý thông tin cấu hình, quy ước đặt tên và đồng bộ hóa cho môi trường cụm phân tán. Zookeeper giúp các hệ thống phân tán giảm độ phức tạp quản lý của chúng bằng cách cung cấp độ trễ thấp và tính sẵn sàng cao. Zookeeper ban đầu là một dự án phụ cho Hadoop nhưng bây giờ nó là một dự án độc lập cấp cao nhất của Quỹ phần mềm Apache.

Thêm thông tin


2
Điều gì làm cho bạn nói rằng người quản lý vườn thú là tập trung? Zookeeper có thể và nên được chạy phân phối.
Benjamin Hammer Nørgaard

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.