0
0
Lập trình
TT

Hiểu Rõ Về Shards và Replicas Trong Elasticsearch: Cấu Hình Đúng Để Tối Ưu Hiệu Suất

Đăng vào 1 tháng trước

• 5 phút đọc

Chủ đề:

Elasticsearch

Chào mọi người, trong bài viết hôm nay, chúng ta sẽ cùng khám phá hai khái niệm quan trọng trong Elasticsearch mà mọi người làm việc với hệ thống này cần phải nắm vững: ShardsReplicas.

Shards Là Gì?

Khi nhắc đến Elasticsearch, chắc chắn bạn sẽ thường xuyên bắt gặp thuật ngữ shard. Vậy shards thực tế là gì? Nói đơn giản, shard là một phần nhỏ của index.

Mỗi index có thể được chia thành nhiều shard, và mỗi shard chính là một "đơn vị độc lập" chứa một phần dữ liệu của index đó.

Tại Sao Cần Shards?

Elasticsearch là một hệ thống phân tán, tức là dữ liệu được chia thành nhiều phần nhỏ gọi là shards để có thể lưu trữ trên nhiều node khác nhau. Mỗi shard không chỉ là một phần nhỏ mà thực chất còn mang đầy đủ các đặc điểm của một chỉ mục lớn.

Việc chia index thành nhiều shard giúp:

  1. Tăng Khả Năng Mở Rộng: Khi dữ liệu tăng trưởng, việc lưu trữ tất cả trên một máy chủ trở nên khó khăn. Chia index thành nhiều shard cho phép bạn phân phối dữ liệu trên nhiều máy chủ, từ đó nâng cao khả năng mở rộng.

  2. Cải Thiện Hiệu Suất: Khi thực hiện truy vấn dữ liệu, Elasticsearch sẽ phân phối các yêu cầu đến các shard khác nhau, nhờ vậy gia tăng tốc độ xử lý do các shard có thể hoạt động song song.

Ví Dụ Về Shards

Giả sử bạn có một index chứa 1 triệu tài liệu. Nếu chia index này thành 5 shard, mỗi shard sẽ chứa khoảng 200,000 tài liệu. Khi truy vấn dữ liệu, Elasticsearch sẽ tìm kiếm trên cả 5 shard cùng lúc, giúp giảm thiểu thời gian truy vấn.

Replicas Là Gì?

Nếu shard là một phần của index thì replica chính là một bản sao của shard. Mỗi shard có thể có một hoặc nhiều replicas và các replica này giúp đảm bảo tính khả dụng cao (high availability) và độ tin cậy của dữ liệu.

Tại Sao Cần Replicas?

  1. Tính Sẵn Sàng Cao: Nếu một shard gặp lỗi như server hư hỏng, các replica sẽ làm nhiệm vụ thay thế, đảm bảo hệ thống vẫn hoạt động bình thường.

  2. Cân Bằng Tải: Các replica không chỉ được sử dụng cho dự phòng mà còn có thể xử lý các yêu cầu đọc (read requests), giúp phân tán tải và gia tăng hiệu suất.

Ví Dụ Về Replicas

Giả sử bạn có một index gồm 5 shards và mỗi shard có 1 replica. Tổng số bạn sẽ có là 10 shard (5 shard chính và 5 replica). Khi một shard chính gặp sự cố, replica sẽ tiếp quản đảm bảo dữ liệu vẫn có thể truy cập.

Cách Hoạt Động Của Shards và Replicas

Trong thực tế, bạn sẽ thường xuyên kết hợp cả shard và replica để tối ưu hóa hiệu suất. Ví dụ, bạn có thể cấu hình index với 3 shard và mỗi shard có 2 replica, tổng cộng sẽ có 9 shard (3 shard chính và 6 replica).

Cấu Hình Shards và Replicas

Khi tạo một index mới trong Elasticsearch, bạn có thể chỉ định số lượng shard và replica:

Copy
PUT /my_index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}
  • number_of_shards: 3: Index sẽ chia thành 3 shards chính.
  • number_of_replicas: 2: Mỗi shard chính có 2 bản sao, tổng cộng sẽ có 6 shard replica.

Cách Elasticsearch Phân Phối Shards và Replicas

Khi một index được tạo, Elasticsearch sẽ tự động phân bổ các shards và replicas. Dưới đây là cách hoạt động chi tiết:

  1. Shard Primaries: Elasticsearch tạo ra number_of_shards shard chính và gán chúng cho các node khả dụng.
  2. Replica Allocation: Các bản sao được tạo và phân tán trên các node khác nhau để đảm bảo tính sẵn sàng.
  3. Cluster Rebalancing: Khi một node mới được thêm vào hoặc một node bị mất, Elasticsearch tự động điều chỉnh vì trí của shards để tối ưu hóa hiệu suất.

Hoạt Động Truy Vấn Với Shards và Replicas

  • Ghi Dữ Liệu: Khi dữ liệu được ghi vào một shard chính, Elasticsearch tự động sao chép dữ liệu đến các replicas.
  • Đọc Dữ Liệu: Elasticsearch có thể thực hiện truy vấn trên cả shard chính và replicas, từ đó tăng hiệu suất truy vấn.
  • Cân Bằng Tải: Khi một shard chính quá tải, Elasticsearch có thể chuyển một số truy vấn sang replicas để giảm áp lực.

Lưu Ý Khi Thiết Kế Shards và Replicas

Khi cấu hình số lượng shards và replicas, có một số lưu ý quan trọng:

  • Chọn Số Lượng Shards Hợp Lý: Quá nhiều shards có thể khiến hệ thống tốn nhiều tài nguyên để quản lý. Nếu quá ít, dữ liệu có thể không được phân phối hiệu quả.
  • Định Cấu Hình Replicas Phù Hợp: Nếu có nhiều truy vấn đọc, tăng số lượng replicas sẽ giúp cải thiện hiệu suất đáng kể.
  • Xem Xét Khả Năng Mở Rộng: Cluster Elasticsearch có thể mở rộng bằng cách thêm node mới và Elasticsearch sẽ tự động hủy cân bằng bản sao để tối ưu hóa hiệu suất.

Nếu bạn có quá ít shard, dữ liệu sẽ không được phân phối đồng đều, dẫn đến hiệu suất kém. Ngược lại, nếu quá nhiều shard, hệ thống sẽ trở nên phức tạp khó quản lý.

Khuyên bạn hãy bắt đầu với số lượng shard vừa phải và tăng dần khi cần thiết. Đảm bảo luôn có ít nhất một replica cho tính khả dụng.

Kết Luận

Shard và replica là hai khái niệm cốt lõi trong Elasticsearch mà bất kỳ lập trình viên nào cũng cần phải nắm vững. Hiểu rõ cách chúng hoạt động và cách cấu hình chúng sẽ giúp bạn xây dựng một hệ thống Elasticsearch hiệu quả, mạnh mẽ và tin cậy. Hiểu về shards và replicas là rất cần thiết trong quá trình làm việc với Elasticsearch. Bằng cách cấu hình phù hợp, bạn có thể đảm bảo hệ thống hoạt động ổn định với hiệu suất cao và khả năng mở rộng linh hoạt.

Hy vọng bài viết này sẽ hữu ích cho bạn trong quá trình làm việc với Elasticsearch. Nếu có thắc mắc, hãy để lại câu hỏi trong phần bình luận dưới đây. Chúc bạn thành công!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào