2016-04-14 23 views
5

Tôi rất mới với elasticsearch và quy mô của nó, và tôi có một câu hỏi tôi thậm chí không biết cách tiếp cận.thiết lập máy chủ Elasticsearch để xử lý dữ liệu từ microservices

Đây là tình huống:

Có một số máy chủ có ứng dụng dịch vụ microsoft Rails. Mỗi người trong số họ nhận được từng mẩu dữ liệu khá lớn của riêng mình (cụ thể hơn là tổng hợp các bài đăng từ các mạng xã hội khác nhau - vì vậy các trường tìm kiếm có thể lập chỉ mục giống nhau trong tất cả các cơ sở dữ liệu).

Tôi cần tìm giải pháp cho phép giữ dữ liệu ở nơi hiện tại và thiết lập máy chủ elasticsearch dành riêng cho tìm kiếm thông qua nhiều cơ sở dữ liệu mà không cần ứng dụng Rails tương ứng bật máy chủ tìm kiếm này. Nó có khả năng có nghĩa là thiết lập ES trên mỗi máy chủ khác, xác định các mẫu tìm kiếm ở đó nhưng thực hiện tìm kiếm nhiều mô hình trên một máy chủ hoàn toàn khác.

Mục tiêu cuối cùng của các thao tác này sẽ gửi toàn bộ đối tượng ActiveRecord/hoặc tất cả các thuộc tính liên quan đến ứng dụng chính.

Thậm chí có thể đạt được không? Có lẽ ai cũng có vấn đề tương tự?

Tôi hơi lạc lõng về cách bắt đầu với nó.

Trả lời

3

Câu hỏi này hơi rộng, nhưng tôi nghĩ rằng ít nhất tôi có thể chỉ cho bạn đúng hướng từ những gì tôi hiểu. Trước tiên, hãy để tôi bắt đầu bằng cách nêu rõ vấn đề của bạn khi tôi hiểu nó.

Bạn có nhiều cơ sở dữ liệu được tạo bởi từng dịch vụ microservice của riêng mình. Mỗi cơ sở dữ liệu chứa thông tin tương tự mà bạn muốn có thể tìm kiếm (tức là tác giả, nội dung, tiêu đề, v.v.) Bạn muốn một cụm elasticsearch có quyền truy cập vào dữ liệu trong tất cả các cơ sở dữ liệu đó và có thể trả về kết quả bao gồm đúng cơ sở dữ liệu và tài liệu khớp với tìm kiếm.

Elasticsearch rất mạnh khi xử lý các trường hợp phức tạp như thế này. Vì tất cả dữ liệu của bạn có cấu trúc và trường tương tự, bạn chỉ có thể sử dụng một chỉ mục có các trường bổ sung trên đó để lưu trữ tài liệu DB nào đến và ID tài liệu từ DB đó. Điều này sẽ cho phép bạn thực hiện các tìm kiếm như 'Cung cấp cho tôi mỗi bài đăng được thực hiện bởi William Shatner trên 3 mạng xã hội này'.

Bạn sẽ cần thêm một số chức năng bổ sung để thực hiện công việc này. Trước tiên, bạn cần một cơ chế để lấy dữ liệu từ cơ sở dữ liệu vào chỉ mục tìm kiếm. Trong nhóm của tôi, chúng tôi sử dụng một IndexingService riêng biệt để biết cách đọc luồng sự kiện và gửi dữ liệu trực tiếp đến chỉ mục ES. Bạn chỉ cần quyết định chiến lược lập chỉ mục (nghĩa là bạn cập nhật chỉ mục với các mục nhập mới bao lâu một lần?). Thứ hai, bạn sẽ cần một số logic ở phía máy khách để lấy kết quả tìm kiếm thô và truy xuất các mục có liên quan từ cơ sở dữ liệu.

Đây chỉ là một cách để giải quyết vấn đề của bạn. Thay vào đó, nếu bạn muốn một cách tiếp cận cho phép bạn duy trì một chỉ mục khác nhau cho từng mạng xã hội, nhưng vẫn có một vị trí trung tâm, bạn có thể tìm kiếm trên tất cả những gì tôi đề xuất xem xét sử dụng Elasticsearch Tribe Nodes. Về cơ bản, nó là một nơi duy nhất để gửi tìm kiếm biết về mọi cụm tìm kiếm và cách tương tác với chúng để trả lại kết quả tìm kiếm hợp nhất.

Cách tốt nhất để học elasticsearch là chỉ cần tạo cụm và chạy và bắt đầu thử nghiệm! Chúc may mắn!

+0

Cảm ơn bạn @ chris-franklin, đó chính là vấn đề.Là dịch vụ lập chỉ mục bạn đề cập đến một ứng dụng riêng biệt lập chỉ mục tất cả các cơ sở dữ liệu bên ngoài và sau đó thực hiện tìm kiếm? – marinados

+0

Bản thân tôi đã suy nghĩ về việc tạo một ứng dụng tìm kiếm trỏ đến nhiều DB từ xa, lập chỉ mục tất cả, thực hiện tìm kiếm nhiều mô hình và trả về mọi thứ thông qua API. Nó là một chiến lược xấu? Và tôi sẽ xem xét các nút Tribe, điều đó có vẻ đầy hứa hẹn! – marinados

+0

Dịch vụ lập chỉ mục của chúng tôi là một dịch vụ microservice khác trong kiến ​​trúc của chúng tôi. Nó xử lý dữ liệu đẩy vào Elasticsearch. Chúng tôi có một microservice riêng biệt xử lý việc xây dựng các truy vấn tìm kiếm, gửi chúng tới ES và sau đó trả lại kết quả theo định dạng mà UI của chúng tôi có thể dễ dàng sử dụng. Nhu cầu của bạn sẽ trực tiếp ảnh hưởng đến mức độ phức tạp của kiến ​​trúc này. Nhu cầu của chúng tôi có nghĩa là chúng tôi cần các dịch vụ có khả năng mở rộng riêng để xử lý từng bước. –

Các vấn đề liên quan