なんで別コンテナに分けるの?
関心の分離のため。メインアプリがビジネスロジックに集中し、ログ収集・暗号化・認証などの横断的な処理はサイドカーが担当する。メインアプリがPythonでもGoでもJavaでも、サイドカーのログ収集コンテナは同じものを使い回せる。言語やフレームワークに依存しないんだよ
サービスメッシュとの関係は?
Istioなどのサービスメッシュは、各Podにenvoyプロキシをサイドカーとして自動注入する。全通信がサイドカー経由になるから、アプリコードを変更せずにmTLS(相互TLS)、リトライ、サーキットブレーカー、トラフィック分散を実現できる。これがサイドカーパターンの最も有名な活用例だよ
デメリットは?
①リソース消費。各Podにサイドカーが入ると、CPU・メモリの消費がPod数分増える。100Podなら100個のサイドカー。②レイテンシ。通信がサイドカーを経由するため数msの遅延が加わる。③デバッグの複雑化。問題がメインアプリかサイドカーかの切り分けが必要になるんだ
サイドカーを使わない方法もある?
最近はサイドカーレスの流れもあるよ。Cilium Mesh(eBPFベース)やIstio Ambient MeshはPodごとのサイドカーではなくノードレベルのプロキシで通信制御する。リソース消費とレイテンシを削減できる。ただしサイドカーの方が細かい制御ができるから、用途に応じて選択するのが良いよ