Wie nutzt Zoom APISIX Ingress in seiner Continuous-Delivery-Pipeline?

October 27, 2022

Case Study

Hintergrund

In den letzten Jahren sind viele bekannte Online-Konferenzsoftwarelösungen mit der Entwicklung von Online-Meetings und Remote-Arbeit entstanden. Das typische Beispiel, Zoom, ist zu einem beliebten Meeting-Tool für Homeoffice, Online-Lehre und soziale Szenarien geworden. Es hat 350 Millionen tägliche Meeting-Teilnehmer und fast 470.000 zahlende Geschäftskunden, die die Plattform nutzen. Darüber hinaus zeigen aktuelle Daten, dass die Anzahl der Minuten, die für die Meeting-Facilitation verwendet werden, mehr als 3,3 Billionen pro Jahr erreicht hat.

Allerdings hat Zoom, wie andere SaaS- und Internetunternehmen, technische Herausforderungen erlebt, da sein Geschäft schnell wächst.

  • Eine beträchtliche Anzahl von Microservices: Aufgrund des schnellen Wachstums von Zooms Geschäft und Teams müssen über 100 Backend-Services bereitgestellt werden. Es ist jedoch schwierig, eine große Anzahl von Microservices effizient zu verwalten.

  • Verschiedene Bereitstellungsumgebungen: SaaS-Unternehmen stoßen oft auf Szenarien, in denen Kunden auf dedizierten Clouds, privaten Clouds und Multi-Clouds bereitstellen müssen. Zooms Geschäftsdienste sind weltweit verteilt, daher gibt es technische Herausforderungen mit einer großen Anzahl von Hybrid-Cloud-Umgebungen.

  • Komplexe Infrastruktur: Mittelgroße und große Internetunternehmen haben in der Regel dedizierte Infrastrukturteams, die für API-Gateways, Konfigurationszentren, Schlüsselverwaltung, Protokolle, Überwachungsalarme, Datenbanken usw. verantwortlich sind. Da Zooms verteilte R&D-Teams global agieren, ist es eine große Herausforderung, diese komplexen Middleware- und Infrastrukturkomponenten in die kontinuierliche Lieferpipeline zu integrieren.

Die oben genannten Herausforderungen sind keine einfache additive Beziehung, sondern eine multiplikative. Mit anderen Worten, die tatsächliche Situation ist weitaus komplexer. Die Open-Source-Tools, die Zoom bisher verwendet hat, können jedoch Zooms aktuellen Anforderungen nicht mehr gerecht werden. Deshalb ist eine zuverlässige kontinuierliche Lieferpipeline so wichtig.

Im Folgenden sind die detaillierten Gründe aufgeführt, warum Zoom sich nicht weiter für diese bisherigen Open-Source-Tools entschieden hat.

Helm/KustomizeTerraform/PulumiKubeVela + Crossplane
Kann keine Systeme außer Kubernetes verbindenSchwierig, Terraform in der Kubernetes- und Middleware-Schicht zu verwenden, es sei denn, es werden zusätzliche Provider entwickeltZu neue Technologie mit schnellen Updates, nicht sicher und stabil genug für die Produktionsumgebung
Schwierig, die Plattform im Git-Sub-Repository-Modus zentral zu steuernErhöht die Kosten für das Erlernen einer weiteren Konfigurationsmanagement-Sprache: hclKubevelas Definition von Trait + Cuelang-Vorlagen und seine Programmierausdrucksfähigkeiten reichen nicht aus, um verschiedene nicht-cloud-native Middleware-Plattformen außerhalb des Kubernetes-Systems abzudecken
Schwierig zu warten und zu debuggen aufgrund der komplexen Logik der Helm Chart-VorlagenMono Repo zentrale Steuerung ist für große Teams ungeeignet/
Kein leistungsfähiges Parametersystem, um dynamische Parameter in einer großen Anzahl von Umgebungen zu verwalten//

Aufgrund der Einschränkungen der oben genannten Open-Source-Tools hat Zoom schließlich einige Mainstream-Lösungen für den Aufbau der zugrunde liegenden kontinuierlichen Lieferpipeline untersucht.

Nach einigen Runden von Vergleich und Verifizierung hat sich Zoom schließlich für den APISIX Ingress Controller entschieden, um seine neue kontinuierliche Lieferpipeline zu unterstützen.

Apache APISIX Ingress Controller

Was ist der Apache APISIX Ingress Controller?

Apache APISIX Ingress Controller ist ein Cloud-nativer Ingress-Controller, der Apache APISIX als Datenebene verwendet, um den Datenverkehr zu tragen, und die Funktionalität von Kubernetes durch die Verwendung von CRD (CustomResourceDefinition) erweitert. Er ist dafür verantwortlich, mit dem Kubernetes API-Server zu interagieren, rollenbasierte Zugriffskontrolle (RBAC) zu beantragen, Änderungen zu überwachen, Objektkonvertierungen innerhalb des Ingress-Controllers zu implementieren, die Änderungen zu vergleichen und dann mit Apache APISIX zu synchronisieren. Darüber hinaus kann er benutzerdefinierte Ressourcen unterstützen, einschließlich APISIX Route, APISIX Upstream und andere native Ingresses von Kubernetes, um den externen Datenverkehr zu steuern, der auf in Kubernetes bereitgestellte Dienste zugreift.

Unten ist das Timing-Diagramm des APISIX Ingress Controllers.

Timing-Diagramm von APISIX Ingress

Warum wählt Zoom den APISIX Ingress Controller?

Vor dem oben genannten Hintergrund stellt sich die Frage: Welche Art von kontinuierlicher Lieferpipeline möchte Zoom aufbauen, und wie nutzt es APISIX Ingress, um seine zugrunde liegende kontinuierliche Lieferpipeline zu etablieren?

Zoom hat zuvor NGINX als API-Gateway verwendet. Mit der raschen Entwicklung des Geschäfts und der Zunahme von Microservices werden jedoch die Grenzen der aktuellen NGINX-Lösung immer deutlicher.

Verschiedene Teams müssen NGINX separat pflegen, und Tausende von Zeilen NGINX-Konfigurationsdateien machen die Wartung schwierig. Darüber hinaus kann NGINX nicht schnell skaliert werden, wenn viele Zeilen auf dem Cloud-Server bereitgestellt werden. Über den Reload-Modus von NGINX können Sie diesen Blog lesen. Zooms Geschäfte begannen sich in Richtung Ingress Controller zu entwickeln.

Das API-Gateway-Team hat einige Open-Source-Lösungen untersucht. Nach der Simulation der Migration und Analyse der tatsächlichen Geschäftskonfiguration in NGINX und einer großen Anzahl von Benchmark-Tests der Leistung und des Plugin-Ökosystemvergleichs hat sich Zoom schließlich für das APISIX Ingress Controller-Projekt der Apache Software Foundation entschieden, um ein fortschrittlicheres Cloud-Native-Gateway zu erkunden.

Unter Berücksichtigung seiner Geschäftsszenarien legte Zoom mehr Wert auf die folgenden beiden Teile, die von APISIX Ingress erfüllt werden können.

  • Datensicherheit: Zoom nimmt die Privatsphäre der Kunden und die Dienstsicherheit ernst; daher werden mTLS-Authentifizierung und -Verifizierung weitgehend in Online-Meetingräumen und Telefonanrufen verwendet. Dennoch können viele ähnliche API-Gateways einen solchen Service nur in ihrer Enterprise-Version anbieten, während APISIX Ingress große Machbarkeit und Bequemlichkeit bietet, um dieses Ziel zu erreichen.

  • Dienststabilität: Zooms Backend-Dienste erfordern Multi-AZ (Multi-Availability Zones)-Bereitstellungen für hohe Verfügbarkeit in verschiedenen Regionen. Im Allgemeinen werden die Geschäfte in anderen Rechenzentren platziert. Wenn ein Fehler im ursprünglichen Rechenzentrum auftritt, muss der Client-Datenverkehr in ein anderes transformiert werden, was APISIX Ingress erfolgreich erfüllen kann.

