Zookeeper - Tổng quan
ZooKeeper là một dịch vụ điều phối phân tán để quản lý một tập hợp lớn các máy chủ. Điều phối và quản lý một dịch vụ trong môi trường phân tán là một quá trình phức tạp. ZooKeeper giải quyết vấn đề này với kiến trúc và API đơn giản của nó. ZooKeeper cho phép các nhà phát triển tập trung vào logic ứng dụng cốt lõi mà không cần lo lắng về bản chất phân tán của ứng dụng.
Khung ZooKeeper ban đầu được xây dựng tại “Yahoo!” để truy cập các ứng dụng của họ một cách dễ dàng và mạnh mẽ. Sau đó, Apache ZooKeeper trở thành một tiêu chuẩn cho dịch vụ có tổ chức được sử dụng bởi Hadoop, HBase và các khuôn khổ phân tán khác. Ví dụ: Apache HBase sử dụng ZooKeeper để theo dõi trạng thái của dữ liệu được phân phối.
Trước khi tiến xa hơn, điều quan trọng là chúng ta phải biết một hoặc hai điều về các ứng dụng phân tán. Vì vậy, chúng ta hãy bắt đầu cuộc thảo luận với tổng quan nhanh về các ứng dụng phân tán.
Ứng dụng phân tán
Một ứng dụng phân tán có thể chạy trên nhiều hệ thống trong mạng tại một thời điểm nhất định (đồng thời) bằng cách phối hợp với nhau để hoàn thành một tác vụ cụ thể một cách nhanh chóng và hiệu quả. Thông thường, các tác vụ phức tạp và tốn thời gian, sẽ mất hàng giờ để hoàn thành bởi một ứng dụng không phân tán (chạy trong một hệ thống duy nhất) có thể được thực hiện trong vài phút bởi một ứng dụng phân tán bằng cách sử dụng khả năng tính toán của tất cả hệ thống liên quan.
Thời gian hoàn thành tác vụ có thể được giảm hơn nữa bằng cách định cấu hình ứng dụng phân tán để chạy trên nhiều hệ thống hơn. Một nhóm hệ thống trong đó ứng dụng phân tán đang chạy được gọi làCluster và mỗi máy chạy trong một cụm được gọi là Node.
Một ứng dụng phân tán có hai phần, Server và Clientứng dụng. Các ứng dụng máy chủ thực sự được phân phối và có giao diện chung để các máy khách có thể kết nối với bất kỳ máy chủ nào trong cụm và nhận được cùng một kết quả. Ứng dụng khách là công cụ để tương tác với một ứng dụng phân tán.
Lợi ích của các ứng dụng phân tán
Reliability - Sự cố của một hoặc một vài hệ thống không làm cho toàn bộ hệ thống bị lỗi.
Scalability - Hiệu suất có thể được tăng lên khi cần thiết bằng cách thêm nhiều máy hơn với sự thay đổi nhỏ trong cấu hình của ứng dụng mà không có thời gian chết.
Transparency - Ẩn sự phức tạp của hệ thống và hiển thị như một thực thể / ứng dụng duy nhất.
Những thách thức của các ứng dụng phân tán
Race condition- Hai hoặc nhiều máy đang cố gắng thực hiện một tác vụ cụ thể, mà thực tế chỉ cần một máy thực hiện tại một thời điểm nhất định. Ví dụ: tài nguyên dùng chung chỉ nên được sửa đổi bởi một máy tại bất kỳ thời điểm nào.
Deadlock - Hai hoặc nhiều hoạt động chờ nhau hoàn thành vô thời hạn.
Inconsistency - Lỗi một phần dữ liệu.
Apache ZooKeeper Meant For là gì?
Apache ZooKeeper là một dịch vụ được sử dụng bởi một cụm (nhóm các nút) để điều phối giữa chúng và duy trì dữ liệu được chia sẻ với các kỹ thuật đồng bộ hóa mạnh mẽ. ZooKeeper là một ứng dụng phân tán cung cấp các dịch vụ viết một ứng dụng phân tán.
Các dịch vụ phổ biến do ZooKeeper cung cấp như sau:
Naming service- Xác định các nút trong một cụm theo tên. Nó tương tự như DNS, nhưng dành cho các nút.
Configuration management - Thông tin cấu hình cập nhật và mới nhất của hệ thống cho một nút tham gia.
Cluster management - Tham gia / rời khỏi một nút trong một cụm và trạng thái nút tại thời gian thực.
Leader election - Bầu một nút làm lãnh đạo cho mục đích điều phối.
Locking and synchronization service- Khóa dữ liệu trong khi sửa đổi nó. Cơ chế này giúp bạn tự động khôi phục lỗi trong khi kết nối các ứng dụng phân tán khác như Apache HBase.
Highly reliable data registry - Tính khả dụng của dữ liệu ngay cả khi một hoặc một vài nút không hoạt động.
Các ứng dụng phân tán mang lại rất nhiều lợi ích, nhưng chúng cũng gây ra một số thách thức phức tạp và khó bẻ khóa. Khung ZooKeeper cung cấp một cơ chế hoàn chỉnh để vượt qua tất cả các thử thách. Tình trạng cuộc đua và bế tắc được xử lý bằng cách sử dụngfail-safe synchronization approach. Một nhược điểm chính khác là dữ liệu không nhất quán, mà ZooKeeper giải quyết bằngatomicity.
Lợi ích của ZooKeeper
Dưới đây là những lợi ích của việc sử dụng ZooKeeper -
Simple distributed coordination process
Synchronization- Loại trừ lẫn nhau và hợp tác giữa các quy trình máy chủ. Quá trình này giúp Apache HBase quản lý cấu hình.
Ordered Messages
Serialization- Mã hóa dữ liệu theo các quy tắc cụ thể. Đảm bảo ứng dụng của bạn chạy nhất quán. Cách tiếp cận này có thể được sử dụng trong MapReduce để điều phối hàng đợi để thực thi các luồng đang chạy.
Reliability
Atomicity - Truyền dữ liệu thành công hoặc thất bại hoàn toàn, nhưng không có giao dịch nào là một phần.