2016-04-14 2 views
5

私はelasticsearchとそのスケーリングの新機能です。私はどのようにアプローチするのかわからない質問があります。 Railsのmicroserviceアプリケーションと複数のサーバがありませmicroservicesからデータを処理するためのElasticsearchサーバーを設定する

はここの状況です。それぞれがそれぞれ独自のデータを取得しています(具体的には、異なるソーシャルネットワークからの投稿を集約しているため、インデックス可能な検索フィールドはすべてのデータベースで同じです)。

現在の場所にデータを保存し、それぞれのRailsアプリケーションがこの検索サーバーを有効にせずに複数のデータベースを検索するためだけに専用のelasticsearchサーバーを設定するソリューションを見つける必要があります。これは、潜在的には、他の各サーバーでESを設定し、そこに検索パターンを定義することですが、完全に異なるサーバーで複数モデルの検索を行うことを意味します。

これらの操作の最終目標は、ActiveRecordオブジェクト全体または関連するすべての属性をメインアプリケーションに送信することです。

達成することも可能ですか?誰も同じような問題を抱えているのでしょうか?

私はそれをどのように使い始めるかについて少し迷っています。

答えて

3

この質問は少し広範ですが、少なくとも私が理解しているところから正しい方向にあなたを指摘できると思います。まず、私が理解しているようにあなたの問題を述べて始めましょう。

それぞれ独自のマイクロサービスによって複数のデータベースが設定されています。各データベースには、検索できるようにしたい類似の情報(作成者、本文、タイトルなど)が含まれています。すべてのデータベースのデータにアクセスできる弾性検索クラスタが必要で、正しいデータベースと検索に一致する文書

このような複雑なケースを処理する場合、Elasticsearchは非常に強力です。すべてのデータが同様の構造とフィールドを持っているので、追加のフィールドを持つ1つのインデックスを使用して、ドキュメントの元のDBとそのDBのドキュメントIDを保存することができます。これにより、「これらの3つのソーシャルネットワークでWilliam Shatnerが投稿したすべての投稿を私に渡してください」などの検索を実行できます。

この機能を実現するには、いくつかの追加機能が必要です。まず、データベースから検索インデックスにデータを取得するメカニズムが必要です。私のチームでは、イベントストリームを読み込み、ライブデータをESインデックスに送信する方法を知っている別のIndexingServiceを使用しています。インデックス作成戦略(インデックスを新しいエントリで更新する頻度)を決めるだけで済みます。次に、生の検索結果を取得し、データベースから関連するエントリを取得するために、クライアント側でいくつかのロジックが必要になります。

これは、問題を解決する単なる方法です。代わりに、それぞれのソーシャルネットワークごとに異なるインデックスを維持できるアプローチが必要だが、中央の場所がまだある場合は、それらをすべて検索することができます。Elasticsearch Tribe Nodesの使用を検討することをお勧めします。基本的には、すべての検索クラスタについて知っている検索を提出する単一の場所であり、それらとやり取りして統一された検索結果を返す方法です。

elasticsearchを学ぶ最も良い方法は、クラスターを稼働させて実験を開始することです。がんばろう!

+0

ありがとうございました@ chris-franklin、それはまさに問題です。すべての外部データベースのインデックスを作成して検索を実行する個別のアプリケーションと言われるインデックスサービスですか? – marinados

+0

自分自身私は、複数のリモートDBを指し示す検索アプリケーションを作成し、それらをすべて索引付けし、複数モデルの検索を実行し、APIを通じてすべてを戻すことを考えていました。それは悪い戦略ですか?そして私は部族のノードを調べます、それは有望そうです! – marinados

+0

私たちのインデックスサービスは、私たちのアーキテクチャのもう一つのマイクロサービスです。それはElasticsearchへのデータの押し込みを処理します。 Googleには、検索クエリの作成、ESへの送信、そしてUIが簡単に使用できる形式で結果を返す処理を行う個別のマイクロサービスがあります。あなたのニーズは、このアーキテクチャーの複雑さに直接影響します。私たちのニーズは、各ステップを処理するために個別にスケーラブルなサービスが必要であることを意味します。 –

関連する問題