Sidecar は、サービス トポロジまたは何らかの理由により、サービス間呼び出しに対する適切なサポートが欠けている分散システム内のソリューションです。サービス間の呼び出しでは、Sidecar はプロキシとして機能し、すべての送受信リクエストを他のサービス、負荷分散、トラフィック シェーピング、セキュリティ処理などに分散します。今回のテーマは Golang での Sidecar の実装であり、次にこの記事では Sidecar 構築の重要性、Sidecar の仕組み、Golang を使用して Sidecar サービスを実装する方法について詳しく紹介します。
まず、サイドカーの役割を明確にする必要があります。サービス指向アーキテクチャでは、多くのサービスが相互に呼び出しを行う必要があり、この場合、いくつかの問題が発生します。たとえば、サービス A がサービス B にアクセスしたい場合、呼び出し側クライアントを開発する必要があります。このクライアントでは、呼び出し方法、アドレス、ポート、プロトコルなどを決定する必要があります。サービスが増えるほど複雑になります。呼び出し関係になります。 Sidecar を使用すると、各サービス インスタンスに Sidecar をデプロイするだけで、すべてのリクエストをインターセプトし、それに応じてリクエストを処理できるため、アクセス関係の複雑さが解消され、より簡素化されたサービスが提供されます。
サイドカーの主なワークフローは次のとおりです:
ステップ 1: サイドカーはすべてのクライアント リクエストをインターセプトする役割を果たします。
ステップ 2: サイドカーは、傍受したリクエストを通常のプロトコルに変換し、サービスにリクエストを送信します。
ステップ 3: サービスの応答が到着すると、Sidecar はサービスから応答を抽出し、逆変換を実行して、クライアントに応答を返します。
Sidecar 機能を備えたアーキテクチャ図は次のとおりです。
まず、次のクライアントを決定する必要があります。多くのサービスは、呼び出しを行うために名前、アドレス、およびポートを呼び出す必要があります。これをサービス検出と呼びます。具体的な手順は次のとおりです。
ステップ 1: サービス検出: サイドカーは、構成センターまたは登録センターから現在のアプリケーションのサービス検出情報を学習する必要があります。このサービス検出情報には、アプリケーションのすべてのサービスとそのアドレスおよびポート情報が記録され、Sidecar がサービス呼び出しを完了できるようにするためにこの情報を使用できます。
ステップ 2: プロキシ設定: サイドカーはリクエストをインターセプトし、プロキシ設定を実行する必要があります。クライアント リクエストに対応する識別子がある場合、リクエストは通常のプロトコル形式に変換されてサービスに送信されますが、そうでない場合、サイドカーはリクエストを拒否します。
上記の手順により、Golang で Sidecar サービスを実装できます。コードの実装については、次のプロセスを参照してください:
//サービス検出アドレスの定義
const DiscoverUrl = " https://srv.discover.local/path"
type ServiceDiscoveryClient インターフェイス{
FindService(serviceName string) ([]string, error)
}
func NewServiceDiscoveryClient( ) ServiceDiscoveryClient {
return &serviceDiscoveryClient{discoverUrl}
}
type serviceDiscoveryClient struct{
url string
}
func (c* serviceDiscoveryClient) FindService(serviceName string ) ([]string, error){
//サービス ディスカバリー センターからサービスのアドレスとポートを要求します
}
//プロキシ ポートとサービス名を定義します
const proxyPort int = 1000
const serviceName string = "my-service"
type プロキシ インターフェイス {
Start() error
Stop() error
}
func NewProxy(serviceDiscoveryClient ServiceDiscoveryClient) プロキシ {
//サイドカー プロキシを初期化します
}
type proxy struct {
serviceDiscoveryClient ServiceDiscoveryClient
}
func (p* proxy) Start() error {
//ポートのリッスンを開始し、リクエストをインターセプトします
}
func (p * プロキシ) Stop() エラー {
//ポートのリスニングを停止します
}
$ go run main.go
これを実装するプロセス中このプロセスでは、関連する GitHub オープン ソース プロジェクトの Sidecar ソース コードを参照して、Sidecar の動作原理と実装について理解を深めることもできます。
概要
この記事では、主に Sidecar サービスと、Golang で Sidecar サービスを実装するための基本的な知識とプロセスを紹介します。 Sidecar サービスの実装は、Netflix の Zuul、Spring の Spring Cloud、Alibaba Cloud の DuoMi などの関連するマイクロサービス フレームワークと組み合わせて構築する必要があることに注意してください。分散システムでは、Sidecar を使用すると、サービス呼び出しの複雑さの問題を完全に解決し、サービス間のより柔軟で効率的な通信を実現し、サービスの安定性とスケーラビリティを向上させることができます。
以上がGolang を使用してサイドカー サービスを実装する方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。