Slide 1

Slide 1 text

LegalForce社での全⽂検索 インフラ活⽤事例 2021年02⽉18⽇

Slide 2

Slide 2 text

⾃⼰紹介 u 浜地亮輔(はまじ りょうすけ) u 株式会社LegalForce(2020年9⽉〜 u Twitter ID: @aibou u Elasticsearch歴︓4年ぐらい u 前々職でニュース記事の検索インフラ構築・運⽤ u AWS OpsWorks(EC2、Managed Chef) u 趣味︓NFL観戦🏈、クライミング

Slide 3

Slide 3 text

株式会社LegalForce 提供製品の紹介 ※ 2021年2⽉時点で導⼊社数700突破 https://legalforce-cloud.com/ 契約書レビュー⽀援 契約書管理

Slide 4

Slide 4 text

製品の検索機能 契約書レビュー⽀援 契約書管理 条⽂検索機能 キーワード補完機能 条⽂検索機能 それぞれElasticsearchを利⽤して検索インフラを実現している

Slide 5

Slide 5 text

検索機能の開発担当陣 u Luceneのコミッターを含めた強⼒エンジニア陣 u 独⾃にプラグイン開発して本番投⼊ u 事業要望に沿ってクエリチューニング u 顧客からのヒアリングを元に実装したり u 事業の温度感としても検索機能はかなり⾼い u ただインフラ周りはまだまだ発達途上 u が⽚⼿間で⾒てる Luceneのコミッターの⼈ とある⽇のとある検索機能開発者からのPR

Slide 6

Slide 6 text

製品ごとの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

Slide 7

Slide 7 text

クラスタ構成と分割の理由 u クラスタ構成 u master, data, client の3roleに分割 u 負荷分散、マシンリソース最適化のため u クラスタ分割の理由 u 保持してるデータの質や機能品質が異なるため 機能 アクセス頻度 障害時の品質影響 情報資産の重要度 条⽂検索⽤(LF) 中 中 ⾼ 条⽂検索⽤(MA) ⾼ ⾼ ⾼ キーワード補完⽤(LF) ⾼ 低 低 Master data client x3 x2 x3

Slide 8

Slide 8 text

コンテナの理由 u 構築後に⼊社したので詳しい経緯はわからず・・・ u オペレーション上楽だったところ u ESのパラメータを環境変数で設定可能 u k8sではStatefulSetを使うことでクラスタアップグレードが容易 u ECSは不可能ではないがヘルス率の制御が職⼈芸になりうる u それでも怖いので結局ひとつずつタスク⽌めてる u コンテナ・仮想マシンハイブリッド構成はいいかも u masterはk8s、dataは仮想マシンなど u client, ingest等データを持たないものはコンテナとの親和性⾼そう

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

スナップショット肥⼤化 u elasticsearch-curator を使ってスナップショットを取得・S3/GCSに保管 u 毎時取得・全INDEX u 製品のホワイトペーパーに「1時間に1回取得」と明記 u =毎時700個以上のsnapshotオブジェクトが出来上がっていく u とある⽇から︓スナップショット取得タイミングで警告⽂が頻出 u AWSの条⽂検索クラスタ u オブジェクト数が300万個 u 古いスナップショットを消していない

Slide 11

Slide 11 text

スナップショット肥⼤化 u S3バケット向き先切り替えでリフレッシュ u curatorからSnapshot Lifecycle Management(SLM)に移⾏ u Elasticsearch 7.5から利⽤可能 u スナップショット作成・削除の設定 u (スナップショット⾃動化のために) 今後はCurator使わなくてOK { “schedule”: “0 */1 * * * ?”, “name”: “”, “repository”: ”${s3_bucket}", ”config": { "indices": ["internal_*"], "ignore_unavailable": false, "include_global_state": false }, "retention": { "expire_after": "90d" } } SLMの設定内容

Slide 12

Slide 12 text

ES運⽤で今後やっていきたいこと u 運⽤効率化 u セキュリティ向上 u パフォーマンス向上 u etc... バックログがたまり始めている様⼦

Slide 13

Slide 13 text

募集 u やりたいことがメチャクチャ多いので助けてください︕ u https://www.wantedly.com/companies/legalforce u https://www.wantedly.com/projects/556362