サービスメッシュ

サイドカーパターン さいどかーぱたーん

サービスメッシュコンテナKubernetesプロキシマイクロサービスEnvoy
サイドカーパターンについて教えて

簡単に言うとこんな感じ!

バイクのサイドカー(横に付いた乗り物)みたいに、メインのアプリコンテナの「隣」に補助コンテナをくっつけるデザインパターンだよ。ログ収集や通信の暗号化など、共通の面倒ごとをサイドカーに任せて、本体はビジネスロジックだけに集中できるってこと!


サイドカーパターンとは

サイドカーパターンとは、マイクロサービスアーキテクチャにおいて、メインのアプリケーションコンテナと同じ実行単位(Kubernetesでいう「Pod」)に、補助的な役割を持つ別のコンテナを相乗りさせる設計パターンのことです。バイクに横付けされる「サイドカー」のように、本体に寄り添いながら独立して動作することからこの名がつきました。

アプリケーションが大きくなると、ログの収集・通信の暗号化・リトライ処理・サービスディスカバリといった「どのサービスでも必要になる横断的な機能」が増えてきます。これをすべての個別サービスに実装するのは手間がかかり、バグの温床にもなります。サイドカーパターンを使えば、こうした共通機能を1つの補助コンテナとして切り出し、アプリ本体のコードを変えずに機能を追加できます。

サイドカーパターンはサービスメッシュの基盤技術でもあります。IstioLinkerdといったサービスメッシュ製品は、このパターンを使って全サービスのトラフィックを透過的にコントロールしています。


サイドカーパターンの仕組みと構造

サイドカーコンテナはメインコンテナと同じPod内に配置され、ネットワークとストレージを共有します。メインコンテナを一切改修することなく、機能を外から「横付け」できるのが最大の特徴です。

項目メインコンテナサイドカーコンテナ
役割ビジネスロジックの実行共通機能の提供
開発者アプリ開発チームインフラ・プラットフォームチーム
ライフサイクルアプリと同期独立してアップデート可能
ネットワーク共有(localhostで通信)共有(localhostで通信)
ECサイトの注文処理Envoyプロキシ、Fluentd

よくあるサイドカーの用途

  • プロキシ型(最多): Envoy など。全通信をサイドカーで中継し、暗号化・リトライ・トレーシングを自動付与
  • ログ収集型: Fluentd / Filebeat など。アプリのログファイルを読み取り、集中ログ基盤に転送
  • 設定同期型: Vault Agent など。シークレット(パスワード等)を定期的に取得してアプリに渡す
  • ヘルスチェック: アプリの死活監視を代行し、異常を検知したら再起動をトリガー

覚え方

🏍️ バイクのサイドカー = 本体(アプリ)の横にくっついて、荷物(共通処理)を運んでくれる相棒!


歴史と背景

  • 2010年代前半: Netflixなどがマイクロサービスを本格導入し始め、サービス間通信の管理が複雑化
  • 2014年頃: Docker・Kubernetesの登場でコンテナが普及。Pod という「複数コンテナをまとめる単位」の概念が生まれ、サイドカーパターンが現実的になる
  • 2015年: Microsoftのクラウドデザインパターンカタログに「Sidecar Pattern」として正式に掲載・命名される
  • 2016年: LyftがEnvoyプロキシをオープンソース公開。サイドカーとして動作するプロキシの事実上の標準となる
  • 2017年: Istioリリース。Envoyをサイドカーとして全Podに自動注入するサービスメッシュとして注目を集める
  • 2018年以降: KubernetesでのIstio・Linkerd採用が加速し、サイドカーパターンはマイクロサービスの標準的プラクティスとして定着
  • 2023年: Kubernetes v1.28でサイドカーコンテナを明示的に扱う「Sidecar Container」機能がアルファ導入。Pod起動・終了順序の制御が可能に

サービスメッシュとの関係・類似パターンとの比較

サイドカーパターンは単独で使われることもありますが、サービスメッシュとして組み合わさると最大の効果を発揮します。全サービスのPodにサイドカープロキシを自動注入することで、アプリを変更せずにクラスタ全体の通信を一元管理できます。

サイドカーパターン — Podの内部構造 Pod A(注文サービス) メインコンテナ 注文処理ロジック (ビジネスコード) サイドカーコンテナ Envoyプロキシ (通信制御・暗号化・ログ) localhost 共有ネットワーク・ストレージ 同じIPアドレス・同じボリューム Pod B(在庫サービス) メインコンテナ 在庫管理ロジック (ビジネスコード) サイドカーコンテナ Envoyプロキシ (通信制御・暗号化・ログ) localhost 共有ネットワーク・ストレージ 同じIPアドレス・同じボリューム mTLS暗号化 通信

類似パターンとの使い分け

パターン概念向いているケース
サイドカーパターン補助機能を別コンテナで横付け既存アプリを変えずに機能追加したい
アンバサダーパターン外部通信を仲介する特殊なサイドカー外部サービスへの接続を抽象化したい
アダプターパターン出力フォーマットを統一する特殊なサイドカー複数サービスのログ形式を統一したい
ライブラリ方式各アプリに共通ライブラリを組み込む言語・チームが統一されているとき

アンバサダー・アダプターパターンはサイドカーの派生形です。基本はサイドカーで、用途を特化させたものがアンバサダーやアダプターと呼ばれます。


関連する規格・RFC

規格・RFC番号内容
RFC 8446TLS 1.3。サイドカープロキシが担うサービス間通信の暗号化(mTLS)に使用される
RFC 7540HTTP/2。Envoyなどのサイドカープロキシがサービスメッシュ内通信で採用するプロトコル

関連用語

  • サービスメッシュ — マイクロサービス間の通信を一元管理するインフラ層。サイドカーパターンが基盤技術
  • Envoy — サイドカープロキシの事実上の標準。Istioなど多くのサービスメッシュで採用
  • Istio — EnvoyをサイドカーとしてKubernetesに自動注入するサービスメッシュ製品
  • Kubernetes Pod — サイドカーパターンの実行単位。複数コンテナをまとめてデプロイできる
  • マイクロサービス — サービスを小さく分割するアーキテクチャ。サイドカーパターンが活躍する舞台
  • コンテナ — アプリを隔離して実行する技術。サイドカーもコンテナとして動作する
  • mTLS — 相互TLS認証。サイドカープロキシが自動的に処理するサービス間暗号化の方式