Slide 1

Slide 1 text

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 サーバー側でレスポンス解析処理を行う方法 (※)もある

Slide 10

Slide 10 text

Copyright coconala Inc. All Rights Reserved. 4 10 GraphQLに対応したSLI/O計測 (実装に踏み込んだ話) ● リクエストされる Query名 (or Mutation名) を、HTTPのパス代わり に取得する ○ ココナラで使用している Cosmo Router (Go lang) は、 コンテキストに ctx.Operation.Name として、Query名 (or Mutation名)を持つ ■ これをログに出力した

Slide 11

Slide 11 text

Copyright coconala Inc. All Rights Reserved. 4 11 GraphQLに対応したSLI/O計測 (実装に踏み込んだ話) ● レスポンスボディを元に、リクエスト成功率を計測するための情報を生成する ○ レスポンスボディを解析し、 INTERNAL_SERVER_ERROR 系(HTTPでいう5XX) であれば、リクエスト失敗 それ以外 は、リクエスト成功 としてフラグを立てる ■ Apollo Federationでは、スーパークエリ、サブクエリという概念があり、 リクエストの成功・失敗を集計するには、スーパークエリのステータスを解析する

Slide 12

Slide 12 text

Copyright coconala Inc. All Rights Reserved. 4 12 GraphQLに対応したSLI/O計測

Slide 13

Slide 13 text

Copyright coconala Inc. All Rights Reserved. 5 13 マイクロサービス化に合わせた SLI/O運用 ● 次なる課題 ○ 「前スライドでエラーバジェット 100%超えてましたよ?」 ■ マイクロサービスでもSLI/O計測はできるようになった ■ 運用は大きいサービスの方法論を流用してる段階 ● マイクロサービスごとのSLOを策定中 ○ SLI/O運用の拡大・浸透から全社にSRE文化を広めたい ■ マイクロサービスに適した SLI/O運用を Stream Aligned Teamと成熟させる ● CUJが複数プロダクトを横断する場合のSLI/O運用 ● これまではPlatform TeamであったSREの Enabling Teamとしての役割も重要になってきている ○ マイクロサービスごとのSLI/O運用をEnablingするには、 まず SREチーム内でEnablingができる人を増やす必要がある