Elasticsearch có lẽ là một công cụ không còn xa lạ trong giới developer hiện tại. Tuy nhiên, để hiểu rõ và tận dụng được tốt nó thì không phải là điều mà ai cũng có thể làm được. Mở đầu cho chuỗi bài về Elasticsearch, Stringee và các bạn sẽ cùng tìm hiểu một số khái niệm cơ bản trước khi sử dụng công cụ này.
1. Elasticsearch là gì?
Elasticsearch là công cụ tìm kiếm dựa trên nền tảng Apache Lucene. Nó cung cấp một bộ máy tìm kiếm dạng phân tán, có đầy đủ công cụ với một giao diện web HTTP có hỗ trợ dữ liệu JSON.
Elasticsearch là một hệ thống lưu trữ các document phân tán. Thay vì việc lưu trữ các dữ liệu dưới dạng các dòng chứa các cột dữ liệu. Elasticsearch lưu các dữ liệu phức tạp sau khi được tuần tự hóa dưới dạng JSON. Nếu bạn có nhiều node Elasticsearch trong một cluster, các document được lưu trữ sẽ được phân tán trong cluster và có thể được truy cập ngay lập tức từ bất kỳ node nào.
Để có thể lột tả hết được những thông tin cần thiết và những ưu điểm mà Elasticsearch mang lại, có thể chúng ta sẽ còn mất rất nhiều thời gian để tìm hiểu. Vì vậy, dưới đây là tóm gọn các thông tin về Elasticsearch mà các bạn cần biết:
- Elasticsearch là một search engine.
- Elasticsearch được kế thừa từ Lucene Apache.
- Elasticsearch thực chất hoạt động như một web server, có khả năng tìm kiếm nhanh chóng (near real time) thông qua giao thức RESTful.
- Elasticsearch có khả năng phân tích và thống kê dữ liệu.
- Elasticsearch chạy trên server riêng và đồng thời giao tiếp thông qua RESTful do vậy nên nó không phụ thuộc vào client viết bằng gì hay hệ thống hiện tại của bạn viết bằng gì. Nên việc tích hợp nó vào hệ thống bạn là dễ dàng, bạn chỉ cần gửi request http lên và nó sẽ trả về kết quả.
- Elasticsearch là hệ thống phân tán và có khả năng mở rộng tuyệt vời (horizontal scalability). Lắp thêm node là nó sẽ tự động mở rộng cho bạn.
- Elasticsearch là open-source được phát triển bằng Java.
2. Elasticsearch hoạt động như thế nào?
Elasticsearch hoạt động dựa trên việc lưu trữ và quản lý các dữ liệu có dạng document và các loại dữ liệu bán cấu trúc. Nội bộ Elasticsearch hoạt động dựa trên một nguyên lý cơ bản dưới một cấu trúc không chia sẻ bất cứ thứ gì. Cấu trúc dữ liệu chính của nó sử dụng một chỉ mục được đánh ngược bằng việc tận dụng API của Apache Lucene.
Hiểu theo một cách đơn giản thì một chỉ mục ngược được gán cho từng từ riêng biệt (được gọi là token) tới một danh sách các tài liệu có chứa các từ đó, điều này cho phép chúng ta có thể định vị được tài liệu với từ khóa được sử dụng để tìm kiếm. Thông tin chỉ mục đó được lưu trữ trong một hoặc nhiều phân vùng được gọi là shard.
Elasticsearch có khả năng phân tán và tìm thấy được vị trí shard một cách linh hoạt từ các node trong một cluster cũng như là việc nhân bản chúng lên.
Cơ chế này làm cho việc phân bổ dữ liệu trở nên linh hoạt và dễ dàng hơn. Cluster Elastic Search hoàn toàn có thể được giảm tải bởi việc phân tán các phân vùng được nhân bản tới các node khác nhau. Các phương thức chỉ mục sử dụng các phân vùng ưu tiên và tìm kiếm sử dụng cả hai loại shard. Trong một cluster có nhiều node và càng nhiều replica thì hiệu suất tìm kiếm càng tăng.
3. Các khái niệm cần biết
Document
Document là một JSON object với một số dữ liệu. Đây là basic information unit trong ES. Hiểu một cách cơ bản thì đây là đơn vị nhỏ nhất để lưu trữ dữ liệu trong Elasticsearch.
Index
Elasticsearch sử dụng một cấu trúc được gọi là inverted index. Nó được thiết kế để cho phép tìm kiếm full-text search. Cách thức của nó khá đơn giản, các văn bản được phân tách ra thành từng từ có nghĩa sau đó sẽ được nối vào để xem thuộc văn bản nào. Mỗi loại search sẽ đưa ra một kết quả cụ thể.
>>> Xem thêm bài viết:
- Hướng dẫn cài đặt K8s Kubernetes Cluster
- Kafka là gì? Ứng dụng của Kafka trong ngành thương mại điện tử
- RabbitMQ là gì? So sánh RabbitMQ với Kafka
Shard
- Shard là đối tượng của Lucene. Một Index có thể được chia thành nhiều shard.
- Mỗi node bao gồm nhiều Shard. Chính vì thế Shard là đối tượng nhỏ nhất, hoạt động ở mức thấp nhất, đóng vai trò lưu trữ dữ liệu.
- Chúng ta gần như không bao giờ làm việc trực tiếp với các Shard.
Elasticsearch đã support toàn bộ việc giao tiếp cũng như tự động thay đổi các Shard khi cần thiết.
Có 2 loại Shard là: Primary Shard và Replica Shard.
- Primary Shard: Primary Shard là nơi lưu trữ dữ liệu và đánh index. Sau khi đánh xong dữ liệu sẽ được vận chuyển tới các Replica Shard. Mặc định của Elasticsearch là mỗi index sẽ có 5 Primary shard và với mỗi Primary shard thì sẽ đi kèm với một Replica Shard.
- Replica Shard: Replica Shard đúng như cái tên của nó, nó là nơi lưu trữ dữ liệu nhân bản của Primary Shard. Replica Shard có vai trò đảm bảo tính toàn vẹn của dữ liệu khi Primary Shard xảy ra vấn đề. Ngoài ra Replica Shard có thể giúp tăng cường tốc độ tìm kiếm vì chúng ta có thể setup lượng Replica Shard nhiều hơn mặc định của Elasticsearch.
Node
- Là trung tâm hoạt động của Elasticsearch. Là nơi lưu trữ dữ liệu, tham gia thực hiện đánh index của cluster cũng như thực hiện các thao tác tìm kiếm.
- Mỗi node được định danh bằng một unique name.
Cluster
- Tập hợp các nodes hoạt động cùng với nhau, chia sẻ cùng thuộc tính cluster.name. Chính vì thế Cluster sẽ được xác định bằng một 'unique name'. Việc định danh các cluster trùng tên sẽ gây nên lỗi cho các node vì vậy khi setup các bạn cần hết sức chú ý điểm này.
- Mỗi cluster có một node chính (master), được lựa chọn một cách tự động và có thể thay thế nếu sự cố xảy ra. Một cluster có thể gồm một hoặc nhiều nodes. Các nodes có thể hoạt động trên cùng một server. Tuy nhiên trong thực tế, một cluster sẽ gồm nhiều nodes hoạt động trên các server khác nhau để đảm bảo nếu một server gặp sự cố thì server khác (node khác) có thể hoạt động đầy đủ chức năng so với khi có hai servers. Các node có thể tìm thấy nhau để hoạt động trên cùng một cluster qua giao thức unicast.
- Chức năng chính của Cluster đó chính là quyết định xem shards nào được phân bổ cho node nào và khi nào thì di chuyển các Cluster để cân bằng lại Cluster.
4. Ưu và nhược điểm của Elasticsearch
Ưu điểm:
- Tìm kiếm dữ liệu rất nhanh chóng, mạnh mẽ dựa trên Apache Lucene (near-real time searching).
- Có khả năng phân tích dữ liệu (Analysis data).
- Khả năng mở rộng theo chiều ngang tuyệt vời.
- Hỗ trợ tìm kiếm mờ (fuzzy), tức là từ khóa tìm kiếm có thể bị sai lỗi chính tả hay không đúng cú pháp thì vẫn có khả năng Elasticsearch trả về kết quả tốt.
- Hỗ trợ Structured Query DSL (Domain-Specific Language), cung cấp việc đặc tả những câu truy vấn phức tạp một cách cụ thể và rõ ràng bằng JSON. Các bạn hãy chú ý đón đọc các chương mới của series này, Stringee sẽ sớm có bài viết về chủ đề này nhé.
- Hỗ trợ nhiều Elasticsearch client như Java, PHP, Javascript, Ruby, .NET, Python.
Nhược điểm:
- Elasticsearch được thiết kế cho mục đích search, do vậy với những nhiệm vụ khác ngoài search như CRUD thì elastic kém hơn so với những database khác như MongoDB, MySQL… Do vậy người ta ít khi dùng Elasticsearch làm database chính, mà thường kết hợp nó với một database khác.
- Trong Elasticsearch không có khái niệm database transaction, tức là nó sẽ không đảm bảo được toàn vẹn dữ liệu trong các hoạt động Insert, Update, Delete. Khi chúng ta thực hiện thay đổi nhiều bản ghi nếu xảy ra lỗi thì sẽ làm cho logic của mình bị sai hay dẫn tới mất mát dữ liệu. Đây cũng là một phần khiến Elasticsearch không nên là database chính.
- Không thích hợp với những hệ thống thường xuyên cập nhật dữ liệu. Sẽ rất tốn kém cho việc đánh index dữ liệu.
Kết bài
Trong bài viết này, Stringee đã đưa ra các khái nhiệm cần biết và khái quát lại các ưu và nhược điểm của Elasticsearch. Nó là một công cụ khá thú vị và mạnh mẽ, phù hợp với công việc thống kê dữ liệu. Các bạn hãy cùng đón xem loại bài sắp tới của chúng tôi về Elasticsearch nhé.
Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.
Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy, Adavigo, bTaskee…
Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: