Elasticsearch Bài học 6: Giải mã kiến trúc phân tán - Node, Cluster, Index và Document.
Khi thiết kế hệ thống backend cho một sàn e-commerce với hàng triệu sản phẩm, hay xử lý hàng trăm nghìn giao dịch soát vé tự động (AFC) đổ về liên tục mỗi ngày, một server duy nhất (Monolithic) chắc chắn sẽ gục ngã vì nghẽn CPU hoặc cạn kiệt RAM.
Sức mạnh thực sự của Elasticsearch không chỉ nằm ở thuật toán tìm kiếm, mà là khả năng mở rộng ngang (Horizontal Scaling) tuyệt vời. Để làm chủ nó, bạn phải hiểu rõ 4 mảnh ghép định hình nên kiến trúc phân tán này: Document, Index, Node và Cluster.
Chúng ta sẽ chia 4 khái niệm này thành 2 tầng: Tầng logic (Cách bạn nhìn thấy dữ liệu) và Tầng vật lý (Cách server xử lý dữ liệu).
1. Tầng Logic: Tổ chức dữ liệu (Document & Index)
Đây là tầng mà các Backend Developer tương tác hàng ngày thông qua API.
-
Document (Tài liệu): Là đơn vị dữ liệu nhỏ nhất, được thể hiện dưới dạng JSON. Mỗi thao tác quẹt thẻ qua cổng, hay mỗi kiện hàng logistics được tạo ra, khi đẩy vào Elasticsearch sẽ thành một Document. Chúng chứa dữ liệu thực tế và luôn mang một định danh duy nhất (
_id). -
Index (Chỉ mục): Là một tập hợp logic chứa các Document có chung đặc điểm nghiệp vụ. Bạn có thể có
products_indexchứa sản phẩm, hoặcafc_transactions_2026chứa dữ liệu soát vé.Bản chất: Index chỉ là một "tên gọi" (Namespace) logic. Dữ liệu thực sự của một Index không nằm tập trung ở một chỗ, mà bị "băm" nhỏ ra và rải đều trên nhiều server vật lý (điều này sẽ được làm rõ ở Bài 7).
2. Tầng Vật lý: Cơ bắp của hệ thống (Node)
Node đơn giản là một phiên bản (instance) của Elasticsearch đang chạy. Một máy chủ vật lý (hoặc máy ảo/container) có thể chạy một hoặc nhiều Node, nhưng trên môi trường Production, mỗi server thường chỉ chạy đúng 1 Node để tối ưu tài nguyên phần cứng.
Điều làm nên sự linh hoạt của hệ thống là việc phân chia vai trò (Role) cho từng Node. Giống như kiến trúc Microservices, mỗi Node sinh ra để làm một nhiệm vụ chuyên biệt:
-
Master-eligible Node (Bộ não điều phối):
-
Không trực tiếp đọc/ghi dữ liệu của user.
-
Chỉ chịu trách nhiệm quản lý Cluster State (Trạng thái cụm): Giám sát Node nào đang sống/chết, Index nào mới được tạo, dữ liệu đang nằm ở đâu.
-
Nếu Master Node sập, cụm sẽ tự động bầu cử (Election) một Master mới từ các node hợp lệ.
-
-
Data Node (Công nhân bốc vác):
-
Nơi thực sự lưu trữ dữ liệu trên ổ cứng.
-
Xử lý mọi thao tác nặng nhọc nhất: CRUD, Full-text search, Aggregations (thống kê).
-
Yêu cầu cấu hình phần cứng cực kỳ khắt khe: RAM lớn, CPU mạnh và ổ cứng SSD tốc độ cao.
-
-
Coordinating Node (Tiếp tân / API Gateway):
-
Đứng ở ngoài cùng để hứng mọi request RESTful API từ client (hoặc từ các backend service như PHP/Golang).
-
Nó không lưu dữ liệu. Nhiệm vụ của nó là xem request này cần dữ liệu ở đâu, "chia việc" (Scatter) xuống cho các Data Node tương ứng, sau đó thu thập kết quả, tính toán tổng hợp (Gather) và trả về cho client.
-
3. Tầng Hệ thống: Cụm máy chủ (Cluster)
Cluster (Cụm) là một tập hợp của một hoặc nhiều Node hoạt động cùng nhau, chia sẻ cùng một tên (ví dụ: cluster.name: hasaki-production-cluster).
Sự kỳ diệu của Elasticsearch nằm ở chỗ: Khi bạn mua thêm một server mới, cài Elasticsearch, cấu hình cùng cluster.name và bật lên, Node mới này sẽ tự động gia nhập vào Cluster. Master Node sẽ ngay lập tức nhìn thấy "nhân sự" mới và tự động chuyển bớt một phần dữ liệu từ các Node cũ sang Node mới để cân bằng tải (Rebalancing) với thời gian downtime bằng 0 (Zero-downtime).
Bạn – với tư cách là người gọi API – không cần biết dữ liệu đang nằm ở Node nào. Bạn chỉ cần ném request vào cụm, Cluster sẽ tự biết cách tìm ra dữ liệu.
Bức tranh tổng thể: Hãy tưởng tượng hệ thống Elasticsearch như một Nhà kho Logistics lớn (Cluster):
-
Mỗi Kiện hàng bên trong là một Document.
-
Các Khu vực phân loại (Khu hàng dễ vỡ, Khu đông lạnh) là các Index.
-
Quản đốc cầm danh sách sơ đồ kho là Master Node.
-
Công nhân bốc vác trong kho là Data Node.
-
Nhân viên điều phối ở cửa kho, nhận yêu cầu lấy hàng từ khách và gọi công nhân mang ra là Coordinating Node.
Hệ thống này sinh ra để bẻ gãy giới hạn vật lý của một máy chủ. Nhưng để làm được điều đó, bên trong lòng của các Index còn có một cơ chế chia nhỏ dữ liệu cực kỳ phức tạp.
All rights reserved