Funktionen des Apache APISIX Ingress Controllers

Da Apache APISIX als Datenebene verwendet wird, um den Geschäftsverkehr zu tragen, erbt der Apache APISIX Ingress Controller die folgenden Vorteile von Apache APISIX.

  • Hohe Leistung und Stabilität: Als hochleistungsfähiges dynamisches Open-Source-API-Gateway ist Apache APISIX in seiner Leistung widerstandsfähig und stabil und wird in vielen großvolumigen Verkehrsszenarien von Unternehmen verwendet.

  • Aktive Community: Als Top-Level und das aktivste Open-Source-API-Gateway-Projekt verfügt Apache APISIX über eine aktive Community und hat seit dem ersten Tag eine hervorragende Wachstumsrate beibehalten.

  • Reiches Ökosystem: Apache APISIX unterstützt L7-Protokolle, einschließlich HTTP(S), HTTP2, Dubbo, IoT-Protokoll MQTT usw. Darüber hinaus unterstützt APISIX L4-Protokolle wie TCP/UDP. Außerdem wird in Apache APISIX 3.0 die volle Unterstützung von ARM64 unterstützt.

  • Mehrere Plugins: Es gibt fast 100 Plugins, die von APISIX offiziell veröffentlicht wurden und die Benutzer durch einfaches Ziehen verwenden können. Das Hot-Reloading und die dynamische Orchestrierung von Plugins bieten den Benutzern große Bequemlichkeit.

Darüber hinaus hat der APISIX Ingress Controller auch die folgenden einzigartigen Vorteile:

  • Gute Kompatibilität: Der APISIX Ingress Controller unterstützt mehrere Versionen von Ingress-Ressourcen und kann mit verschiedenen Kubernetes-Versionen kompatibel sein.

  • Dynamische Aktualisierung: Es ist kein Neuladen des Dienstes erforderlich, wenn Routen, Zertifikate und andere Konfigurationen geändert werden, was den reibungslosen Betrieb des Geschäfts gewährleistet.

  • Flexible Skalierung: Da der APISIX Ingress Controller eine Struktur verwendet, die die Steuerungsebene und die Datenebene trennt, kann die Datenebenen-Cluster von Apache APISIX unabhängig erweitert werden, ohne den APISIX Ingress Controller zu skalieren.

APISIX Ingress Controller Architektur

  • Freundlich für Betrieb und Wartung: Unter der aktuellen Architektur können Benutzer je nach tatsächlicher Situation wählen, ob sie die Datenebenen-APISIX-Cluster im Kubernetes-Cluster oder in der physischen Bare-Metal-Maschinenumgebung bereitstellen möchten. Darüber hinaus führt die architektonische Trennung des APISIX Ingress dazu, dass APISIX auf der Datenebene den Datenverkehr trägt, während der APISIX Ingress Controller die Steuerungsebene ist. Daher hat ein Ausfall des APISIX Ingress Controllers keine Auswirkungen auf den Geschäftsverkehr.

Nachdem die Gateway-Auswahl abgeschlossen war, stand das API-Gateway-Team vor einer neuen Herausforderung: Wie kann die ursprüngliche API-Gateway-Konfiguration von Hunderten von Diensten auf APISIX Ingress migriert werden? Zooms Infrastrukturteam entwickelte die kontinuierliche Lieferpipeline, die die Migrationskosten für die Umwandlung von nginx.conf und anderen Ingress-Konfigurationen in APISIX Ingress erheblich reduzieren kann.

Der Prozess und die Funktionen des Aufbaus der kontinuierlichen Lieferpipeline

Zooms kontinuierliche Lieferpipeline

Die kontinuierliche Lieferpipeline ist ein End-to-End-Anwendungslieferungssystem, das ein einziges Modell für die Deklaration aller Anwendungslieferungsanforderungen implementiert und alle kontinuierlichen Lieferungsschritte in einer Linie anordnet und ausführt.

Zooms kontinuierliche Lieferpipeline

Es gibt sechs Teile in der kontinuierlichen Lieferpipeline:

  1. Vorbereiten: Vorbereiten von vordefinierten Ressourcen, einschließlich Infrastruktur, Middleware, Cloud-Service-Ressourcen usw.;

  2. Konfigurieren: Vorbereiten der Konfigurationsdateien und Schlüssel, die von der Anwendung benötigt werden;

  3. Bereitstellen: Verwenden von K8s für die Bereitstellung in Cloud-nativen Szenarien (einschließlich Informationen über Container, Container-Images, Parameter, Versionen und Instanzen);

  4. Zugriff: Erstellen eines Kubernetes-Service und automatisches Konfigurieren der Routing-Regeln des Apache APISIX Ingress, wenn die Bereitstellung externen Zugriff erfordert;

  5. Beobachten: Durchführen von Beobachtbarkeitsbezogenen Konfigurationen, wie Überwachung, Alarmierung, Protokollierung und Tracing-Analyse;

  6. Skalieren: Deklarieren der dynamischen Skalierungsregeln von KEDA (Kubernetes Event-driven Autoscaling) durch Überwachungsmetriken.

Wie APISIX Ingress in der Pipeline verwendet wird

Übersicht über Zooms Pipeline-Architektur

Projektmanagement

Projektmanager legen mehr Wert auf R&D-Iterationen und darauf, wie sie den iterativen Veröffentlichungsfortschritt und die Personaleffizienz auf der Zeitleiste, die den Iterationen entspricht, besser verwalten können. Zoom verwendet intern einen GitOps-Workflow, um die API-Gateway-Konfiguration in das Anwendungslieferungsmodell zu integrieren. Unter diesem Modell ist die Definition von APISIX-Routing-Regeln mit „Bereitstellen“ und anderen Links integriert, wodurch die Änderungskontrolle an GitHub übergeben wird. Mit der Erstellung und dem Zusammenführen von GitHub-Zweigen realisiert die Pipeline konsistente Zeitleisten zwischen der Anwendungs- und Gateway-Konfigurationsfreigabe und -Rücknahme.

# Code-Snippet von Zooms CD-Pipeline im Git-Repository
deploy:
  type: Deployment
  replicas: ~{ replicas, 2 }
  version: "latest"
  containers:
    - name: my-app
      image: "busybox"
      command: "echo 'Demo' && sleep 99d"
