Heim  >  Artikel  >  Backend-Entwicklung  >  Golang baut ein leichtes Gateway-System

Golang baut ein leichtes Gateway-System

PHPz
PHPzOriginal
2023-03-31 10:25:481478Durchsuche

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:

  • Anforderungsanalyse
  • Technische Auswahl
  • Architekturdesign
  • Implementierungsschritte
  1. Anforderungsanalyse

Im Allgemeinen muss ein Gateway-System die folgenden Funktionen implementieren:

  • Anforderungsweiterleitung und Lastausgleich
  • Sicherheitskontrolle (z. B. Schnittstellenauthentifizierung und Zugriffskontrolle usw.)
  • Protokollierung
  • Schnittstellenweiterleitung und Wiederholungsversuche

Wir verwenden die Golang-Sprache, um die oben genannten Funktionen zu implementieren und die Effizienz sicherzustellen Das Gateway-System Maximale Ausnutzung der Ressourcen.

  1. Technologieauswahl

Wir werden die folgenden Haupttechnologie-Stacks verwenden:

  • golang
  • Gin-Framework
  • Etcd
  • Redis
  • JWT
  1. Architekturdesign

Dieses Gateway-System übernimmt die „Umkehrung“ Agent + ETCD + Redis“-Architekturmodell.

Dreischichtige Architektur:

  • Browser-, Client- und andere Anforderungsschichten.
  • API-Schicht (d. h. Back-End-Dienst)
  • Gateway-Schicht

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.

  1. Implementierungsschritte

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.

  1. Fazit

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn