Mit der Entwicklung des Internets ist die Microservice-Architektur für immer mehr Unternehmen zur Wahl geworden. In der Microservice-Architektur ist das Gateway ein unverzichtbarer Bestandteil. Als wichtiger Teil der Microservice-Architektur ist das Gateway für das Anforderungsrouting und den Lastausgleich, die Sicherheitskontrolle und die Protokollkonvertierung verantwortlich und kann effektiv eine einheitliche Verwaltung und Zugriffskontrolle von Back-End-Diensten durchführen.
Derzeit gibt es viele häufig verwendete Gateway-Produkte auf dem Markt, wie z. B. Kong, APISIX usw. Diese Gateway-Produkte weisen jedoch einige Probleme auf, z. B. hohe Lernkosten und eine komplexe Konfiguration. Sie sind möglicherweise für einige einfache Szenarien überqualifiziert.
Als einfache und effiziente Programmiersprache nutzt Golang seine Vorteile der hohen Parallelität und Integration voll aus und kann zum Aufbau eines leichten Gateway-Systems verwendet werden. In diesem Artikel werden die folgenden Aspekte erläutert:
Im Allgemeinen muss ein Gateway-System die folgenden Funktionen implementieren:
Wir verwenden die Golang-Sprache, um die oben genannten Funktionen zu implementieren und die Effizienz sicherzustellen Das Gateway-System Maximale Ausnutzung der Ressourcen.
Wir werden die folgenden Haupttechnologie-Stacks verwenden:
Dieses Gateway-System übernimmt die „Umkehrung“ Agent + ETCD + Redis“-Architekturmodell.
Dreischichtige Architektur:
Mehrere Server und jeder Server verfügt über mehrere APIs. Für einen hohen gleichzeitigen Zugriff muss er in der Lage sein, dynamisch zunehmende und abnehmende API-Knoten zu unterstützen. Verwenden Sie ETCD (einen hochverfügbaren Schlüsselwertspeicher) für die Statusverwaltung und Erkennung von API-Knoten. Verwenden Sie Redis als Protobuf-Datencache für die API.
4.1 Golang, Gin und zugehörige Abhängigkeiten installieren
Fügen Sie nach Abschluss der Installation die Abhängigkeiten hinzu, die Sie in der Datei govendor.yaml verwenden müssen, wie unten gezeigt:
dependencies: - github.com/gin-gonic/gin - github.com/coreos/etcd/clientv3 - github.com/go-redis/redis - github.com/dgrijalva/jwt-go
Verwenden Sie den Befehl go, um Führen Sie den folgenden Befehl aus:
go get -u github.com/kardianos/govendor govendor init govendor add +external govendor add github.com/gin-gonic/gin@v1.3.0
4.2 Grundlegende Verwendung von Gin
Sie können mit Gin ganz einfach ein HTTP-Framework erstellen, wie unten gezeigt:
package main import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) r.Run() // listen and serve on 0.0.0.0:8080 }
4.3 Verwendung von ETCD und Redis
ETCD ist ein hochverfügbarer Schlüsselwertspeicher, der kann zur Diensterkennung und zum Konfigurieren der Freigabe verwendet werden. In Golang verwenden wir die offiziell bereitgestellte clientv3-Bibliothek, um etcd zu betreiben.
Redis ist eine leistungsstarke Schlüsselwertdatenbank. Wir werden die go-redis-Bibliothek verwenden, um Redis in Golang zu verwenden.
4.4 Verwendung von JWT
Um die Schnittstellensicherheit zu gewährleisten, verwenden wir JWT zur Schnittstellenauthentifizierung. JWT, JSON Web Token, ist eine Webstandardmethode zur Übertragung von Identitätsauthentifizierungs- und Autorisierungsinformationen. Sein Hauptverwendungsszenario ist die Autorisierung und Authentifizierung von Maschine-zu-Maschine-Schnittstellen.
4.5 Gateway-Implementierung
Für das Gateway selbst umfassen die Hauptfunktionen Anforderungsrouting und Lastausgleich, Sicherheitskontrolle und Protokollierung usw.
Für die Weiterleitung von Anforderungen und den Lastausgleich können wir den ReverseProxy des Gin-Frameworks verwenden, um dies zu erreichen. Die Statusermittlung und Registrierung der API muss über ETCD implementiert werden.
Unser Gateway-System muss mehrere Backend-API-Knoten unterstützen und einen Lastausgleich durchführen. Der Lastausgleichsalgorithmus kann die Polling-Methode, die Zufallsmethode usw. verwenden. Hier verwenden wir die Polling-Methode (RoundRobin) für die Knotenauswahl.
In Bezug auf die Sicherheitskontrolle können wir JWT im Anforderungsheader übergeben, um eine Schnittstellenauthentifizierung zu erreichen.
Fügen Sie abschließend das Protokoll in die Antwort ein und geben Sie das Antwortergebnis zurück.
In diesem Artikel wird kurz der Prozess zum Aufbau eines einfachen Gateway-Systems mithilfe der Golang-Sprache vorgestellt. Dieses Gateway-System implementiert Anforderungsrouting und Lastausgleich mithilfe des GIN-Frameworks, implementiert Statuswartung und Erkennung von API-Knoten über ETCD, verwendet Redis als Protobuf-Datencache der API, verwendet JWT für die Schnittstellenauthentifizierung und fügt schließlich eine Protokollierungsfunktion hinzu. Das mit Golang erstellte Gateway-System ist leichtgewichtig, effizient, leicht zu erlernen und bereitzustellen und eignet sich sehr gut für leichte Szenarien.
Das obige ist der detaillierte Inhalt vonGolang baut ein leichtes Gateway-System. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!