Middleware

ミドルウェアはアプリケーションとインフラの間に位置し、リクエスト処理、メッセージング、キャッシングなどの共通機能を提供します。 ここでは概念説明より実際の構成と運用に焦点を当てます。

システム全体でのミドルウェアの役割


┌─────────────────────────────────────────────────────────────────────────┐
│                        Client Request                                    │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  CDN / Edge Cache                                                        │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 静的コンテンツキャッシュ、DDoS防御、地理的分散                      │   │
│  │ CloudFront, Cloudflare, Fastly                                   │   │
│  └─────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  Load Balancer                                                           │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ L4/L7負荷分散、SSL終端、ヘルスチェック                            │   │
│  │ ALB/NLB, HAProxy, Nginx                                          │   │
│  └─────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  Web Server / Reverse Proxy                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ リクエストルーティング、静的ファイル配信、リバースプロキシ          │   │
│  │ Nginx, Apache, Caddy                                              │   │
│  └─────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
            ┌───────────────────────┼───────────────────────┐
            │                       │                       │
            ▼                       ▼                       ▼
┌───────────────────┐   ┌───────────────────┐   ┌───────────────────┐
│   App Server      │   │     Cache         │   │  Message Queue    │
│                   │   │                   │   │                   │
│ PHP-FPM, Gunicorn │   │ Redis, Memcached  │   │ RabbitMQ, Kafka   │
│ Tomcat, Puma      │   │                   │   │ SQS               │
└───────────────────┘   └───────────────────┘   └───────────────────┘
            │                       │                       │
            └───────────────────────┼───────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  Database / Storage                                                      │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐                  │
│  │ PostgreSQL   │  │ MongoDB      │  │ S3           │                  │
│  │ MySQL        │  │ Elasticsearch│  │ EFS          │                  │
│  └──────────────┘  └──────────────┘  └──────────────┘                  │
└─────────────────────────────────────────────────────────────────────────┘

本セクションで扱うミドルウェア

🌐 Web Server

リクエスト受付、ルーティング、静的配信、リバースプロキシ

  • • Nginx - 高性能、イベント駆動
  • • Apache - モジュール豊富、.htaccess
  • • Caddy - 自動HTTPS、設定簡単
詳細 →

📨 Message Queue

非同期処理、サービス間連携、イベント駆動アーキテクチャ

  • • RabbitMQ - AMQP、柔軟なルーティング
  • • Kafka - 高スループット、永続化
  • • SQS - マネージド、AWSネイティブ
詳細 →

⚡ Cache

レスポンス高速化、DB負荷軽減、セッション管理

  • • Redis - 多機能、データ構造豊富
  • • Memcached - シンプル、分散キャッシュ
  • • Varnish - HTTPキャッシュ特化
詳細 →

ミドルウェア選定の観点

観点確認事項
スループット想定RPS、メッセージ量Kafka: 100万msg/sec可能
レイテンシ許容される遅延Redis: sub-ms応答
耐障害性SPOF回避、レプリケーションRabbitMQ: ミラーリングキュー
運用負荷セルフホスト vs マネージドSQS: 運用不要
既存連携言語SDK、エコシステムNginx: PHP-FPM連携実績豊富

ミドルウェア障害調査の共通フロー


障害発生
    │
    ▼
┌─────────────────────────────────────────┐
│ 1. どのレイヤーで止まっているか特定      │
│    - LB → Web Server → App → DB         │
│    - 各レイヤーのログ確認                │
└─────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────┐
│ 2. エラーの種類を分類                    │
│    - 接続エラー(Connection refused)   │
│    - タイムアウト(504, timeout)        │
│    - リソース枯渇(Too many open files) │
│    - 設定エラー(Permission denied)     │
└─────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────┐
│ 3. メトリクスとログの相関               │
│    - CPU/Memory/Disk I/O                │
│    - Connection数、Queue深度            │
│    - エラーログのタイムスタンプ          │
└─────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────┐
│ 4. 設定値の確認                         │
│    - 制限値(max_connections, buffer)  │
│    - タイムアウト値                      │
│    - ワーカー/プロセス数                 │
└─────────────────────────────────────────┘

よくある調査コマンド

# 接続状態確認
ss -tlnp | grep nginx
netstat -an | grep ESTABLISHED | wc -l

# プロセス状態
ps aux | grep [n]ginx
pstree -p $(pgrep -o nginx)

# ファイルディスクリプタ
ls /proc/$(pgrep -o nginx)/fd | wc -l
cat /proc/$(pgrep -o nginx)/limits | grep "open files"

# ログ確認(リアルタイム)
tail -f /var/log/nginx/error.log | grep -E "(error|crit|alert)"

# 接続テスト
curl -I -w "time_total: %{time_total}s\n" http://localhost/health

関連セクション

言語ランタイム

Web Server → App Server → 言語Runtime の連携詳細

/languages/runtime →

Network L7

Load Balancer、Proxy の基礎概念

/network/l7 →

Database - Redis

Redisのデータ構造とDB用途

/database/nosql/redis →

Observability - Logs

ログ集約とElasticsearch/ELK

/observability/logs/aggregation →