Sidecar ist eine Lösung in einem verteilten System, die aufgrund der Diensttopologie oder aus anderen Gründen keine angemessene Unterstützung für Anrufe zwischen Diensten bietet. Bei Anrufen zwischen Diensten fungiert Sidecar als Proxy und verteilt alle eingehenden und ausgehenden Anforderungen an andere Dienste, sorgt für Lastausgleich, Verkehrsgestaltung, Sicherheitsverarbeitung usw. Das Thema dieses Mal ist die Implementierung von Sidecar in Golang. Als Nächstes wird in diesem Artikel die Bedeutung der Sidecar-Konstruktion, die Funktionsweise von Sidecar und die Verwendung von Golang zur Implementierung von Sidecar-Diensten ausführlich vorgestellt.
Zunächst müssen wir die Rolle von Sidecar klären. In einer serviceorientierten Architektur müssen sich viele Dienste gegenseitig aufrufen. In diesem Fall treten einige Probleme auf. Wenn beispielsweise Dienst A auf Dienst B zugreifen möchte, muss er einen aufrufenden Client entwickeln. In diesem Client müssen wir die Aufrufmethode, die Adresse, den Port, das Protokoll usw. bestimmen. Je mehr Dienste vorhanden sind, desto komplizierter wird es die anrufende Beziehung wird sein. Mithilfe von Sidecar müssen wir lediglich in jeder Dienstinstanz einen Sidecar bereitstellen, der alle Anforderungen abfangen und entsprechend verarbeiten kann, wodurch die Komplexität der Zugriffsbeziehung beseitigt und eine einfachere Dienstaufrufmethode bereitgestellt wird.
Der Hauptworkflow von Sidecar ist wie folgt:
Schritt 1: Sidecar ist für das Abfangen aller Kundenanfragen verantwortlich.
Schritt 2: Sidecar wandelt die abgefangene Anfrage in ein normales Protokoll um und sendet die Anfrage dann an den Dienst.
Schritt 3: Wenn die Dienstantwort eintrifft, extrahiert Sidecar die Antwort aus dem Dienst, führt eine Rückkonvertierung durch und gibt die Antwort an den Client zurück.
Ein Architekturdiagramm mit Sidecar-Funktion sieht wie folgt aus:
Zunächst müssen Sie den Namen, die Adresse und den Port des Clients bestimmen, den viele Dienste in der richtigen Reihenfolge aufrufen müssen um Anrufe zu tätigen. Wir nennen diesen Dienst Discovery. Die spezifischen Schritte sind wie folgt:
Schritt 1: Diensterkennung: Sidecar muss die Diensterkennungsinformationen der aktuellen Anwendung vom Konfigurationscenter oder Registrierungscenter erfahren. Diese Diensterkennungsinformationen zeichnen alle Dienste der Anwendung sowie deren Adress- und Portinformationen auf. Diese Informationen können verwendet werden, um Sidecar die Durchführung des Dienstaufrufs zu ermöglichen.
Schritt 2: Proxy-Einstellungen: Sidecar muss Anfragen abfangen und Proxy-Einstellungen vornehmen. Wenn die Client-Anfrage über eine entsprechende Kennung verfügt, wird die Anfrage in ein normales Protokollformat umgewandelt und an den Dienst gesendet. Andernfalls lehnt der Sidecar sie ab.
Durch die oben genannten Schritte können Sie den Sidecar-Dienst in Golang implementieren. Die Codeimplementierung kann sich auf den folgenden Prozess beziehen:
//Diensterkennungsadresse definieren
const discoverUrl = "https://srv.discover.local/path"
Typ ServiceDiscoveryClient-Schnittstelle{
FindService (serviceName string) ([]string, error)
}
func NewServiceDiscoveryClient() ServiceDiscoveryClient {
return &serviceDiscoveryClient{discoverUrl}
}
type serviceDiscoveryClient struct{
url string
}
func (c* serviceDiscoveryClient) FindService ( serviceName string) ([]string, error){
//Fordern Sie die Dienstadresse und den Port vom Service Discovery Center an
}
//Definieren Sie den Proxy-Port und den Dienstnamen
const ProxyPort Int = 1000 }
serviceDiscoveryClient ServiceDiscoveryClient
}
func (p*-Proxy) Start()-Fehler {
}
func (p*-Proxy) Stop()-Fehler {
}
$ go run main.go
Das Workflowdiagramm der Golang-Implementierung des Sidecar-Dienstes lautet wie folgt:
Das obige ist der detaillierte Inhalt vonLassen Sie uns darüber sprechen, wie Sie Golang zur Implementierung des Sidecar-Dienstes verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!