access:
  - protocol: https
    host: my-domain.my-org.com
    cert: my-tls-cert
    apisix:
      routes:
        http:
          - name: my-api
            authentication:
              # ......
            match:
              paths:
                - /my-api/*

Auf diese Weise wird das Release-Management in das Workflow-Management innerhalb von GitHub vereinfacht und das Problem der zeitlichen Verzögerung zwischen Upstream- und Downstream-Systemen gelöst, die Änderungen abgleichen, wenn mehrere Iterationen gleichzeitig verarbeitet werden.

Anwendungsentwicklung

Entwickler konzentrieren sich hauptsächlich auf die Routing- und Authentifizierungsfähigkeiten von APIs, die stark mit Geschäftsdiensten verbunden sind und von Entwicklern ausgefüllt werden sollten, um den automatischen Effekt zu erzielen. Darüber hinaus legen sie Wert auf die Entwicklung und Implementierung von Geschäftsfunktionen und der oberen Geschäftsebene und hoffen, eine sofort einsatzbereite Infrastruktur aufzubauen.

Aus den oben genannten Codes können wir sehen, dass Entwickler nur Authentication und Match in dieser kontinuierlichen Lieferpipeline definieren müssen. Sie müssen die zugrunde liegende Logik nicht kennen:

  • Zuerst wird es in Kubernetes Deployment und Service übersetzt.
  • Dann wird die Plattform-API aufgerufen, um die Korrektheit des Pfads zu überprüfen.
  • Schließlich wird es in ApisixRoute-Objekte übersetzt.

Die Integration der APISIX-Konfiguration und des kontinuierlichen Lieferpipeline-Workflows bietet Entwicklern eine arbeitserleichternde Möglichkeit.

Umgebungsmanagement

Komplexe Anforderungen an das Umweltmanagement und die Kontrolle treten oft in toB-Szenarien auf, und Lieferprobleme in einigen privaten Cloud-, dedizierten Cloud- und Hybrid-Cloud-Szenarien müssen berücksichtigt werden.

Einige Konfigurationen von APISIX Ingress wurden implementiert, um die Anforderung der Abschirmung von Umweltunterschieden zu erfüllen. Auf diese Weise können Systemmanager die Unterschiede in einigen heterogenen Umgebungen umfassend kontrollieren. Alle Dienste, die in der Umgebung bereitgestellt werden, sind effektiv, wodurch die kognitive Belastung und spezielle Bereitstellungsoperationen, die durch Umweltunterschiede für Anwendungs- und Betriebsentwickler verursacht werden, vermieden werden. Zum Beispiel kann Zoom benutzerdefinierte Konfigurationen verwenden, um Tracing für einige Umgebungen zu deaktivieren, ApisixRoute-Objekte in native Ingress-Objekte und NGINX Ingress-Annotationen umzuwandeln und verschiedene Images zum Abrufen von Geheimnissen zu verwenden.

Darüber hinaus ist eine Multi-Tenant-Isolierung erforderlich, wenn mehrere Geschäftsbereiche die APISIX-Umgebung nutzen. APISIX Ingress bietet einen Annotation-Selektor, der es ermöglicht, dass verschiedene ApisixRoute-Objekte von verschiedenen Instanzen des APISIX Ingress Controllers aufgenommen werden.

Infrastrukturmanagement

Das API-Gateway-Team muss alle APISIX-Instanzen kontrollieren, Sicherheitsrichtlinien umfassend konfigurieren, Multi-Availability-Zones implementieren und so weiter.

Jedes Plugin der Pipeline bietet Konfigurationsoptionen für Infrastrukturingenieure. Im Plugin ingress-apisix gibt es eine defaultPlugins-Eigenschaft.

Nachdem das API-Gateway-Team die Eigenschaft konfiguriert hat, wird die Einstellung für alle Dienste wirksam, was für eine einheitliche Sicherheits- und Risikokontrollstrategie geeignet ist.

Fazit

Der APISIX Ingress Controller spielt eine wichtige Rolle in Zooms kontinuierlicher Lieferpipeline, indem er den Druck auf Projektmanagement, Anwendungsentwicklung, Umweltmanagement sowie Middleware- und Infrastrukturmanagement verringert. Der Fall von Zoom ist es wert, von anderen Unternehmen gelernt zu werden, und wir freuen uns darauf, dass der APISIX Ingress Controller zur Innovation weiterer Unternehmen beiträgt.

Darüber hinaus hat Apache APISIX Ingress im August 2022 offiziell V1.5 veröffentlicht, das den Vorschlag aller Ressourcen-API-Versionen vereinheitlicht und alle CRD-API-Versionen auf V2 aktualisiert. Gleichzeitig unterstützt es die meisten Gateway-API-Ressourcen. Apache APISIX Ingress hat Ingress-Ressourcen ermöglicht, beliebige APISIX-Plugins zu verwenden, indem eine neue Annotation „k8s.apisix.apache.org/plugin-config-name“ zu Ingress-Ressourcen hinzugefügt wurde. Auf diese Weise wird die Benutzerfreundlichkeit des APISIX Ingress Controllers erheblich erhöht und die Kosten für Benutzer, die von anderen Ingress Controllern zu APISIX Ingress Controller migrieren, reduziert.

Weitere Informationen finden Sie unter Apache APISIX Ingress V1.5.

Tags: