Copyright coconala Inc. All Rights Reserved.
GraphQLを活用したリアーキテクチャに
対応するSLI/Oの再設計
DATA : 2025.4.30
Kou
Slide 2
Slide 2 text
Copyright coconala Inc. All Rights Reserved.
1. ココナラのリクエスト成功率 SLI/O
2. BFFにGraphQLを導入
3. GraphQLとココナラのSLI/O計測のアンマッチ
4. GraphQLに対応したSLI/O計測
5. マイクロサービス化に合わせたSLI/O運用
2
Contents
Slide 3
Slide 3 text
Copyright coconala Inc. All Rights Reserved.
● Prometheus + Grafana を使用
● リクエストベース (not 時間ベース)
● REST API / gRPC対応
● HTTPプロトコルを前提にした計測
○ 失敗したリクエストの ドメイン/パス/ステータスコード/HTTPメソッド などを参照できる
1
3
ココナラ(マーケットプレイス )のリクエスト成功率 SLI/O
Slide 4
Slide 4 text
Copyright coconala Inc. All Rights Reserved.
● AWS環境でSREがREDメソッドを実践するための仕組み ( https://zenn.dev/coconala/articles/a3a5e33cd1d985 )
1
4
ココナラのリクエスト成功率 SLI/O
Slide 5
Slide 5 text
Copyright coconala Inc. All Rights Reserved.
2
5
BFFにGraphQLを導入
● GraphQL with Apollo Federation (Cosmo Router) で BFF を実装する
○ Web, Appの双方を提供しているココナラでは、 BFF は開発生産性に寄与する
○ ストラングラーフィグパターンで、マイクロサービス化を推進できる
Slide 6
Slide 6 text
Copyright coconala Inc. All Rights Reserved.
6
3 GraphQLとココナラのSLI/O計測のアンマッチ
REST API GraphQL
パス URLでリソースを一意に識別 /graphql という単一のURLエ
ンドポイント
メソッド HTTPメソッドを利用 HTTPメソッドの POST で固
定
ステータスコード HTTPステータスコードに準じ
て定義
成功もエラーも、HTTPステー
タスコード 200 を返却する
エラー内容 HTTPステータスコードで概要
程度は把握できる
詳細はメッセージで定義
レスポンスボディに JSON と
して埋め込まれる
GraphQLは、柔軟なデータ取得を可能にする強力なメリットがある
一方で、HTTP とは考え方が異なるため、 HTTPが前提のココナラの SLI/O計測にはアンマッチ
Slide 7
Slide 7 text
Copyright coconala Inc. All Rights Reserved.
4
7
GraphQLに対応するSLI/O計測
GraphQL導入後も継続して SLI/Oを計測できる環境を整える !!
Slide 8
Slide 8 text
Copyright coconala Inc. All Rights Reserved.
● AWS環境でSREがREDメソッドを実践するための仕組み ( https://zenn.dev/coconala/articles/a3a5e33cd1d985 )
4
8
GraphQLに対応したSLI/O計測
実現可能性と運用性から方針を考える
● 監視ツール乱立は避けたい
○ 既存のSLI/Oの仕組みに載せられる方法は
ないか?
■ ログに情報 があれば、
自前の exporter を修正することで
Prometheusのラベルに付与できる
Slide 9
Slide 9 text
Copyright coconala Inc. All Rights Reserved.
※ GraphQLエラーをIstioとGrafanaで監視する ( https://techblog.goinc.jp/entry/2023/12/12/090000 )
4
9
GraphQLに対応したSLI/O計測
方針から実装方法を考える
● レスポンスからSLI/O計測に必要な情報を生成
○ レスポンスがエラーかどうか、 GraphQLのOperation名(パスの代わり )が最低限ほしい
■ Apollo Federation(複数のGraphQLのゲートウェイとして 1つのエンドポイントを提供 )
でレスポンス解析処理を実装する 方法を採用した
■ GraphQL サーバー側でレスポンス解析処理を行う方法 (※)もある