プロキシベースマイクロサービスの台頭:アーキテクチャの解明
プロキシベースのマイクロサービスの本質
プロキシベースのマイクロサービスアーキテクチャは、サービスインスタンスと外部世界(他のサービスやクライアントなど)の間に軽量のネットワークプロキシを介在させます。このプロキシは「サイドカー」と呼ばれることもあり、単なる交通整理の役割を果たします。マイクロサービスの一時的なメッシュをすり抜けるリクエストを傍受、検査、そして変換する、静かな監視役のような存在です。
なぜこのアプローチを採用するのか?
- 関心の分離: ビジネス ロジックから横断的な懸念事項 (セキュリティ、可観測性、信頼性) をオフロードします。
- 統一的なポリシーの施行アクセス制御、レート制限、サーキットブレーキングを一元管理
- レジリエンスパターン: 再試行、フォールバック、タイムアウトを透過的に挿入する
- 可観測性: コードを変更せずにトレースとメトリックをキャプチャします
- ゼロトラストセキュリティ: すべてのトラフィックを暗号化し、IDを自動的に検証します
アーキテクチャの解剖学: プロキシがマイクロサービスの精神を体現する方法
サイドカーパターン
各サービスポッドにはプロキシプロセスが付属しており、Envoy、Linkerd、HAProxyなどが一般的です。サービス宛てのトラフィックはサイドカーを経由してルーティングされ、サイドカーはネットワークポリシーの適用、テレメトリの収集、mTLS暗号化の管理を行います。
マニフェストの例 (Kubernetes + Istio):
apiVersion: v1 種類: Pod メタデータ: 名前: poets-service 仕様: コンテナー: - 名前: poets-app イメージ: registry.example.com/poets:latest - 名前: istio-proxy イメージ: docker.io/istio/proxyv2:1.18.0 引数: ["proxy", "sidecar"]
Istioは自動的に istioプロキシ
サイドカーは、サービスの周囲に目に見えない制御のタペストリーを織ります。
サービスメッシュ: 生きた有機体としてのネットワーク
サービスメッシュは、 イスティオ, リンカード、 または 領事コネクトは、これらのプロキシの構成とライフサイクルを調整し、サービス間ネットワークをプログラム可能かつ監視可能にします。
リソース:
– Envoy Proxy 公式ドキュメント
– Linkerdアーキテクチャ
実用的な利点:トレードオフ表
特徴 | プロキシベースのマイクロサービス | 従来のマイクロサービス |
---|---|---|
分散トレース | ネイティブ、透明 | 手動計装 |
mTLS どこでも | 自動化 | アプリケーションの責任 |
回路遮断 | 宣言的、ポリシーベース | コードで明示的に |
レート制限 | 集中型、動的 | 分散型、静的 |
カナリアリリース | プロキシでのトラフィック分割 | ロードバランサによって処理される |
サービス検出 | 内蔵ダイナミック | 外部レジストリが必要です |
障害の分離 | リクエストごと、プロキシレベル | コードまたはインフラレベル |
この表は、ネットワークがもはや負担ではなく、イノベーションのキャンバスとなる世界を暗示しています。
実用的なパターン: プロキシベースのマイクロサービスの実装
1. サイドカープロキシの導入
Kubernetes では、Istio や Linkerd などのツールを使用してサイドカー インジェクションを自動化できます。
ステップバイステップ: Istio の例
- Istio をインストールします。
バッシュ
curl -L https://istio.io/downloadIstio | sh -
cd istio-*
エクスポート PATH=$PWD/bin:$PATH
istioctl インストール --set profile=demo -y
kubectl ラベル名前空間デフォルト istio-injection=enabled - サービスをデプロイする:
「ヤムル
apiバージョン: v1
種類: サービス
メタデータ:
名前: poets-app
仕様:
ポート:- ポート: 80
名前: http
セレクタ:
アプリ: 詩人
- ポート: 80
apiバージョン: apps/v1
種類: デプロイメント
メタデータ:
名前: 詩人の展開
仕様:
レプリカ: 1
セレクタ:
一致ラベル:
アプリ: 詩人
テンプレート:
メタデータ:
ラベル:
アプリ: 詩人
仕様:
コンテナ:
– 名前: poets-app
画像: registry.example.com/poets:latest
“`
サイドカー インジェクションにより、Envoy プロキシが自動的に追加されます。面倒な定型句は不要になります。
- トラフィックポリシーを適用:
ヤムル
apiバージョン: networking.istio.io/v1alpha3
種類: 宛先ルール
メタデータ:
名前: 詩人の目的地
仕様:
ホスト: poets-app
トラフィックポリシー:
接続プール:
TCP:
最大接続数: 1
2. コード変更なしでの可観測性
プロキシが設置できれば、テレメトリはフランスの夜会でワインを飲むように流れていく。IstioとLinkerdはPrometheusエンドポイント経由でメトリクスを公開し、 グラファナ ダッシュボード。
メトリクスを取得:
kubectl -n istio-system port-forward svc/prometheus 9090 # メトリクスをクエリするには、http://localhost:9090 を開きます。
3. 開発者の介入なしでmTLSを強制する
ピア認証と宛先ルールを構成すると、メッシュはすべてのサービス間通信を暗号化します。
Istio ピア認証の例:
apiVersion: security.istio.io/v1beta1 種類: PeerAuthentication メタデータ: 名前: default 名前空間: default 仕様: mtls: モード: STRICT
各サービスごとに TLS トンネルを手動で作成する必要がなくなりました。
コードレベルの例: コードなしの回路遮断
サーキットブレーキングのDestinationRule(Istio):
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: circuit-breaker spec: host: poets-app trafficPolicy: outlierDetection: consecutive5xxErrors: 1 interval: 1s baseEjectionTime: 30s maxEjectionPercent: 100
この YML の呪文により、コードを変更することなく、サービスに回復力が付与されます。
プロキシベースのマイクロサービスを使用しない場合
シナリオ | プロキシベースのメッシュ | よりシンプルな代替案 |
---|---|---|
5 つ未満のサービス、複雑さが低い | オーバーヘッド | 直接的なコミュニケーション |
エッジサービス(一般公開のみ) | 不要 | APIゲートウェイ |
リソースが非常に制限された環境 | 重いかもしれない | 軽量プロキシ |
参考文献とリソース
現代のクラウドの脈動
プロキシベースのマイクロサービスアーキテクチャは、プロキシとポリシーの複雑な振り付けによって、デジタル時代の秩序と創造性の追求を体現しています。かつては暗黒街だったネットワークは、今や舞台となり、それぞれのプロキシ、アクター、リクエストは、分散システムの詩歌における儚い一節となります。
コメント (0)
まだコメントはありません。あなたが最初のコメントを投稿できます!