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

Webシステムの検索を300倍に高速化した話

 Webシステムの検索を300倍に高速化した話

第46回Elasticsearch勉強会
「Webシステムの検索を300倍に高速化した話」

Avatar for Hiroshi Yoshioka

Hiroshi Yoshioka

February 16, 2022
Tweet

More Decks by Hiroshi Yoshioka

Other Decks in Technology

Transcript

  1. 1 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    Webシステムの検索を300倍に高速化した話 Acroquest Technology株式会社 Senior Consultant / Full stack Elastic Certified 吉岡 洋 @Hirosh_Yoshioka Elasticsearch勉強会
  2. 自己紹介 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    • アクロクエストテクノロジー株式会社 • 吉岡 洋(@Hirosh_Yoshioka) • 業務:Elastic Stackのコンサルティング全般 (全文検索/ログ分析/セキュリティ分析/可視化) • その他 ◦ 世界初のElastic Certified Engineer (Elastic Certification 3種取得) ◦ 日本初のElastic社認定コンサルタント ◦ Elastic Contributor Silver(日本1位) ◦ Elastic User Group Tokyo運営
  3. Acroquest Technology株式会社 Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. 1. オープンな社風が特徴のITベンチャー ① 働きがいのある会社ランキング日本1位(3回受賞) ② 『日本でいちばん大切にしたい会社』大賞 審査委員会特別賞 ③ 組織コンサルティング事業を展開 2. データ活用ビジネス ① Elastic Stack活用コンサルティング – 設計/構築/性能改善/運用支援など – Elastic認定資格者:8名 ② IoTデータ分析プラットフォーム ③ 機械学習/AI
  4. 目次 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    1. RDB検索の性能劣化 2. システム構成 3. 導入時のポイント 4. 性能改善効果
  5. システム状況(Before) Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    1. 検索が遅過ぎる • タスク管理システムでMySQLを使用 • 日々データが増加。3200万件。 • MySQLの検索が遅い(30~60秒) • 7000回/日の検索のうち、1割以上が 60秒以上かかってタイムアウト。 2. 性能改善に対する障害 • システム拡張の繰り返しでSQLが複雑化。 改修難易度が高い。 • DBスキーマから見直す必要があるが、 アプリ改修量も多くなり高コストになる
  6. RDB検索高速化サービス Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    1. Webシステムの検索速度を数十倍に • 検索速度の向上/業務効率大幅アップ 2. アプリ改修量を最小限に • 既存のシステム構成を大きく変更せず、 改修量を抑えることでリスクを低減 3. 日本語特有の表記ゆれに対応 • 旧字の表記/送り字の違いなど、 日本語特有の表記ゆれに対して、 適切なチューニングを実施。 https://www.endosnipe.com/ solution_rdbsearch
  7. システム構成(Elastic Stack導入前) Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. Webシステム WEBサーバ ①検索 ⑤検索結果 取得 ④SQL発行 RDB DBサーバ
  8. システム構成(Elastic Stack導入後) Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. Webシステム Logstas h WEBサーバ Elastic Stack ①検索 (2)データ取得 (1)定期SQL発行 (3)データ投入 ②クエリ発行 ③検索結果(ID) 取得 ⑤検索結果 取得 ④SQL発行 (ID指定) RDB DBサーバ Elasticsearch Logstash
  9. Elastic Stack導入時のポイント① ~検索機能のみをElasticsearchに委譲する~ Copyright © Acroquest Technology Co., Ltd. All

    rights reserved. 1. 改修コスト ① DBスキーマに修正が発生するとSQL/アプリ改修が発生する(高コスト) 2. アプローチ ① RDBをリプレースするのではなく、検索機能のみをElasticsearchに委譲する ② RDBからElasticsearchにデータ同期を行い、Elasticsearchを検索する。 ③ DBスキーマの修正は不要。アプリの改修は「検索処理」のみ。
  10. Webシステム Logstash WEBサーバ Elastic Stack ①検索 (2)データ取得 (1)定期SQL発行 (3)データ投入 ②クエリ発行

    ③検索結果(ID) 取得 ⑤検索結果 取得 ④SQL発行 (ID指定) RDB DBサーバ Elasticsearch Logstash • Logstashが定期的にSQLを発行し、 更新データをRDBから取得。 • Elasticsearchにデータ投入 システム構成(Elastic Stack導入後) Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  11. Elastic Stack導入時のポイント② ~Logstashを利用して定期的にデータ同期を行う~ Copyright © Acroquest Technology Co., Ltd. All

    rights reserved. 1. RDBからのデータ取得(jdbc input) ① 定期的にSQLを発行してデータを取得(発行時刻/間隔を指定可能) ② SQLの条件文にレコードの更新時刻を利用する(更新レコードのみ同期) ③ 物理削除のレコードは同期できないので注意(論理削除にのみ対応可) 2. データ投入(output elasticsearch) ① フィールド値から一意となるDocument IDを生成すること。 ✓ デフォルトではDocument IDはランダム文字列。 ✓ 更新/削除時には対象ドキュメントを特定する必要がある。 ② 削除レコードを判定できるフラグをSQLで取得する必要あり。 ✓ 削除時はactionパラメータを「delete」にする。
  12. Elastic Stack導入時のポイント③ ~検索に必要な最小限のデータのみElasticsearchに同期する~ Copyright © Acroquest Technology Co., Ltd. All

    rights reserved. 1. 検索性能を向上させるヒント ① インデックス(Shard)を小さくする ② _source(検索結果)を小さくする ※理由:キャッシュが乗りやすい、_source取得/検索結果マージのコストが下がる 2. チューニングアプローチ ① 検索に必要なデータ:同期する ② 画面表示にのみ必要なデータ:同期しない ③ ElasticsearchはレコードIDのみを返却し、画面表示に必要なデータは RDBから取得する
  13. 【再掲】システム構成(Elastic Stack導入後) Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. Webシステム Logstas h WEBサーバ Elastic Stack ①検索 (2)データ取得 (1)定期SQL発行 (3)データ投入 ②クエリ発行 ③検索結果(ID) 取得 ⑤検索結果 取得 ④SQL発行 (ID指定) RDB DBサーバ Elasticsearch Logstash
  14. 改善効果(タスク管理システム/MySQL) Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    3200 万件 60秒 →200ms 2480 時間 データ件数 業務メールデータを蓄積。 1日6万件増加。 検索時間の変化 Elastic Stack導入前は 1日7000回の検索のうち 1割以上がタイムアウト。 導入後は一切発生せず。 性能改善 検索待ち時間が大幅短縮。 月2480時間のコスト削減 に成功
  15. まとめ Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    1. 「RDB検索高速化サービス」を活用すると、DBスキーマを修正せずに 「アプリ改修コストを抑えたRDB検索の高速化」が可能 2. RDB検索の高速化のポイント ✓ 検索機能のみをElasticsearchに委譲する ✓ Logstashを利用して定期的にデータ同期を行う ✓ Elasticsearchには検索に必要な最小限のデータのみ同期する 3. 性能改善効果 ✓ 数十秒かかる検索が1秒未満になる改善効果が得られた