Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LegalForce社での全文検索インフラ活用事例

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for aibou aibou
February 18, 2021

 LegalForce社での全文検索インフラ活用事例

Avatar for aibou

aibou

February 18, 2021
Tweet

More Decks by aibou

Other Decks in Programming

Transcript

  1. ⾃⼰紹介 u 浜地亮輔(はまじ りょうすけ) u 株式会社LegalForce(2020年9⽉〜 u Twitter ID: @aibou

    u Elasticsearch歴︓4年ぐらい u 前々職でニュース記事の検索インフラ構築・運⽤ u AWS OpsWorks(EC2、Managed Chef) u 趣味︓NFL観戦🏈、クライミング
  2. 検索機能の開発担当陣 u Luceneのコミッターを含めた強⼒エンジニア陣 u 独⾃にプラグイン開発して本番投⼊ u 事業要望に沿ってクエリチューニング u 顧客からのヒアリングを元に実装したり u

    事業の温度感としても検索機能はかなり⾼い u ただインフラ周りはまだまだ発達途上 u が⽚⼿間で⾒てる Luceneのコミッターの⼈ とある⽇のとある検索機能開発者からのPR
  3. 製品ごとのESクラスタ ECS (on EC2) GKE 条⽂検索⽤クラスタ キーワード補完⽤クラスタ Ver 7.9.1 ・analysis-kuromoji

    ・analysis-icu Ver 7.9.1 ・analysis-kuromoji-completion (⾃作プラグイン) 条⽂検索⽤クラスタ Ver 7.9.1 ・analysis-kuromoji ・analysis-icu
  4. クラスタ構成と分割の理由 u クラスタ構成 u master, data, client の3roleに分割 u 負荷分散、マシンリソース最適化のため

    u クラスタ分割の理由 u 保持してるデータの質や機能品質が異なるため 機能 アクセス頻度 障害時の品質影響 情報資産の重要度 条⽂検索⽤(LF) 中 中 ⾼ 条⽂検索⽤(MA) ⾼ ⾼ ⾼ キーワード補完⽤(LF) ⾼ 低 低 Master data client x3 x2 x3
  5. コンテナの理由 u 構築後に⼊社したので詳しい経緯はわからず・・・ u オペレーション上楽だったところ u ESのパラメータを環境変数で設定可能 u k8sではStatefulSetを使うことでクラスタアップグレードが容易 u

    ECSは不可能ではないがヘルス率の制御が職⼈芸になりうる u それでも怖いので結局ひとつずつタスク⽌めてる u コンテナ・仮想マシンハイブリッド構成はいいかも u masterはk8s、dataは仮想マシンなど u client, ingest等データを持たないものはコンテナとの親和性⾼そう
  6. INDEX運⽤ u 条⽂検索⽤クラスタ u 1 INDEX = 1 顧客 u

    1 INDEX = 1shard 3replica u = 顧客が1社増えると3shard増える u 700社超えたので・・・ u とはいえ1INDEXあたりの容量はそこまで u 解約した顧客のデータはINDEXごと削除 u 運⽤はメチャクチャ楽 u ただし︓1node 1000shard超える運⽤は推奨されていない u 超えそうならdataノードを追加してシャードを分散させる u とはいえ顧客・ユーザ数等に相関してINDEX増やす設計は⾒直したほうが良さそう 毎時のsnapshotでメチャクチャ負荷かかってる 資料作成中時点のシャード数 (2xxx shard
  7. スナップショット肥⼤化 u elasticsearch-curator を使ってスナップショットを取得・S3/GCSに保管 u 毎時取得・全INDEX u 製品のホワイトペーパーに「1時間に1回取得」と明記 u =毎時700個以上のsnapshotオブジェクトが出来上がっていく

    u とある⽇から︓スナップショット取得タイミングで警告⽂が頻出 u AWSの条⽂検索クラスタ u オブジェクト数が300万個 u 古いスナップショットを消していない
  8. スナップショット肥⼤化 u S3バケット向き先切り替えでリフレッシュ u curatorからSnapshot Lifecycle Management(SLM)に移⾏ u Elasticsearch 7.5から利⽤可能

    u スナップショット作成・削除の設定 u (スナップショット⾃動化のために) 今後はCurator使わなくてOK { “schedule”: “0 */1 * * * ?”, “name”: “<snapshot-{now/h}>”, “repository”: ”${s3_bucket}", ”config": { "indices": ["internal_*"], "ignore_unavailable": false, "include_global_state": false }, "retention": { "expire_after": "90d" } } SLMの設定内容