Successfully reported this slideshow.
Your SlideShare is downloading. ×

kintone のレコード絞り込み置き換え事例の紹介

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 30 Ad

More Related Content

Slideshows for you (20)

Similar to kintone のレコード絞り込み置き換え事例の紹介 (20)

Advertisement

More from Ryo Mitoma (11)

Recently uploaded (20)

Advertisement

kintone のレコード絞り込み置き換え事例の紹介

  1. 1. kintone のレコード絞り込み 置き換え事例の紹介 @mitomasan 2019/06/25 Elasticsearch勉強会 大阪
  2. 2. 自己紹介 • @mitomasan • サイボウズ開発本部 • サーバーサイドエンジニア • Yakumoプロジェクト所属 • kintone.com を AWS に移行するプロジェクト
  3. 3. サイボウズ • コラボレーションツール事業 • チーム・コラボレーションを支援する ツールを開発・提供しています。 • クラウドサービス(cybozu.com) • パッケージソフトウェア
  4. 4. スケジューラ
  5. 5. ワークフロー
  6. 6. メールアプリ
  7. 7. Webデータベース
  8. 8. cybozu.com 販 売 管 理 シ ス テ ム 管理系システム グ ル ー プ ウ ェ ア グ ル ー プ ウ ェ ア 中 堅 大 規 模 向 け メ ー ル 問 い 合 わ せ 管 理 Web デ ー タ ベ ー ス
  9. 9. cybozu.com 販 売 管 理 シ ス テ ム 管理系システム グ ル ー プ ウ ェ ア グ ル ー プ ウ ェ ア 中 堅 大 規 模 向 け メ ー ル 問 い 合 わ せ 管 理 Web デ ー タ ベ ー ス
  10. 10. kintone • スキーマを自由に設計できるWebデータベース (=システムの稼働中にテーブルにあたるものを 定義する) • スキーマ不定データが扱える ドラッグ&ドロップで データベースの項目を 設計・変更できる
  11. 11. レコードの絞り込み
  12. 12. kintone の絞り込みの仕組み RDB 送信 AST (抽象構文木) 変換独自クエリ SQL変換 実行 結果セット (生データ) 結果セット (オブジェクト) 変換変換 返却返却 JSON
  13. 13. 湧き上がる問題 • データを絞り込んでも、何分も結果が返ってこない • 絞り込みのためのSQLが読みにくく、チューニングが大変 • チューニングのためにさらにSQLが膨れ上がったり パフォーマンスと保守性の低下。
  14. 14. 新しいアーキテクチャ RDB 送信 変換独自クエリ IDリスト 結果セット (生データ) 結果セット (オブジェクト) 変換変換返却 JSON QueryDSL AST (抽象構文木) 実行 返却
  15. 15. 発生するトレードオフ • インデックスの更新が非同期 • RDBMS上のデータをもとにインデックスを更新するため トランザクションが同一ではない。 Elasticsearchが絞り込みで返した値と RDBMSに入っているデータにズレが発生する 時間がある ① ④ データテーブル RDB ③ インデックス ② 同 期
  16. 16. 対策 • 同期が遅延しているかどうかを管理し、 遅延が発生している状況下では、 間違った絞り込み結果を返してないか プログラム側で再フィルタリングを行う ① ④ データテーブル RDB ③ インデックス ② 同 期 遅延が発生してるな? 俺もフィルタリングや
  17. 17. ベンチマーク結果 • 2,000万件のレコードを 絞り込む時間がいまの実装に 比べて大幅に短縮できた! ※ kintoneの絞り込みが改善できるかどうかという 観点で行ったベンチマークなので RDBMSとElasticsearchの機材スペック差 などは公平ではありません
  18. 18. 詳しくはこちら https://www.slideshare.net/RyoMitoma/kintone-73674134
  19. 19. ところでこの仕組み… • まだリリースされていません(上記の資料は 2017年…) • Elasticsearch クラスタを既存の運用基盤に 導入しようとしていたところ 大規模な基盤刷新プロジェクトが開始。 • 日本:アーキテクチャ刷新プロジェクト(Neco) • US:AWS移行プロジェクト(Yakumo) • 詳しくはブログ(Cybozu Inside Out)をチェック! • リリースされるのは上記の2プロジェクトで 作られた基盤が稼働し始めてから
  20. 20. Elasticsearch をどのように構築する? • 日本 • オンプレミスで自前運用 kubernetes 上に構築(予定) • US • マネージドサービスを利用 Amazon Elasticsearch Service (Amazon ES) お話しするのはこちら
  21. 21. Amazon ES AWS が提供する Elasticsearch のマネージドサービス • 🙆よいところ • マネージドサービス • 構築を自動化できる • AWSの他サービスと連携しやすい • 🙅自分たちに合わないところ • プラグインを入れることができない • 制限がなかなかキビシイ
  22. 22. 大事にしているところ • ミドルウェアを手順書をもとに 手動で構築するのではなく 宣言的に記述し理想状態に収束させる • CloudFormation で Amazon ES の設定を記述し リリースするたびにCDパイプラインで適用する • 自動化は常に動かしていないとすぐに古びてしまう
  23. 23. https://blog.cybozu.io/entry/2019/06/19/080000
  24. 24. Amazon ES で困った制限 • 独自のプラグインを入れることができない • 既存の kintone でトーカナイズの際の細かい仕様を 組み込みのプラグインの設定だけで吸収できなかった • HTTPペイロードの上限が最大でも100MB • Bulk API でインデクシングする時に ほどほどのサイズで分割する必要がある
  25. 25. Amazon ES で困った制限(番外) • 自動テストが特定の時間帯に失敗する • テストケース毎にインデックスを作成&削除 • Amazon ES は日次で自動でスナップショットを 取ってくれるがその間はインデックスの削除ができない。 • テストでは困るけど運用上の回避はそこまで困らない
  26. 26. Amazon ES で困った制限 • 60秒でタイムアウト • リクエストが60秒を超えると接続が切断される • 内部的にELBが使われているため • Amazon ES の制限で変更できない • リクエストを調整して60秒以内にする? • サービス的にトーカナイザの秘孔を突くようなドキュメントを 投げる可能性がありタイムアウト発生を防ぐことは困難 • Elasticsearch 内部ではエラーにならず処理を継続している • 処理が完了してから後続のリクエストを投げなければいけない • ELB がエラーを返すので Task の ID がわからない
  27. 27. X-Opaque-Id でいけるか? • リクエストヘッダに X-Opaque-Id ヘッダを付与するこ とで、Task APIを用いてエラーが返ってきたリクエス トの TaskId を探すことができる。 • https://www.elastic.co/guide/en/elasticsearch/reference/6.2/ta sks.html • (オパキューではなくオウペイクと読もう)
  28. 28. ダメでした うわー! エ ラ ー ハ ン ド リ ン グ Bulk API 実行時の Task IDは処理完了後の 成否が取れないみたい… よい対策知っている方教えてください
  29. 29. まとめ • kintone という製品での Elasticsearch の活用事例 • Amazon ES でのハマりどころと対策 • 要件によってはキビシイ時がある • ログをとりあえずざっと流し込んで使う分には最高
  30. 30. おしまい 便利な絞り込み やってやれないことはない Elasticsearch

Editor's Notes

  • 以上、ありがとうございました。

×