Apache Solrは、オープンソースの全文検索エンジンとして、現時点でデファクトスタンダートとなっている製品です。鉄飛テクノロジーのファイルサーバ検索システム「FileBlog」もApache Solrを組み込んで動作しています。

分散検索システムによるスケールアウトの目的

 Apache Solr が標準で用意するスケールアウト機能がSolrCloudです。

 コンピュータシステムで、大量のデータを対象とする処理の性能を引き上がるための手段として、複数のマシンを並べて処理を行うことを「スケールアウト」と言います。(なお、単一マシンにおいて、CPUのグレードアップやメモリの増設/ディスク増設によって性能を引き上げる「スケールアップ」と対比される言葉です。)

 検索システムにおいてのスケールアウトの目的は、下記の2点となります。

  1. 複数マシンを束ねて大量リソースを利用可能にし・・・
    • 対象ドキュメントの数量が大きい大規模検索を可能にする、巨大な検索インデックスを構築・維持可能にするため。
      • 実際に1台のサーバに配置できないような巨大な全文検索インデックスも、shardと呼ばれる単位に分割して、複数台のサーバに分散配置することを可能にしています)
    • 多数のユーザからの、同時多数検索クエリ要求に速やかに応答するため。
      • 1台のサーバでは応答性能に限界がありますが、インデックスのデータを分散配置させた複数サーバによって、同時に多数のクエリ要求に応答できるようになります)
  2. 検索インデックスのデータを複製して分散配置する、「冗長化」によって・・・
    • ハードウェア障害による検索システムの停止リスクを小さくするため。
      • インデックスデータのレプリカを持つノードを複数サーバに分散配置することで、いずれかのノードが障害で停止してもシステム全体は無停止で稼働しつづけるように構成することが可能です)

目的合理性のない分散は無駄

 「SolrCloudを使って、複数マシンの処理を分散する」と言うと、何か1台のマシンでやるよりもすごいことのように聞こえるかもしれません。しかし、1台で可能なら、1台で実現するほうが、間違いなく簡単で安上がりです。
例えば、下記のような「無意味なスケールアウト」はやめましょう。

「スケールアップできるなら、2台に分割せず増強すべき」

近年のIT技術の進歩は著しいものです。普通のPCサーバに詰めるメインメモリの量も、ずいぶんと大きくなりました。たとえば、2018年1月現在、普通の1Uラックサーバでもメモリスロットが16本はあるでしょう。32GB✕16=512GBあるいは64GB✕16=1TBのメモリを搭載できる計算です。64GBメモリのマシンを8台調達するより、512GBメモリのマシン1台で済ませたほうが当然、安上がりです。

「仮想化環境でスケールアウトするのは、本末転倒」

もともと処理負荷の比較的小さかった多数の物理サーバをそれぞれ仮想マシンとして、少数の高性能な(スケールアップされた)サーバ上に集約する、というのが「仮想化」環境構築の本来の動機です。1台で処理できない高負荷処理を多数のハードウェアで実現する「スケールアウト」とは完全に逆のアプローチです。

 既存の仮想サーバインフラ上に、あえて複数の仮想マシンを構築して処理を分散させるよりも、できるだけ高性能の仮想マシン1台を構築して処理させたほうが高性能になる可能性が高いでしょう。利用可能な総リソースが同じであるので、あえて分散させる理由はあまり見当たりません。

「データアクセス(ファイルサーバ)が遅ければ、がんっばっても性能は出ません」

ファイルサーバ検索エンジンの性能は、ファイルサーバの性能に依存します。ファイルサーバ上のデータに対するアクセス性能が低ければ、検索エンジンのインデックス構築の所要時間はどうしても長くなってしまいます。ファイルサーバのディスク性能にかぎらず、ファイルサーバと検索サーバ間のネットワーク性能も、ファイルサーバ全文検索システムの実用性能に大きく影響します。

 たとえば、ファイルサーバと検索サーバ間のネットワークが1Gbpsの環境で、どうしても  検索インデックス構築が遅いという場合があるかもしれませんが、10GbEネットワークが
普及すれば、このボトルネックが一気に解消されることでしょう。

 また、全文検索エンジンは起動時にインデックスデータの読取りを行うため、インデックスのデータ量に比例した(再)起動時間が必要です。数千万文書のインデックスをハードディスクから読み取るだけで、起動処理に数十分を要することもありえますが、インデックスデータがSSD上に格納されていれば、その数十分を数分に短縮できたりするのです。
 
 SolrCloudによる分散構成は、性能問題に対する特効薬ではありません。時間が許すなら、安くて遅いディスク・ネットワークでも構いませんが、予算が許すなら、速いディスク/速いネットワークを選択して後悔することは無いでしょう。

ご質問・ご相談などありましたら
お気軽にお問い合わせください