EDAS hat zwei oder drei Strategien, um die Spring Cloud Gateway-Produktion verfügbar zu machen

Autor: Kirito

Spring Cloud Gateway ist eine Gateway-Komponente im Spring Cloud-Microservice-Ökosystem und hat schon immer die Aufmerksamkeit von Benutzern in der Java-Community auf sich gezogen. Viele Unternehmen entscheiden sich dafür, es als Microservice-Gateway oder Business-Gateway zu verwenden. In Alibaba Cloud stehen Benutzern viele Gateway-Produkte zur Verfügung, z. B. API Gateway und MSE Higress, die einen PaaS-Ansatz verwenden, um Gateway-Funktionen bereitzustellen. Benutzer müssen nicht mehr auf die Implementierung des Gateways achten und diese direkt abrufen Out-of-the-box-Funktionen. . In der Vergangenheit konnten Benutzer nur wählen, ob sie ihr eigenes Spring Cloud Gateway erstellen oder Cloud-Produkte kaufen möchten. Der heute vorgestellte neue Ansatz von EDAS zur Verbesserung von Spring Cloud Gateway bietet Benutzern jedoch eine neue Wahl.

Spring Cloud Gateway produktionsbereit machen

Das Open-Source-Spring Cloud Gateway weist einige Faktoren auf, die Unternehmensbenutzer beunruhigen, darunter Speicherverluste und Probleme beim Routing-Design. EDAS hat viele bestehende Probleme auf der Grundlage der über viele Jahre gesammelten Spring Cloud Gateway-Erfahrung durch den Cloud-Service-Bus CSB gelöst. Viele Risikofaktoren haben dies getan wurden ebenfalls vermieden, wodurch die Bedenken der Benutzer hinsichtlich der Verwendung der Spring Cloud Gateway-Technologie vollständig beseitigt wurden.

  • Speicherverlustproblem, dieses Problem stammt aus der Produktionspraxis von CSB. Die unterste Schicht von Spring Cloud Gateway basiert auf Netty für die E/A-Kommunikation. Personen, die mit Netty vertraut sind, sollten wissen, dass es über ein Lese- und Schreibpufferdesign verfügt. Wenn der Kommunikationsinhalt klein ist B. beim Hochladen einer Datei, wird eine neue Speicherzuweisung ausgelöst. Beim Andocken an Netty weist Spring Cloud Gateway jedoch einen logischen Fehler auf, der zu einem neu zugewiesenen Pool führt Der Speicher kann nicht vollständig recycelt werden, was zu Speicherlecks außerhalb des Heapspeichers führt. Darüber hinaus wird dieser Off-Heap-Speicher von Netty mithilfe von Unsafe zugewiesen und kann mit herkömmlichen JVM-Tools nicht beobachtet werden, sodass er sehr verborgen ist.

EDAS empfiehlt, den Startparameter -Dio.netty.allocator.type=unpooled zur Spring Cloud Gateway-Anwendung hinzuzufügen, damit der zugewiesene temporäre Speicher nicht gepoolt wird, wenn eine Anforderung den Chunked-Puffer verfehlt, um Speicherlecks zu vermeiden.

-Dio.netty.allocator.type=unpooled führt nicht zu Leistungseinbußen. Nur große Pakete lösen die Zuweisung dieses Speichers aus. Die Best Practice für das Gateway sollte keine Datei-Uploads zulassen. Dieser Parameter wird für ein Vertuschungsverhalten hinzugefügt sich mit Nicht-Mainstream-Szenen befassen.

  • Das Open-Source-Spring Cloud Gateway bietet keine Funktionen zur Überprüfung der Routing-Konfiguration. Wenn Routing-Konfigurationsfehler auftreten, kann dies katastrophale Folgen haben. Wenn Sie beispielsweise beim Konfigurieren des Routings versehentlich POST anstelle von PEST schreiben: Prädikate: Methode = PEST, kann dies dazu führen, dass alle Routen in Das Gateway ist ungültig und der Explosionsradius ist extrem groß.

EDAS empfiehlt, spring.cloud.gateway.fail-on-route-definition-error: false für Spring Cloud Gateway-Anwendungen zu konfigurieren, um den Explosionsradius zu reduzieren. Über EDAS erstellte Routen werden überprüft, um sicherzustellen, dass das Format der Route korrekt ist und um Probleme im Voraus zu vermeiden.

Dies sind nur einige Beispiele dafür, wie EDAS die Spring Cloud Gateway-Lösung erweitert. EDAS schützt die Gateways der Benutzer umfassend in Bezug auf Leistung, Sicherheit, Stabilität usw. und ermöglicht es den Benutzern, vollständig zum Unternehmen selbst zurückzukehren.

