狠狠撸

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

More Related Content

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

Editor's Notes

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