Bewährte Praktiken für den Aufbau zuverlässiger APIs

Navendu Pottekkat

Navendu Pottekkat

August 18, 2022

Technology

Wenn Ihre APIs skalieren, steigt der Bedarf, sie zuverlässig und robust zu gestalten.

Dieser Artikel diskutiert die besten Praktiken für den Aufbau zuverlässiger APIs, indem eine spezielle Art von Reverse-Proxys, sogenannte API-Gateways, vorgestellt wird.

Wir werden uns mit folgenden Themen befassen:

  1. Probleme mit traditionellen API-Designs
  2. Was API-Gateways sind
  3. Wie API-Gateways APIs verbessern und
  4. Muster und Beispiele für die Verwendung von API-Gateways

Aber zuerst: Was sind "zuverlässige" APIs?

Was macht eine API zuverlässig?

Als Dienstleister haben Sie möglicherweise Service-Level-Agreements (SLAs) mit Ihren Kunden, die normalerweise in Form von Uptime angegeben werden – der Zeit, in der der Dienst garantiert online und betriebsbereit ist.

Uptime ist eine kurzsichtige Sicht auf Zuverlässigkeit. Um zu verstehen, was es bedeutet, zuverlässig zu sein, müssen Sie die Faktoren betrachten, die die Uptime beeinflussen. Sobald Sie diese Faktoren verstanden haben, sind Sie besser in der Lage, zuverlässige Dienste zu erstellen.

Schauen wir uns diese Faktoren und die Fragen an, die sie aufwerfen:

  1. Latenz: Wie schnell reagiert Ihre API auf Anfragen?
  2. Sicherheit: Wer kann auf Ihre API zugreifen? Ist sie sicher?
  3. Ausfallhäufigkeit: Wie häufig ist Ihre API nicht verfügbar?
  4. Konsistenz: Sind Ihre API-Endpunkte konstant? Müssen Verbraucher ihren Code oft ändern?
  5. Überwachung und Berichterstattung: Können Sie Probleme und Fehler in Ihrer API beobachten? Berichten Sie diese Ihren Verbrauchern?

Netzwerkfehler/api.png

Wenn Organisationen zu Cloud-nativen Architekturen wechseln, wird es für die Entwicklungsteams schwierig, diese Faktoren für jeden ihrer Dienste zu berücksichtigen. Und wenn diese Systeme skalieren, wäre es viel einfacher, diese Verantwortlichkeiten an ein einzelnes, separates System zu delegieren. Sagen Sie Hallo zu API-Gateways!

API-Gateway, der einheitliche Einstiegspunkt

Ein API-Gateway fungiert als Vermittler zwischen Ihren Clients und Ihren APIs. Es akzeptiert den gesamten Datenverkehr (API-Aufrufe) wie Reverse-Proxys, leitet die Anfrage an die erforderlichen Dienste in Ihrem Backend weiter und gibt die benötigten Ergebnisse zurück.

Netzwerkfehler/api gateway.png

Ein API-Gateway kann der zentrale Punkt sein, der sich um alle Authentifizierungs-, Sicherheits-, Datenverkehrssteuerungs- und Überwachungsanliegen kümmert, sodass sich die API-Entwickler auf die geschäftlichen Anforderungen konzentrieren können und es einfacher wird, die Zuverlässigkeit zu verbessern.

Netzwerkfehler/api gateway reliability.png

Es gibt viele Open-Source- und verwaltete API-Gateway-Angebote. In diesem Artikel werde ich Apache APISIX verwenden.

Der folgende Abschnitt beschreibt einige der besten Praktiken, um Ihre APIs mithilfe von API-Gateways zuverlässig zu machen.

Best Practices für Zuverlässigkeit mit API-Gateways

Wir werden uns mehr auf das zugrunde liegende Muster als auf die tatsächliche Implementierung konzentrieren, da diese je nach Ihrer Wahl des API-Gateways variieren kann.

Ich werde diese Muster in drei Kategorien einteilen:

  1. Authentifizierung und Sicherheit
  2. Überwachung und Beobachtbarkeit
  3. Versionskontrolle und Null-Ausfallzeit

Wir werden uns jede Kategorie im Detail ansehen.

Authentifizierung und Sicherheit

Benutzerauthentifizierung

Authentifizierte Anfragen mit API-Gateways sichern die Interaktionen zwischen Client und API. Nachdem ein Client authentifiziert wurde, kann Ihr API-Gateway die erhaltenen Client-Details für eine fein abgestimmte Kontrolle verwenden.

Netzwerkfehler/user authentication.png

APISIX handhabt die Authentifizierung direkt über Plugins wie key-auth und jwt-auth. APISIX unterstützt auch OAuth-Authentifizierung und rollenbasierte Zugriffskontrollsysteme wie wolf über Plugins wie openid-connect und wolf-rbac.

Ratenbegrenzung

Beabsichtigte (DoS-Angriffe) und unbeabsichtigte (Clients, die zu viele Anfragen stellen) Datenverkehrsspitzen können Ihre APIs wie ein Kartenhaus zum Einsturz bringen. Die Einrichtung einer Ratenbegrenzung verbessert die Zuverlässigkeit Ihrer Systeme bei der Handhabung solcher Szenarien.

Sie können eine Ratenbegrenzung auf Ihrem API-Gateway einrichten, und wenn die Anzahl der Anfragen einen Schwellenwert überschreitet, könnte das API-Gateway die überschüssigen Anfragen verzögern oder ablehnen.

Netzwerkfehler/rate limiting.png