EDAS konzentriert sich auf das grundlegende Thema, Spring Cloud Gateway für die Produktion verfügbar zu machen und Benutzern die sichere Verwendung von Spring Cloud Gateway in der Cloud zu ermöglichen, und hat eine neue Funktion eingeführt, um Spring Cloud Gateway auf nicht-intrusive Weise zu verbessern.

Merkmale

Wie wir alle wissen, werden in EDAS bereitgestellte Java-Anwendungen einen Java-Agenten bereitstellen. Durch die Java-Agent-Technologie bietet EDAS umfassende Microservice-Governance- und Observability-Funktionen. Die dieses Mal eingeführten erweiterten Funktionen von Spring Cloud Gateway verwenden ebenfalls diesen Java-Agenten. Agent-Implementierung.

Die intuitivste Änderung, die durch die EDAS-Erweiterung Spring Cloud Gateway hervorgerufen wird, besteht darin, eine White-Screen-Konsole bereitzustellen, um Benutzervorgänge zu erleichtern und viele erweiterte Funktionen bereitzustellen:

  • Dynamische Konfiguration
  • Benutzerdefiniertes Plugin
  • Routen-Debugging
  • Herabstufung der Strombegrenzung
  • Verbesserte Beobachtbarkeit

Um Benutzern ein intuitives Verständnis zu ermöglichen, beginnt dieser Artikel mit einem Schnellstart.

Stellen Sie Spring Cloud Gateway bereit

Benutzer können das vorhandene Spring Cloud Gateway in ein JAR-Paket oder Image packen und in EDAS bereitstellen, oder sie können das von EDAS bereitgestellte Demo-Bereitstellungspaket für die Bereitstellung verwenden. Wie in der Abbildung oben gezeigt, hat EDAS das Demo-Bereitstellungspaket der Spring Cloud Gateway-Anwendung neu unterstützt. In diesem Bereitstellungspaket wurde vorab ein Nacos-Registrierungscenter konfiguriert, das automatisch eine Verbindung zum aktuell bereitgestellten Microservice-Bereich herstellt, ohne dass Routing konfiguriert werden muss. Da die dynamische Routing-Konfiguration als nächstes demonstriert wird, ist es nicht erforderlich, sie vorab in der Konfigurationsdatei zu konfigurieren. Der gesamte Bereitstellungsprozess unterscheidet sich nicht von der Bereitstellung einer gewöhnlichen Microservice-Anwendung.

Routen erstellen und testen

EDAS erkennt die Merkmale der Spring Cloud Gateway-Anwendung und fügt das Anwendungs-Gateway-Menü dynamisch zur Menüleiste hinzu. Im Schnellstart erstellt das Beispiel zwei Routen, nämlich das Direct-Request-Szenario im http://-Format und das Service-Discovery-Szenario im lb://-Format. Um das Testen zu erleichtern, können Sie in der Anwendungsübersicht einen öffentlichen Netzwerk-SLB für die Gateway-Anwendung konfigurieren und ihn über Curl-Anfragen testen:

~ curl 121.xx.xx.xx/httpbin/get
{
  "args": {},
  "headers": {
    "Aaa": "ccc",
    "Accept": "*/*",
    "Content-Length": "0",
    "Eagleeye-Ip": "192.168.2.1",
    "Eagleeye-Pappname": "5ae05114-bc80-4a32-9048-209b3a93d723",
    "Eagleeye-Prpc": "/httpbin/get",
    "Eagleeye-Pspanid": "-7254661991881594415",
    "Eagleeye-Root-App": "5ae05114-bc80-4a32-9048-209b3a93d723",
    "Eagleeye-Rpcid": "0.2.1",
    "Eagleeye-Sampled": "s0",
    "Eagleeye-Spanid": "-1207596966212570593",
    "Eagleeye-Traceid": "eac0a8020116974429411421021d0001",
    "Eagleeye-Userdata": "__microservice_match_result__=[]",
    "Forwarded": "proto=http;host=121.xx.xx.xx;for=\"140.xx.xx.xx\"",
    "Gfs.Scg.Ip": "192.168.2.1",
    "Host": "httpbin.org",
    "Name": "kirito,kirito",
    "User-Agent": "curl/7.64.1",
    "X-Amzn-Trace-Id": "Root=1-652cec7d-50f852f622c546f20f8997fe",
    "X-Forwarded-Host": "121.xx.xx.xx",
    "X-Forwarded-Prefix": "/httpbin"
  },
  "origin": "121.xx.xx.xx, 47.xx.xx.xx",
  "url": "http://121.xx.xx.xx/get"
}

Das Gateway hat die Anfrage erfolgreich weitergeleitet und der Routing-Test ist abgeschlossen.

Lösungsvorteile

In den folgenden Situationen können Sie die Verwendung der EDAS Spring Cloud Gateway-Erweiterungslösung in Betracht ziehen:

  • Ich verwende bereits Spring Cloud Gateway
  • Das Gateway hat starke geschäftliche Anpassungsanforderungen, wie z. B. das Andocken von Benutzern/Berechtigungssystemen auf Unternehmensebene.
  • Der Java-Technologie-Stack dominiert und hofft auf eine unabhängige Kontrolle über Gateway-Komponenten
  • Der Gateway-Backend-Dienst nutzt den Spring Cloud-Technologie-Stack

Die von EDAS bereitgestellte Spring Cloud Gateway-Erweiterungslösung entkoppelt die Geschäftsattribute und Middleware-Attribute des Gateways. Benutzer können sich auf die sekundäre Entwicklung basierend auf dem Open-Source-Spring Cloud Gateway konzentrieren, komplexe Geschäftslogik einfügen und die Funktionen des Gateways integrieren (dynamische Konfiguration). , Herabstufung des Stromlimits usw.), Sicherheit, Leistung und andere Middleware-Attribute werden an EDAS übergeben.

Wenn die Spring Cloud Gateway-Anwendung von EDAS gehostet wird, müssen Benutzer, die Spring Cloud Gateway bereits verwenden, keinen Code ändern und können viele erweiterte Funktionen erhalten, während die ursprünglichen Erweiterungspunkte erhalten bleiben. Zukünftig kann die sekundäre Entwicklung weiterhin basierend auf der Anwendung fortgesetzt werden, sodass die Gateway-Anwendung die gleiche Entwicklungserfahrung wie die Geschäftsanwendung erhalten kann. In Bezug auf die Unterstützung benutzerdefinierter Erweiterungen erfordern herkömmliche PaaS-Gateways im Allgemeinen, dass Benutzer sich an die eigenen Spezifikationen des Gateways anpassen und unbekannte Sprachen oder Plug-In-Mechanismen verwenden, was mit gewissen Lernkosten und Risiken verbunden ist.

Wenn der Benutzer derzeit nicht über ein Gateway verfügt, über die Hinzufügung eines neuen Gateways nachdenkt und Recherchen zu Gateway-Lösungen durchführt, muss er/sie seine Geschäftsszenarien vollständig berücksichtigen. Wenn Schlüsselwörter wie Java Technology Stack und Spring Cloud Microservice System erfüllt sind, können Sie dieser Lösung auch Vorrang einräumen.

Im Vergleich zu PaaS-Gateway-Produkten derselben Art in Alibaba Cloud gibt es auch eigene Nutzungsszenarien. Beispielsweise kann API Gateway eine verfeinerte API-Verwaltung erreichen und MSE Higress kann als Drei-in-Eins-Gateway oder als Implementierung verwendet werden von K8s Ingress. Sie können die Gateway-Lösung entsprechend Ihren eigenen Anforderungen auswählen. Die erweiterte EDAS-Spring-Cloud-Gateway-Lösung bietet Benutzern eine neue Option.

Im Vergleich zum Open-Source-Spring-Cloud-Gateway verfügt die EDAS-Agent-Erweiterungslösung über die folgenden Funktionserweiterungen, da sie zu 100 % mit Open-Source-Funktionen kompatibel ist.

Fähigkeitsverbesserung

Dynamische Konfigurationsfähigkeit

EDAS bietet dynamische Konfigurationsfunktionen für das Routing (Route) und die Plug-Ins (Gateway Filter) von Spring Cloud Gateway, die auf einem weißen Bildschirm angezeigt werden, um die Benutzerkonfiguration zu erleichtern.

Wenn Routen im Spring Cloud Gateway-Projekt konfiguriert wurden, beispielsweise in application.yml und gleichzeitig in der EDAS-Konsole konfiguriert wurden, werden diese Routen schließlich zu einem Routensatz zusammengeführt. Es ist zu beachten, dass die EDAS-Konsole nur die von EDAS veröffentlichte Routing-Konfiguration und nicht die Konfiguration in application.yml anzeigt, aber tatsächlich werden beide Routen wirksam. Bei Verwendung dieser Lösung wird empfohlen, dass Benutzer die Konfiguration durch Konfigurationsimport und -export auf die EDAS-Konsole migrieren, um eine einheitliche Verwaltung zu ermöglichen.

