Elaticsearch là một công cụ phân tích và tìm kiếm NoSQL dễ dàng bắt đầu sử dụng để phân tích nhật ký, tìm kiếm văn bản, phân tích thời gian thực, v.v. Điều đó nói lên rằng, về cơ bản, Elaticsearch là một hệ thống phân tán, phức tạp với nhiều đòn bẩy cần sử dụng để đạt được hiệu suất tối ưu.
Trong blog này, chúng tôi trình bày các giải pháp cho các thách thức phổ biến về hiệu suất của Elaticsearch trên quy mô lớn, bao gồm lập chỉ mục chậm, tốc độ tìm kiếm, phân đoạn và định cỡ chỉ mục cũng như nhiều bên thuê. Nhiều giải pháp bắt nguồn từ các cuộc phỏng vấn và thảo luận với các nhà lãnh đạo kỹ thuật và kiến trúc sư có kinh nghiệm thực tế vận hành hệ thống trên quy mô lớn.
Khi xử lý khối lượng công việc có thông lượng ghi cao, bạn có thể cần điều chỉnh Elaticsearch để tăng hiệu suất lập chỉ mục. Chúng tôi cung cấp một số phương pháp hay nhất để có sẵn đủ tài nguyên cho việc lập chỉ mục để thao tác không ảnh hưởng đến hiệu suất tìm kiếm trong ứng dụng của bạn:
Tăng khoảng thời gian làm mới : Elaticsearch cung cấp dữ liệu mới để tìm kiếm bằng cách làm mới chỉ mục. Việc làm mới được đặt để tự động diễn ra mỗi giây khi chỉ mục nhận được truy vấn trong 30 giây qua. Bạn có thể tăng khoảng thời gian làm mới để dự trữ nhiều tài nguyên hơn cho việc lập chỉ mục.
Sử dụng API hàng loạt : Khi nhập dữ liệu quy mô lớn, thời gian lập chỉ mục bằng API cập nhật được biết là mất hàng tuần . Trong những trường hợp này, bạn có thể tăng tốc độ lập chỉ mục dữ liệu theo cách tiết kiệm tài nguyên hơn bằng cách sử dụng API hàng loạt. Ngay cả với API hàng loạt, bạn vẫn muốn biết số lượng tài liệu được lập chỉ mục và kích thước tổng thể của yêu cầu hàng loạt để đảm bảo yêu cầu đó không cản trở hiệu suất của cụm. Elastic khuyên bạn nên đo điểm chuẩn cho kích thước hàng loạt và theo nguyên tắc chung là 5-15 MB/yêu cầu hàng loạt .
Tăng kích thước bộ đệm chỉ mục : Bạn có thể tăng giới hạn bộ nhớ cho các yêu cầu lập chỉ mục chưa xử lý lên trên giá trị mặc định là 10% của vùng heap. Điều này có thể được khuyên dùng cho khối lượng công việc nặng về lập chỉ mục nhưng có thể ảnh hưởng đến các hoạt động khác tiêu tốn nhiều bộ nhớ.
Vô hiệu hóa sao chép: Bạn có thể đặt sao chép về 0 để tăng tốc độ lập chỉ mục nhưng điều này không được khuyến khích nếu Elaticsearch là hệ thống ghi lại khối lượng công việc của bạn.
Hạn chế việc cập nhật tại chỗ và đột biến dữ liệu : Các thao tác chèn, cập nhật và xóa yêu cầu phải lập chỉ mục lại toàn bộ tài liệu. Nếu bạn đang truyền dữ liệu CDC hoặc dữ liệu giao dịch vào Elaticsearch, bạn có thể cân nhắc việc lưu trữ ít dữ liệu hơn vì khi đó sẽ có ít dữ liệu hơn để lập chỉ mục lại.
Đơn giản hóa cấu trúc dữ liệu: Hãy nhớ rằng việc sử dụng các cấu trúc dữ liệu như các đối tượng lồng nhau sẽ tăng khả năng ghi và lập chỉ mục. Bằng cách đơn giản hóa số lượng trường và độ phức tạp của mô hình dữ liệu, bạn có thể tăng tốc độ lập chỉ mục.
Khi các truy vấn của bạn mất quá nhiều thời gian để thực thi, điều đó có thể có nghĩa là bạn cần đơn giản hóa mô hình dữ liệu của mình hoặc loại bỏ độ phức tạp của truy vấn. Dưới đây là một số lĩnh vực cần xem xét:
Tạochỉ mục tổng hợp : Hợp nhất các giá trị của hai trường lượng số thấp với nhau để tạo ra trường lượng số cao có thể dễ dàng tìm kiếm và truy xuất. Ví dụ: bạn có thể hợp nhất một trường với mã zip và tháng nếu đây là hai trường mà bạn thường lọc cho truy vấn của mình.
Cho phép định tuyến tài liệu tùy chỉnh : Elaticsearch phát một truy vấn tới tất cả các phân đoạn để trả về kết quả. Với định tuyến tùy chỉnh, bạn có thể xác định phân đoạn dữ liệu của mình nằm ở đâu để tăng tốc độ thực thi truy vấn. Điều đó có nghĩa là bạn muốn chú ý đến các điểm nóng khi áp dụng định tuyến tùy chỉnh.
Sử dụng loại trường từ khóa cho tìm kiếm có cấu trúc: Khi bạn muốn lọc dựa trên nội dung, chẳng hạn như ID hoặc mã zip, bạn nên sử dụng loại trường từ khóa thay vì loại số nguyên hoặc các loại trường số khác để truy xuất nhanh hơn.
Tránh xa các đối tượng cha-con và các đối tượng lồng nhau : Mối quan hệ cha-con là một giải pháp tốt cho việc thiếu hỗ trợ tham gia trong Elaticsearch và đã giúp tăng tốc độ nhập cũng như hạn chế lập chỉ mục lại. Cuối cùng, các tổ chức cũng đạt đến giới hạn bộ nhớ với phương pháp này. Khi điều đó xảy ra, bạn sẽ có thể tăng tốc hiệu suất truy vấn bằng cách thực hiện chuẩn hóa dữ liệu.
Nhiều thách thức mở rộng quy mô với Elaticsearch tập trung vào chiến lược phân chia và lập chỉ mục. Không có một kích thước nào phù hợp với tất cả chiến lược về số lượng phân đoạn bạn nên có hoặc kích thước phân đoạn của bạn. Cách tốt nhất để xác định chiến lược là chạy thử nghiệm và so sánh điểm chuẩn trên khối lượng công việc sản xuất thống nhất. Dưới đây là một số lời khuyên bổ sung để xem xét:
Sử dụng API hợp nhất lực lượng : Sử dụng API hợp nhất lực lượng để giảm số lượng phân đoạn trong mỗi phân đoạn. Việc hợp nhất phân đoạn diễn ra tự động trong nền và xóa mọi tài liệu đã xóa. Việc sử dụng tính năng hợp nhất lực lượng có thể loại bỏ các tài liệu cũ theo cách thủ công và tăng tốc hiệu suất. Điều này có thể tốn nhiều tài nguyên và do đó không nên xảy ra trong thời gian sử dụng cao điểm.
Cảnh giác với sự mất cân bằng tải : Elaticsearch không có cách hiểu tốt về việc sử dụng tài nguyên theo phân đoạn và tính đến điều đó khi xác định vị trí phân đoạn. Kết quả là có thể có những mảnh vỡ nóng. Để tránh tình trạng này, bạn có thể cân nhắc việc có nhiều phân đoạn hơn ghi chú dữ liệu và phân đoạn nhỏ hơn nút dữ liệu.
Sử dụng chỉ mục dựa trên thời gian : Chỉ mục dựa trên thời gian có thể làm giảm số lượng chỉ mục và phân đoạn trong cụm của bạn dựa trên khả năng lưu giữ. Elaticsearch cũng cung cấp API chỉ mục di chuột để bạn có thể chuyển sang chỉ mục mới dựa trên độ tuổi hoặc kích thước tài liệu nhằm giải phóng tài nguyên.
Các chiến lược phổ biến nhất cho nhiều đối tượng thuê là có một chỉ mục cho mỗi khách hàng hoặc đối tượng thuê hoặc sử dụng định tuyến tùy chỉnh. Đây là cách bạn có thể cân nhắc các chiến lược cho khối lượng công việc của mình:
Lập chỉ mục cho mỗi khách hàng hoặc đối tượng thuê: Việc định cấu hình các chỉ mục riêng biệt theo khách hàng sẽ phù hợp với những công ty có cơ sở người dùng nhỏ hơn, từ hàng trăm đến vài nghìn khách hàng và khi khách hàng không chia sẻ dữ liệu. Việc lập chỉ mục cho mỗi khách hàng cũng rất hữu ích nếu mỗi khách hàng có lược đồ riêng và cần sự linh hoạt cao hơn.
Định tuyến tùy chỉnh: Định tuyến tùy chỉnh cho phép bạn chỉ định phân đoạn chứa tài liệu, ví dụ: ID khách hàng hoặc ID đối tượng thuê, để chỉ định định tuyến khi lập chỉ mục tài liệu. Khi truy vấn dựa trên một khách hàng cụ thể, truy vấn sẽ chuyển thẳng đến phân đoạn chứa dữ liệu khách hàng để có thời gian phản hồi nhanh hơn. Định tuyến tùy chỉnh là một cách tiếp cận tốt khi bạn có sơ đồ nhất quán giữa các khách hàng của mình và bạn có nhiều khách hàng, điều này thường xảy ra khi bạn cung cấp mô hình freemium.
Elaticsearch được thiết kế cho các trường hợp sử dụng phân tích nhật ký và tìm kiếm văn bản. Nhiều tổ chức sử dụng Elaticsearch để phân tích thời gian thực trên quy mô lớn sẽ phải đánh đổi để duy trì hiệu suất hoặc hiệu quả chi phí, bao gồm việc hạn chế độ phức tạp của truy vấn và độ trễ nhập dữ liệu. Khi bạn bắt đầu giới hạn các kiểu sử dụng, khoảng thời gian làm mới của bạn vượt quá SLA hoặc bạn thêm nhiều tập dữ liệu cần được liên kết với nhau, bạn nên tìm kiếm các giải pháp thay thế cho Elaticsearch.
Rockset là một trong những lựa chọn thay thế và được thiết kế nhằm mục đích nhập dữ liệu truyền phát theo thời gian thực và truy vấn có độ trễ thấp trên quy mô lớn. Tìm hiểu cách di chuyển khỏi Elaticsearch và khám phá sự khác biệt về kiến trúc giữa hai hệ thống.