Mit APISIX können Sie eines der drei Plugins verwenden, um Ratenbegrenzungen basierend auf der Anzahl der Anfragen, der Anzahl gleichzeitiger Anfragen pro Client und der Anzahl (limit-req, limit-conn, limit-count) zu konfigurieren.

Überwachung und Beobachtbarkeit

Die Zuverlässigkeit Ihrer API und Ihr Überwachungssetup gehen Hand in Hand. Und Sie können Ihre Zuverlässigkeitsmetriken überwachen, indem Sie die Überwachung auf Ihrem API-Gateway einrichten.

Netzwerkfehler/monitoring and observability.png

API-Protokolle und Traces liefern detaillierte Informationen über einen API-Aufruf. Diese Informationen helfen Ihnen, so schnell wie möglich zu erkennen, wann Ihre API fehlgeschlagen ist oder einen Fehler aufweist. Stille Fehler führen zu unkorrigierten Fehlern, die in Zukunft Probleme verursachen können.

Mit einiger Konfiguration können Sie auch den zukünftigen Datenverkehr vorhersagen und antizipieren, was Ihnen hilft, zuverlässig zu skalieren.

APISIX verfügt über Plugins, die sich in Protokollierungs- (Apache SkyWalking, RocketMQ), Metrik- (Prometheus, Datadog) und Tracing-Plattformen/Spezifikationen (OpenTelemetry, Zipkin) integrieren. Sie können mehr über API-Beobachtbarkeit mit APISIX-Plugins lesen.

Versionskontrolle und Null-Ausfallzeit

Canary-Release

Wenn Sie auf neue Versionen Ihrer APIs umstellen, müssen Sie sicherstellen, dass Sie Ihren Datenverkehr nicht verlieren. Clients sollten weiterhin Anfragen an Ihre API stellen und die richtige Antwort erhalten können.

Mit einem API-Gateway können Sie Canary-Releases einrichten. Dies stellt sicher, dass Ihre API während des Übergangs funktionsfähig bleibt, und Sie können bei Problemen auch auf die ältere Version zurückgreifen.

Zunächst leitet das API-Gateway den gesamten Datenverkehr an die alte Version Ihrer API weiter.

Netzwerkfehler/old version.png

Wenn Sie eine neue Version haben, können Sie das API-Gateway so konfigurieren, dass ein Teil Ihres Datenverkehrs an diese neue Version weitergeleitet wird. Sie können den Prozentsatz des Datenverkehrs zu Ihrem neuen Dienst schrittweise erhöhen und überprüfen, ob alles wie erwartet funktioniert.

Netzwerkfehler/canary release.png

Schließlich können Sie den gesamten Datenverkehr an Ihre neue API weiterleiten.

Netzwerkfehler/new API

APISIX verwendet das traffic-split Plugin, mit dem Sie den Datenverkehr zu Ihren Diensten steuern können. Sie können es verwenden, um Canary-Releases oder Ihre eigene Release-Konfiguration einzurichten.

Circuit Breaking

Wenn einer Ihrer Upstream-Dienste nicht verfügbar ist oder eine hohe Latenz aufweist, muss er von Ihrem System getrennt werden. Andernfalls wird der Client die Anfrage weiterhin wiederholen, was zu einer Erschöpfung der Ressourcen führen kann. Dieser Fehler kann sich auf andere Dienste in Ihrem System ausbreiten und sie zum Absturz bringen.

Ähnlich wie elektrische Leistungsschalter fehlerhafte Komponenten von einem Stromkreis isolieren, verfügen API-Gateways über eine Circuit-Breaker-Funktion, die fehlerhafte Dienste trennt und das System gesund hält. Der Datenverkehr zu diesen Diensten wird umgeleitet oder verzögert, bis der Dienst wieder gesund ist.

Netzwerkfehler/circuit breaking.png

APISIX verfügt über ein api-breaker Plugin, das dieses Muster implementiert.

Weiterleitungen

Wenn Sie Ihre APIs aktualisieren, können sich ihre Endpunkte ändern. Traditionell würde dies bedeuten, dass die Client-Anwendung Anfragen an den /new-api-endpoint statt an den /old-api-endpoint senden sollte, was bedeutet, dass Ihre Verbraucher jeden Aufruf an diesen API-Endpunkt manuell ändern müssen.

Wenn dies unerwartet geschieht, kann dies Client-Anwendungen zum Absturz bringen.

Mit einem API-Gateway können Sie eine Abstraktionsschicht bereitstellen und Anfragen an den /new-api-endpoint weiterleiten, ohne dass die Clients ihre Anfragen ändern müssen. Mit geeigneten Weiterleitungsstatuscodes und -nachrichten können Sie den /old-api-endpoint schrittweise abschaffen, ohne dass Ihre Verbraucher Ausfallzeiten erleben.

Netzwerkfehler/redirect.png

Mit APISIX können Sie das redirect Plugin verwenden, um Weiterleitungen zu konfigurieren.

Fazit

Wenn Zuverlässigkeit zu einem primären Anliegen wird, ist es offensichtlich, dass API-Gateways notwendig sind, da immer mehr Organisationen ihre Monolithen in Microservices aufteilen und zu Cloud-nativen Architekturen wechseln.

Das bedeutet jedoch nicht, dass API-Gateways für jeden geeignet sind. Abhängig von der Größe und Nutzung Ihrer API könnte ein API-Gateway übertrieben sein, und Sie könnten mit einem Reverse-Proxy mit grundlegenden Routing- und Lastausgleichsfunktionen auskommen.

Die hier erwähnten Anwendungsfälle kratzen nur an der Oberfläche der Fähigkeiten eines API-Gateways. Sie können mehr über API-Gateways und Apache APISIX auf apisix.apache.org erfahren.

Tags: