Elasticsearch - Tưởng quen mà lạ
Nhắc đến Search engine, chắc chắn 10 người thì có thể đến 9,5 người nghĩ ngay đến từ khóa Elasticsearch. Đó cũng chính là lý do Elasticsearch luôn nằm trong top 10 của DB-Engines Ranking - bảng xếp hạng các hệ thống quản lý cơ sở dữ liệu theo mức phổ biến (https://db-engines.com/en/ranking). Tại thời gian viết series này, Elasticsearch đang ổn định ở vị trí thứ 8, bỏ xa những cái tên khác như Splunk (hạng 14) hay Solr (hạng 24).
Sự phổ biến của Elasticsearch dẫn đến rất nhiều người tìm hiểu, nhiều công ty công nghệ áp dụng, cũng như rất nhiều bài viết hướng dẫn cách sử dụng. Tuy nhiên, để có thể hiểu sâu và thành thạo về Elasticsearch một cách chuyên nghiệp cũng không phải là điều đơn giản. Mình cũng đã mất nhiều thời gian trong việc tổng hợp thông tin và áp dụng thực chiến. Chuỗi bài viết Elasticsearch Zero to Hero này của mình hi vọng sẽ giúp mọi người dễ dàng tìm hiểu và tiếp cận hơn, thời gian chính là vàng bạc mà! 🤣
A. Giới thiệu chung
Để tăng tầm hiểu biết, chúng ta cũng sẽ lược nhanh qua một số thông tin quan trọng về Elasticsearch:
- Là Search Engine #1 thế giới. Phát triển bằng Java, dựa trên Apache Lucense.
- Tiền thân là Compass - Java Search Engine Framework (2004).
- Được phát hành phiên bản đầu tiên năm 2010, thuộc công ty Elastic
- Là một trong những sản phẩm Open Source cùng Logstash, Kibana, Beats,..
Trong hình trên, chúng ta có :
- Beats: Công cụ truyền dữ liệu từ nguồn tới Logstash hoặc Elasticsearch (single-purpose data shippers).
- Logstash: Nơi xử lý, chuyển đổi dữ liệu và truyền về Elasticsearch
- Elasticsearch: Tâm điểm của chúng ta. Nơi lưu trữ tập trung dữ liệu của bạn để tìm kiếm và phân tích.
- Kibana: Công cụ phân tích, hiển thị dữ liệu từ Elasticsearch một cách trực quan dễ sử dụng. Ngoài ra mình cũng không rõ có phải theo trend là các công ty công nghệ nước ngoài thường gắn với động vật hay không, nhưng bộ 3 sản phẩm nổi tiếng nhất Elasticsearch - Logstash - Kibana hay được gọi tắt là ELK cũng là nai sừng tấm.
Ưu điểm:
- Mã nguồn mở, hoàn toàn miễn phí, cộng đồng phát triển lớn.
- Tốc độ truy vấn nhanh, kể cả các truy vấn phức tạp.
- Hỗ trợ full-tex search: tách từ, tách câu, tạo chỉ mục cho dữ liệu.
- Tìm kiếm mờ (fuzzy), tự động hoàn thành (autocomplete) giúp tìm kết quả kể cả khi sai chính tả.
- Chạy trên server riêng, tương tác qua RESTful API, có thể tích hợp với hầu hết mọi hệ thống.
- Dữ liệu lưu dạng JSON, rất linh hoạt trong trường hợp dữ liệu thường xuyên thay đổi cấu trúc.
- Khả năng mở rộng, tính sẵn sàng cao do dựng theo mô hình cluster.
Nhược điểm:
- Có đầy đủ các nhược điểm của NoSQL.
- Không phù hợp với dữ liệu phải chỉnh sửa nhiều.
- Không hỗ trợ transaction, không có ràng buộc quan hệ dẫn đến dữ liệu có thể sai.
B. Hướng dẫn cài đặt
Đối với việc cài đặt Elasticsearch nói riêng, hay bất kỳ thứ gì nói chung, không chỉ trên Internet mà ngay cả ở Viblo này cũng đã có rất nhiều bài chia sẻ. Mình tự cảm thấy việc hướng dẫn lại hơi dư thừa. Chúng ta cũng có rất nhiều cách thức cài đặt, từ trực tiếp tới gián tiếp. Nếu bạn là người mới, mình nhờ bạn tìm kiếm trên 1 bài viết khác (xem như +1 view cho các tác giả khác). 🤣 Tuy nhiên, mình cũng để sẵn docker-compose.yaml của Elasticsearch ở đây cho mọi người tham khảo. Hiện phiên bản mình giới thiệu mọi người là phiên bản 7.10 nhé! Có quà tặng kèm thêm Kibana luôn.
version: "3.0"
services: elasticsearch: container_name: es-container image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0 environment: - xpack.security.enabled=false - "discovery.type=single-node" networks: - es-net ports: - 9200:9200 kibana: container_name: kb-container image: docker.elastic.co/kibana/kibana:7.10.0 environment: - ELASTICSEARCH_HOSTS=http://es-container:9200 networks: - es-net depends_on: - elasticsearch ports: - 5601:5601
networks: es-net: driver: bridge
Sau khi mọi người cài đặt, truy vấn tới Elasticsearch sẽ ở đường dẫn http://localhost:9200. Nếu bạn truy cập trên trình duyệt như thế này là thành công.
Ngoài ra, chúng ta đã cài thêm Kibana - một nền tảng open source phân tích, hiển thị dữ liệu từ Elasticsearch một cách trực quan dễ sử dụng. Kibara được cấu hình chạy ở đường dẫn http://localhost:5601/. Khi bạn truy cập sẽ thấy như sau:
Phần tiếp theo, chúng ta sẽ đi chi tiết về cách hoạt động của Elasticsearch, để hiểu cơ chế lưu trữ và lý do tại sao "Nhanh như Elasticsearch!"