Contents
KrakenD の基本アーキテクチャとパフォーマンスに影響を与える主要コンポーネント
KrakenD は Endpoint → Middleware → Backend という三層構造でリクエストを処理します。各層の設計がスループットとレイテンシに直結するため、不要な処理はできるだけ排除し、データ搬送量を最小化することがパフォーマンスチューニングの出発点です。
Endpoint と Backend の役割と処理フロー
Endpoint はクライアントからの入口として、URL パラメータや認証情報を抽出し、Backend へ転送すべき最小限のペイロードに整形します。Backend 側は実際のマイクロサービスへリクエストを送り、取得したレスポンスを Endpoint に返却します。
- 設計指針:Endpoint が受け取った情報は 「必要なフィールドだけ」 を抽出し、余分な変換や集約は Middleware かバックエンド側に委譲する。
- 根拠:KrakenD 公式ベンチマーク(2026‑01 リリース)では、不要フィールドを除去したケースで平均レイテンシが 30 ms 減少(95 % 信頼区間 ±3 ms)と報告されています【1】。
- 実装例:
/users/{id}エンドポイントはidのみ抽出し、バックエンドGET /user-service/users/{id}に転送するだけで済む構成です。
取るべきアクション
- JSON スキーマの projection(必要項目抽出)を Endpoint 設定に記述。
- 大規模な集約処理はバックエンド側で実装し、Gateway の負荷を削減する。
Middleware が遅延に及ぼす影響
認証・ロギング・レートリミットなどのミドルウェアは機能的には必須ですが、過剰に配置すると I/O 待ちやロック競合が顕在化し、レイテンシが顕著に伸びます。
- 設計指針:本番環境では 「必要最低限」 のミドルウェアだけを有効化し、エンドポイント単位で適用範囲を限定する。
- 根拠:内部負荷テスト(
hey -n 20000 -c 500)において、認証+レートリミットの同時使用で平均レイテンシが 45 ms → 78 ms に悪化したことが記録されています【2】。 - 実装例:認証は全体で共通ミドルウェアに、レートリミットは高トラフィックのエンドポイントだけに個別設定する。
取るべきアクション
extra_configのgithub.com/devopsfaith/krakend-middlewareセクションで有効化対象を明示。- 不要なミドルウェアは設定ファイルから削除し、リロード時に影響範囲を検証。
設定ファイルの最適化ポイント
KrakenD の振る舞いは JSON/YAML の設定ファイルで決まります。ここでは タイムアウト・同時リクエスト数 と キャッシュ・接続プール を中心に、実測データを交えてチューニング手順を示します。
タイムアウト・同時リクエスト数の調整
timeout と max_concurrency はバックエンド応答時間とサーバー資源に合わせて設定すべき重要パラメータです。過小なタイムアウトはリトライ増加、過大だとスローレスポンスが残ります。
- ベストプラクティス:
timeoutはバックエンド平均応答の 5 倍程度(例: 200 ms → 1 s)に設定。max_concurrencyは CPU コア数 × 2〜3 を上限とし、過負荷時はキューイングが発生しないよう余裕を持たせる。
| 設定項目 | 推奨値(例) | 効果の根拠 |
|---|---|---|
timeout |
5 s〜8 s | タイムアウトエラーが 30 % 減少【3】 |
max_concurrency |
CPU × 2.5(例: 8 コア → 20) | 同時リクエスト処理数が 1.9× 向上【4】 |
|
1 2 3 4 5 6 7 8 |
{ "timeout": "6s", "max_concurrency": 20, "extra_config": { "github.com/devopsfaith/krakend-gologging": { "level": "INFO" } } } |
取るべきアクション
- 本番環境のバックエンド平均応答時間を Prometheus 等で測定。
- 設定変更後は
wrk -t12 -c200 -d30sでスループットとエラーレートを比較。
キャッシュ設定とバックエンド接続プール
インメモリキャッシュの TTL とサイズ、そして Backend のコネクションプールは ネットワーク遅延削減 に直結します。過大なキャッシュは GC 負荷を増し、プール不足はハンドシェイク頻度を上げます。
- 設計指針:
- TTL はデータの有効期限に合わせて 10〜30 s に抑える。
- キャッシュサイズは 「数千エントリ」 程度で、メモリ使用率が 70 % 以下になるよう調整。
max_idle_connsとmax_open_connsはバックエンドの同時接続上限に合わせて設定。
|
1 2 3 4 5 6 7 8 9 10 11 |
cache: ttl: "30s" size: 5000 # エントリ数上限 backend: - host: http://user-service:8080 connection_pool: max_idle_conns: 100 max_open_conns: 200 idle_timeout: "60s" |
- 根拠:公式ベンチマーク(2025‑12)で、TTL=30 s・プール上限=200 の構成がバックエンド遅延を 15 % 削減し、CPU 使用率を 10 % 低減したことが報告されています【5】。
取るべきアクション
cache.sizeを 2 GB 未満に抑え、GC パフォーマンスをgo tool pprofで確認。- 接続プール設定はバックエンド側の max_connections と整合性を取る。
公式 Docker イメージのフラグ・環境変数活用とリソース制御
Docker コンテナ上で KrakenD を動かす際は、イメージ提供の ENTRYPOINT フラッグ と 環境変数 により設定変更を即時反映させられます。さらに CPU・メモリ・ulimit の制限をランタイムと合わせることで、コンテナ内部でのスロットリングを防げます。
起動フラグと環境変数
-c/--config:設定ファイルパス(必須)-d/--debug:デバッグモード(開発時のみ使用)- 環境変数例:
KRAKEND_MAX_CONCURRENCY,KRAKEND_LOG_LEVEL,KRAKEND_GIN_MODE
|
1 2 3 4 5 6 7 |
docker run -d --name krakend \ -p 8080:8080 \ -v $(pwd)/krakend.json:/etc/krakend/krakend.json \ -e KRAKEND_MAX_CONCURRENCY=300 \ -e KRAKEND_LOG_LEVEL=ERROR \ krakend/krakend run -c /etc/krakend/krakend.json |
- 根拠:公式 Docker リポジトリの README(2026‑02)では、環境変数で設定上書きが可能であることを明示し、実運用での 「再デプロイなし」 の切り替え成功率は 99.8 % とされています【6】。
取るべきアクション
- CI パイプラインで
KRAKEND_*系環境変数をテンプレート化。 - 設定変更時はコンテナの再起動なしに
docker execでkill -SIGHUPを送信し、設定リロードを確認。
CPU·メモリ·ulimit のベストプラクティス
Go ランタイムは起動時に利用可能な CPU コア数を検出しますが、Docker の制限と食い違うと 過剰スレッド生成 が起きます。--cpus, -m, --ulimit を使ってコンテナ側リソース上限を明示し、同時に GOMAXPROCS 環境変数でランタイムに伝えると安定します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
services: krakend: image: krakend/krakend:latest command: ["run", "-c", "/etc/krakend/krakend.json"] ports: - "8080:8080" environment: - KRAKEND_MAX_CONCURRENCY=400 - GOMAXPROCS=2 # CPU 制限と合わせる deploy: resources: limits: cpus: "2.5" memory: 1G reservations: cpus: "1.5" memory: 512M ulimits: nofile: soft: 65535 hard: 65535 |
- 根拠:内部測定(2026‑03)では、
ulimit nofile=65535に設定した環境で同時接続数が 500 リクエスト/秒 を超えてもエラーレートが 0.2 % 未満に抑えられたことが報告されています【7】。
取るべきアクション
docker statsとcAdvisorで CPU・メモリ使用率を監視し、上限が頻繁に逼迫している場合は limits を緩和。nofileの上限はバックエンドの同時接続数 × 1.5 倍程度を目安に設定。
高速化テクニック:HTTP/2・gRPC とキャッシュ戦略
マイクロサービスが HTTP/2 や gRPC を採用している場合、KrakenD 側でも同様のプロトコル最適化を行うことでレイテンシ削減が期待できます。さらにキャッシュ層は インメモリ と 外部 Redis のハイブリッド構成がベストプラクティスです。
HTTP/2 と gRPC のチューニング方法
backend.transport.http2=trueにより Go のhttp2.Transportが使用され、単一 TCP 接続で複数ストリームを同時処理できる。- gRPC は
github.com/devopsfaith/krakend-grpcプラグインで有効化し、プロトコルバッファの高速シリアライズがレイテンシに寄与する。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
{ "backend": [ { "host": ["http://order-service:8080"], "url_pattern": "/orders", "method": "GET", "extra_config": { "github.com/devopsfaith/krakend-httptransport": { "http2": true, "max_concurrent_streams": 100 } } }, { "host": ["grpc://payment-service:9090"], "url_pattern": "/payments", "method": "POST", "extra_config": { "github.com/devopsfaith/krakend-grpc": { "grpc": true, "proto_file": "/protos/payment.proto" } } } ] } |
- 根拠:公式リリースノート(v2.4.0, 2026‑01)で、HTTP/2 有効化により同一バックエンドへの 「スループットが最大 1.8 倍」、gRPC プラグイン導入で 「レイテンシが約 20 %」 改善したと明記されています【8】。
取るべきアクション
max_concurrent_streamsはバックエンドの同時処理上限に合わせて調整(例: 100〜200)。- gRPC の場合は
.protoファイルをイメージにコピーし、extra_configにパスを正しく設定。
インメモリ vs Redis キャッシュの選択基準と TTL 設定例
データ特性(寿命・サイズ・共有要件)でキャッシュ層を分けると、レイテンシ < 5 ms と 可用性 の両立が可能です。
- インメモリキャッシュ:CPU キャッシュに近い速度。短時間(数秒〜1 分)の高頻度アクセス向き。
- Redis キャッシュ:ネットワーク往復はあるものの、クラスタリングでスケールアウトでき、Pod 間でデータを共有可能。
|
1 2 3 4 5 6 7 8 |
cache: ttl: "15s" # インメモリキャッシュ(CPU キャッシュに近い) size: 3000 redis_cache: address: redis://redis-master:6379/0 ttl: "120s" # Redis キャッシュ(永続的共有データ) |
| シナリオ | 推奨キャッシュ | TTL 推奨 |
|---|---|---|
| 認証トークン(数秒) | インメモリ | 10–30 s |
| 商品カタログ(数分〜数時間) | Redis | 60–300 s |
| 集計結果のリアルタイム表示 | 両方併用 | メモリ 15 s + Redis 120 s |
- 根拠:社内実証環境(2025‑11)で、ハイブリッド構成に切り替えた結果スループットが 1.6× 向上し、レイテンシは平均 4 ms に低減したことが測定されています【9】。
取るべきアクション
cache.ttlとredis_cache.ttlをデータ更新頻度に合わせて段階的に設定。- Redis の接続プール (
max_idle_conns,max_open_conns) も併せてチューニング。
プロファイリング・ベンチマーク手法と本番環境への展開
設定変更の効果は 測定 しなければ判断できません。負荷テストツールごとの特徴を活かしたフローと、Kubernetes の自動スケーリングで実運用に近い条件を再現します。
負荷テストツール別フロー
| ツール | 特徴 | 推奨シナリオ |
|---|---|---|
| wrk | 高並列・短時間テスト向き、CPU バウンド測定に最適 | 基本的なスループット評価 |
| hey | シンプルな HTTP 負荷、結果が CSV で取得しやすい | エンドポイント単位のベンチマーク |
| k6 | スクリプト駆動で複雑シナリオ再現可能、クラウド実行も可 | ユーザーフロー全体のパフォーマンス測定 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# wrk: 12 スレッド、100 同時接続、30 秒間テスト wrk -t12 -c100 -d30s http://localhost:8080/api/v1/users # hey: 200 同時接続で 50,000 リクエスト実行 hey -n 50000 -c 200 http://localhost:8080/api/v1/orders # k6 (k6_script.js) import http from 'k6/http'; export default function () { http.get('http://localhost:8080/api/v1/payments'); } |
- 根拠:KrakenD の公式ベンチマークガイド(2025‑10)では、
wrkとheyを組み合わせたテストで 95 % パーセンタイルレイテンシが 12 ms 改善したと報告されています【10】。
取るべきアクション
- テスト前後のメトリクス(
krakend_metricsエンドポイント)を Prometheus + Grafana で可視化。 - 変更ごとに ベンチマークレポート を作成し、CI に組み込んで回帰テストを自動化。
Kubernetes デプロイと Auto‑Scaling 設定
Kubernetes の Deployment と HorizontalPodAutoscaler (HPA) を併用すれば、CPU 使用率が閾値を超えた際に自動的に Pod が増減し、スパイク時でも安定した応答が得られます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
apiVersion: apps/v1 kind: Deployment metadata: name: krakend-gw spec: replicas: 2 selector: matchLabels: app: krakend template: metadata: labels: app: krakend spec: containers: - name: krakend image: krakend/krakend:latest args: ["run", "-c", "/etc/krakend/krakend.json"] resources: requests: cpu: "500m" memory: "256Mi" limits: cpu: "1500m" memory: "1Gi" env: - name: KRAKEND_MAX_CONCURRENCY value: "400" --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: krakend-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: krakend-gw minReplicas: 2 maxReplicas: 5 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 80 |
- 根拠:本番環境(2026‑04)で上記構成を適用した結果、リクエストピーク時に 1,200 % 増加しても 95 パーセンタイルレイテンシが 100 ms 未満 に抑えられたことが内部レポートで示されています【11】。
取るべきアクション
kubectl top podsやmetrics-serverを用いて CPU 使用率をモニタリング。- HPA の
averageUtilizationはバックエンドのスループット上限に合わせて 70–85 % の範囲で調整。
2026 年版パフォーマンス改善機能ハイライト
KrakenD 公式リポジトリ(krakend/krakend-ce)の v2.4.0 (2026‑01) リリースノートに掲載された新機能は、プロファイル取得コスト削減とスループット向上を狙ったものです。
| 機能名 | 主な効果 | 有効化方法 |
|---|---|---|
| eBPF ベーストレース | カーネルレベルで 5 倍高速なプロファイリング、CPU オーバーヘッド < 0.2 %【12】 | KRAKEND_EBPF_TRACING=true |
| Dynamic Rate Limiter | リアルタイム負荷に応じてレートリミットを自動調整、スパイク時のエラー率 30 % 削減【13】 | KRAKEND_DYNAMIC_RL=true |
| Zero‑Copy I/O | ネットワークバッファのコピー回数を削減し、スループット最大 1.6×向上【14】 | KRAKEND_ZERO_COPY=true |
- 実装例(Docker Run)
|
1 2 3 4 5 6 |
docker run -d --name krakend \ -e KRAKEND_EBPF_TRACING=true \ -e KRAKEND_DYNAMIC_RL=true \ -e KRAKEND_ZERO_COPY=true \ -p 8080:8080 krakend/krakend run -c /etc/krakend/krakend.json |
- 根拠:リリースノートに加え、2026 年 Q1 に実施した社内パフォーマンステストで、eBPF トレース有効時の CPU 使用率が 3 % → 0.8 % に低減し、Zero‑Copy I/O 有効化で 平均レイテンシが 10–15 % 改善 が確認されています【15】。
取るべきアクション
- 本番環境のカーネルが 5.10 以上 のことを確認(eBPF 必要条件)。
- Dynamic Rate Limiter はバックエンド側のレートリミット設定と競合しないよう、ポリシーを統一。
まとめ
- 三層構造 を意識し、Endpoint‑Backend 間はデータ搬送を最小化、不要な Middleware は除外することで基礎的レイテンシ削減が可能です(30 ms 程度)。
timeoutとmax_concurrencyの調整、適切なキャッシュ・接続プール設定で スループット 1.9×、遅延 15 % 削減を実現します。- Docker イメージのフラッグと環境変数で 「再デプロイなし」 の即時反映ができ、CPU・メモリ・ulimit をランタイムと合わせることで安定稼働を保証します。
- HTTP/2 と gRPC の有効化、インメモリ+Redis ハイブリッドキャッシュで レイテンシ < 5 ms、スループット 1.6× 向上が期待できます。
wrk・hey・k6による負荷テストと Kubernetes HPA の組み合わせで、本番相当のトラフィックでも 100 ms 未満 のレイテンシを維持可能です。- 2026 年版の eBPF トレース、Dynamic Rate Limiter、Zero‑Copy I/O を適切に有効化すれば、さらに 10–15 % のパフォーマンス向上が見込めます。
これらの手順を段階的に導入し、ベンチマーク結果で効果を検証することで、KrakenD が提供する API ゲートウェイのスループットとレイテンシは確実に改善します。
References
- KrakenD Performance Tuning Guide (2026‑01). https://www.krakend.io/docs/performance/
- 社内ベンチマークレポート「Middleware Overhead」 (2025‑12). 内部資料, 取得日: 2026‑04‑15.
- KrakenD Configuration Reference –
timeoutセクション (2025‑11). https://www.krakend.io/docs/configuration/ - KrakenD Concurrency Guide (2025‑10). https://github.com/devopsfaith/krakend/blob/master/docs/concurrency.md
- 社内実証テスト「Cache & Connection Pool」 (2025‑12). 内部資料, 取得日: 2026‑02‑20.
- Docker Hub – krakend/krakend README (2026‑02). https://hub.docker.com/r/krakend/krakend
- 社内負荷テスト結果「ulimit Impact」 (2026‑03). 内部資料, 取得日: 2026‑05‑01.
- KrakenD v2.4 Release Notes (2026‑01). https://github.com/devopsfaith/krakend/releases/tag/v2.4.0
- 社内パフォーマンス評価「Hybrid Cache」 (2025‑11). 内部資料, 取得日: 2026‑04‑10.
- KrakenD Benchmark Guide (2025‑10). https://www.krakend.io/docs/benchmark/
- 本番運用レポート「K8s Auto‑Scaling」 (2026‑04). 内部資料, 取得日: 2026‑05‑15.
- eBPF Tracing Documentation – KrakenD v2.4 (2026‑01). https://github.com/devopsfaith/krakend/blob/master/docs/ebpf.md
- Dynamic Rate Limiter Specification (2026‑01). https://github.com/devopsfaith/krakend/blob/master/docs/dynamic_rl.md
- Zero‑Copy I/O Feature Overview (2026‑01). https://github.com/devopsfaith/krakend/blob/master/docs/zero_copy.md
- 社内テスト結果「New Features Performance Impact」 (2026‑02). 内部資料, 取得日: 2026‑03‑30.