# データ品質 SLO ## 定義 データ品質 SLO とは、検索インデックスや推薦エンジンのようなデータ集約型サービスにおいて、可用性・レイテンシといった従来の「通信品質 SLO」では捉えられないデータ内容の正確性・一貫性・新鮮性・完全性・耐久性を定量的な目標として設定したものである。サービスが「動いている」ことと「正しいデータを返している」ことは別問題であり、後者を明示的に SLO 化する必要がある(Source: [[@2019__SREcon19EMEA__SLOs for Data-Intensive Services]])。 ### データ品質の主要次元 | 次元 | 説明 | 計測例 | |---|---|---| | **一貫性 (Consistency)** | 複数のデータノード・レプリカ間でデータが一致している割合 | 全データノードで同一クエリの結果が一致する予約の割合 | | **新鮮性 (Freshness)** | ソースシステムへの書き込みから検索サービスへ反映されるまでの時間 | 予約後 最長1分以内に検索サービスで出現する割合 | | **完全性 (Completeness)** | ストリーム処理によって欠落なくコンシューマーへ届く割合 | ストリームの予約イベントが Consumer に到達する割合 | | **耐久性 (Durability)** | データがアーカイブ・バックアップに正しく保存されている割合 | Hadoop MR でアーカイブされた予約の割合 | | **正確性 (Accuracy)** | データの内容が正しい割合 | — (定義困難として断念される場合がある) | ## 計測パターン ### 外部プローブ(合成モニタリング) プローブがソース DB(または最近の書き込み)を参照し、対象サービスで期待通りのデータが返ることを確認する。新鮮性・一貫性の計測に有効。 ``` プローブ → DB から最近の注文 ID を取得 → 検索サービスで全データノードにクエリ → 結果を比較して一致率・出現時間を計算 ``` ### サービス内部比較 ゲートウェイが複数のデータノードにクエリを発行し内部で比較する方式。外部 DB 参照なしにサービスの自己一貫性を計測できる。 ``` ゲートウェイ → DataNode-1, DataNode-2, DataNode-3 に同時クエリ → 結果を比較 → 一致率を SLI として記録 ``` (Source: [[@2019__SREcon19EMEA__SLOs for Data-Intensive Services]] p.12) ## Booking.com 検索サービスでの実例 | SLO | 計測方式 | 目標値 | |---|---|---| | データ一貫性 (第1案) | 外部プローブ → 全ノード比較 | 99.99% の予約が全データノードで一致 | | データ一貫性 (第2案) | ゲートウェイ内部比較 | 99.99% の検索結果が一貫 | | データ新鮮性 | 外部プローブ | 99.9% の予約が 最長1分以内に検索可能 | | 完全性 | ストリームコンシューマー + プローブ | — | | 耐久性 | Hadoop MR パイプライン | — | (Source: [[@2019__SREcon19EMEA__SLOs for Data-Intensive Services]]) ## データ品質 SLO が有効化する自動化 SLO が明確に定義されると、SLO 違反に対する自動化アクションの根拠が生まれる: - **自動緩和**: Freshness Probe が新鮮性 SLO 違反を検知 → 影響ノードへのトラフィックを自動停止。 - **自動修復**: Completeness Probe が欠損を検知 → Hadoop スナップショットから再処理して修復。 (Source: [[@2019__SREcon19EMEA__SLOs for Data-Intensive Services]] テキスト p.197–230) ## 横断的知見 - **可用性・レイテンシ SLO は「サービスが動いているか」を示すが、「正しいデータを返しているか」は示さない**: Booking.com の事例では、可用性・レイテンシ SLO を設定しても検索サービスのステークホルダーは無関心だった。彼らにとって重要なのはデータの品質であり、それが計測されていないことが問題の核心だった (Source: [[@2019__SREcon19EMEA__SLOs for Data-Intensive Services]])。 - **一貫性 SLO の計測方式は「外部 DB 参照型」と「サービス内部比較型」に大別される**: 外部プローブ型は正準データ(DB)との比較で絶対的な一貫性を測るが、ソースへのアクセスが必要。内部比較型はサービスの自己一貫性(レプリカ間の同一性)を測り、外部依存が少ない (Source: [[@2019__SREcon19EMEA__SLOs for Data-Intensive Services]])。 - **正確性(Accuracy)の SLO 定義は困難**: Booking.com は Accuracy/Durability SLO の定義を試みたが断念した。「何が正確か」の基準が曖昧なデータでは SLI の設計そのものが難しい (Source: [[@2019__SREcon19EMEA__SLOs for Data-Intensive Services]])。 ## 未解決の問い - 新鮮性 SLO「最長1分以内」は Booking.com の文脈では妥当だが、他のドメインではどのように目標値を決定するか。ユーザー体験との関係をどう測定するか。 - 複数のデータノードが存在する場合、「一貫性率」の分母は何か(クエリ数?予約数?ノードペア数?)。 - データ品質 SLO の違反はユーザー体験にどう影響するか。Error Budget の消費基準をどう設定するか。 - Accuracy SLO 定義の困難を乗り越える方法として、どのようなアプローチが考えられるか(e.g., A/B 比較、Ground Truth との照合)。 ## 関連 - 概念: [[サービスレベル目標]] / [[SLI-SLO段階的導入]] / [[合成モニタリング]] - エンティティ: [[Yoann Fouquet]] / [[Booking.com]] - ソース: [[@2019__SREcon19EMEA__SLOs for Data-Intensive Services]] - 関連 MOC: [[structures/SRE - MOC]]