Konfigurationsimport und -export

Sowohl Routing als auch globale Plug-Ins unterstützen die Erstellung über Yaml. Das Format von Yaml folgt der Schemaspezifikation des Open-Source-Spring Cloud Gateway. Im Folgenden finden Sie zwei Konfigurationsbeispiele:

spring:
  cloud:
    gateway:
      routes:
      # 1. 利用域名进行路由匹配,且后端是固定 HTTP URL 的场景
      - id: r-demo
        predicates:
        # 只有域名为 demo.com 的请求才会匹配上该路由
        - Host=demo.com
        filters:
        # 该插件在转发请求时,在请求头中添加 Header 键值对
        - AddRequestHeader=a,b
        # uri 里填写后端 HTTP URL
        uri: http://demo.com
        # order 代表路由的优先级,值越小,优先级越高
        order: 1000
      # 2. 利用路径前缀进行路由匹配,且后端是微服务的场景
      - id: r-demo-2
        predicates:
        # 请求路径以 /demo-2 开头,才会匹配上该路由
        - Path=/demo-2/**
        filters:
        # 该插件确保请求在转发至后端服务时,会移除掉 /demo-2 的前缀
        - StripPrefix=1
        # 后端为微服务时,uri应该以 lb:// 开头,并填写服务名
        uri: lb://service-provider
        # 可以为路由添加元数据,以在插件中使用
        metadata:
          ccc: ddd
          eee: 10
        order: 1000

Routing r-demo ist ein Konfigurationsbeispiel für Routing über Domänennamen. Der Backend-Dienst entspricht einer direkt angeforderten Adresse. Routing r-demo-2 ist ein Konfigurationsbeispiel für Routing durch Pfadpräfixabgleich. Das StripPrefix-Plug-in ist so konfiguriert Entfernen Sie beim Weiterleiten beim Erreichen des Backends das für den Abgleich verwendete Präfix, und der Backend-Dienst beginnt mit lb, was auf ein Diensterkennungsszenario hinweist.

Es unterstützt auch die Stapelanzeige von Routing-Yaml-Definitionen:

Das Design der Yaml-Erstellung und -Anzeige soll so weit wie möglich an den Spezifikationen des Open-Source-Spring-Cloud-Gateways ausgerichtet sein. Wenn der Benutzer ein erfahrener Benutzer des Open-Source-Spring-Cloud-Gateways ist, bleibt die ursprüngliche Erfahrung des Benutzers erhalten.

Gleichzeitig kann mit Hilfe dieser Funktion die Konfiguration mehrerer Gateway-Sets synchronisiert werden. Nachdem beispielsweise ein Routenstapel in der Testumgebung überprüft wurde und auf das Produktions-Gateway migriert werden muss, müssen Sie nur noch Sie müssen die Routen in der Testumgebung auswählen und exportieren und sie dann in das Produktionsgateway importieren.

Sie können diese Funktion auch verwenden, um die Routen in der lokalen Konfigurationsdatei des Benutzers in EDAS zu importieren, die vollständig von EDAS verwaltet werden. Die von EDAS bereitgestellten dynamischen Konfigurationsfunktionen sind komfortabler zu verwenden.

Plug-in-Interaktion

Spring Cloud Gateway bietet einen sehr umfangreichen Plug-in-Mechanismus (GatewayFilter), der die Konfiguration auf Routing- und globaler Ebene ermöglicht. Auf dieser Basis verbessert EDAS die Benutzerfreundlichkeit von Plug-ins.

Die native Plug-In-Konfiguration von Spring Cloud Gateway verwendet eine optimierte Konfigurationsmethode. Bei einigen weniger häufig verwendeten Plug-Ins ist es schwierig, intuitiv zu beurteilen, wie Parameter hinzugefügt werden. In EDAS gibt es solche Probleme nicht. EDAS interpretiert die Plug-Ins Erklärung und Parameter. Zerlegen Sie, ob es erforderlich ist, welche Bedeutung die Parameter haben und wie viele Parameter vorhanden sind, um Missbrauch zu vermeiden.

Plug-in-Referenz:

Zu beachten ist, dass diese Plug-Ins wiederholt hinzugefügt werden dürfen. Es wird jedoch empfohlen, einige Plug-Ins nur einmal zu konfigurieren, z. B. StripPrefix, SetPath usw., da sonst ein unbekanntes Verhalten auftritt.

schnell Test

Für Spring Cloud Gateway-Anwendungen listet EDAS die Routing-Pfade in der Konsole auf, damit Benutzer Routing-Tests durchführen können. Mithilfe der Schnelltestfunktion können Sie die Routing-Konfiguration nach Abschluss schnell überprüfen, um festzustellen, ob die Konfiguration korrekt ist.

beobachtbar

Das Open-Source-Spring-Cloud-Gateway ist nicht mit dem Zugriffsprotokoll ausgestattet, das das Gateway haben sollte. EDAS vervollständigt diese notwendige Funktion. Jede Anforderung, die das Gateway passiert, wird in /home/admin/.opt/ArmsAgent/logs/scg-access gedruckt .log-Pfad. Unten können Benutzer ihn im Protokollcenter der Anwendungsdetails anzeigen:

Benutzer können wählen, ob sie diese Daten zur Überwachung in SLS oder einem benutzerdefinierten Protokollcenter sammeln möchten.

Beschreibung des access.log-Protokollformats:

Seriennummer veranschaulichen Feldname Inhaltsbeispiel
1 Protokollierungszeit Terminzeit 2023-06-19 16:06:53 966
2 Trace-ID anfordern TraceId 0ab32f9f15293956139457176d485a
3 Client-IP clientIp 127.0.0.1
4 Anfragemethode Methode ERHALTEN
5 Anforderungspfad Weg /httpbin/get
6 Datengröße anfordern requestSize 122
7 Startzeit anfordern Startzeit 1667381534546
8 Passende Routing-ID Routen-ID sc-A
Der der Route entsprechende URI routeUri http://httpbin.org:80、lb://sc-A
9 Startzeit des Back-End-Anrufs backendStartTime 1667381534546
10 Backend-Anfragemethode backendMethode ERHALTEN
11 Backend-Anfrage-URL backendUrl httpbin.org/get
13 Größe des Back-End-Anfragetextes backendRequestSize 122
14 Backend-Antwortcode backendStatusCode 200
15 Größe des Back-End-Antworttexts backendResponseSize 433
16 Endzeit des Back-End-Anrufs backendEndTIme 1667381534560
17 Back-End-Anrufzeit backendRt 14
18 Antwortcode anfordern Statuscode 200
19 Größe des Anforderungsantworttexts Antwortgröße 433
20 Ist der Anruf erfolgreich? Status Erfolg/Misserfolg
21 Fehlermeldung errorMsg Bei Erfolg: - Spezifische Informationen zum Fehler ausdrucken, zum Beispiel: Dienst nicht verfügbar
22 Endzeit anfordern Endzeit 1667381534565
23 Gesamte Anfragezeit rt 19

Folgeplanung

Die von EDAS erweiterte Spring Cloud Gateway-Lösung wird in Zukunft weitere Funktionen bieten, um das Gateway-Ökosystem zu bereichern. Zu den derzeit geplanten Funktionen gehören:

  • Bereichern Sie das Plug-in-Ökosystem, fügen Sie Authentifizierung, Herabstufung des Stromlimits und domänenübergreifende Plug-ins hinzu
  • Greifen Sie über alle Microservice-Bereiche hinweg auf Microservices zu
  • Unterstützen Sie Metrikindikatoren und bieten Sie Gateway-Ressourcenüberwachung und Geschäftsüberwachung
  • Eigenständige QOS-Fehlerbehebungsfunktion

Benutzer können gerne Feedback geben und mit uns kommunizieren. DingTalk-Kommunikationsgruppe: 23197114.

Informationen zu Erfahrungen finden Sie in der Benutzerdokumentation: https://help.aliyun.com/zh/edas/user-guide/spring-cloud-gateway-application-routing

Der Autor eines bekannten Open-Source-Projekts verlor seinen Job aufgrund von Manie – „Suche nach Geld online“ No Star, No Fix 2023 Die zehn besten technischen Errungenschaften der Welt werden veröffentlicht: ChatGPT, Hongmeng Operating System, China Space Station und andere ausgewählte ByteDance wurden von OpenAI „verboten“. Google kündigt die beliebteste Chrome-Erweiterung im Jahr 2023 an Akademiker Ni Guangnan: Ich hoffe, dass inländische SSD importierte HDD ersetzen wird, um Xiaomi-Mobiltelefon BL zu entsperren? Stellen Sie zunächst eine Interviewfrage für Java-Programmierer. Arm hat mehr als 70 chinesische Ingenieure entlassen und plant, sein chinesisches Softwaregeschäft neu zu organisieren. OpenKylin 2.0 enthüllt | UKUI 4.10 Doppeldiamantendesign, schön und hochwertig! Manjaro 23.1 veröffentlicht, Codename „Vulcan“
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/3874284/blog/10347977
Empfohlen
Rangfolge