Apache APISIX: Cloud-native API Gateway und Kong Killer?

Von: Valentin Brückel
Datum: 16. Feb. 2021

Apache APISIX ist ein schlankes Open Source API-Gateway auf Basis des beliebten nginx reverse Proxies.

Das Projekt besteht aus Lua-Skripten, die mit Hilfe von OpenResty® in die Konfiguration des Proxy integriert werden.

Neben HTTP werden auch andere Protokolle wie gRPC, Dubbo, MQTT und Websocket unterstützt.

Die Macher von APISIX preisen ihr Produkt als die bessere Alternative zum Kong Gateway an. APISIX beherrscht mehr Protokolle und kann im Gegensatz zu Kong Routing-Regeln von sämtlichen nginx-Variablen abhängig machen. Vor allem legen die APISIX-Entwickler Wert auf die Performance, die ständig mit der jeweils aktuellen Kong-Version verglichen wird.

1. Features

Die Feature-Liste von APISIX ist lang und umfasst nahezu alle denkbaren Anwendungen eines API Gateways. Zusätzliche Features können über Lua-Skripte als Custom Plugins in das Projekt integriert werden. APISIX ist flexibel und vielseitig.

APISIX beherrscht die Netzwerk-Protokolle TCP/UDP, HTTP(S) und kann mit den Anwendungsprotokollen gRPC, Dubbo, MQTT und Websocket umgehen. Teilweise wird Transcoding in andere Protokolle unterstützt.

Microservice-Patterns wie Load Balancing, Circuit Breaking, Mirroring, Canary Deployments und Fault Injection gehören ebenso zum Funktionsumfang wie die Bereitstellung von Metriken für Prometheus und Tracing-Lösungen.

2. Architektur

APISIX setzt auf OpenResty® auf, das wiederum eine Erweiterung von nginx um umfangreiche Lua-Scripting-Möglichkeiten ist.

Technologie-Stack von APISIX

Abbildung 1: Technologie-Stack von APISIX

OpenResty® erlaubt es, in nginx-Konfigurationsdateien Lua-Scripte zu integrieren und verwandelt den Proxy und Webserver so zu einem vollwertigen Application-Server. Durch die Just-In-Time-Kompilierung mit LuaJIT können die Performance-Auswirkungen der Skripte minimiert werden.

APISIX ist eine Sammlung von Lua-Skripten, die die Schnittstellen von OpenResty® nutzen, um das Verhalten des nginx-Proxy komplett zur Laufzeit zu konfigurieren. Seine Konfiguration speichert APISIX im Key/Value-Store etcd ab.

3. Installation

Über Docker/docker-compose kann APISIX installiert werden. Ferner steht für CentOS ein RPM-Paket zur Verfügung.

Für den Betrieb wird nginx und der Key-Value-Store etcd benötigt.

4. Konfiguration

APISIX kann über ein REST-API konfiguriert werden, z.B. über eine JSON-Struktur, die mit curl an einen Endpunkt geschickt wird.

In folgenden Beispiel wird ein Upstream-Service definiert:

curl http://127.0.0.1:9080/apisix/admin/services/predic8service -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "upstream": {
		"type": "roundrobin",
		"nodes": {
			"172.18.5.13:80": 1
		}
	}
}'
Listing 1: Definition eines Service über das REST-API von APISIX

In einem weiteren Aufruf wird eine Routing-Regel zu diesem Service angelegt:

curl http://127.0.0.1:9080/apisix/admin/routes/predic8route -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
	"uri": "/*",
	"host": "predic8.lvh.me",
	"service_id": "predic8service"
}'
Listing 2: Definition einer Route über das REST-API von APISIX

5. Benutzeroberfläche

Neben der Konfiguration über REST existiert ein Dashboard, das als experimentell klassifiziert ist und bislang nur einen Teil der Features abdeckt. Auch die englische Übersetzung aus dem Chinesischen ist bislang unvollständig.

APISIX Dashboard

Abbildung 2: Screenshot der Demo-Installation des APISIX Dashboard mit einigen chinesischen Textfragmenten

6. Performanz

Für einfache Konfigurationen wirbt APISIX mit Latenz- und Durchsatz-Werten, die um einen Faktor 8-10 besser als bei Kong sein sollen, mit aktivierten Plugins für Metriken soll dieser Unterschied noch deutlicher ausfallen. In unseren Benchmarks waren die Unterschiede zwischen beiden Produkten kleiner als angegeben. Im Vergleich zwischen Minimal-Konfigurationen auf einem einfachen Notebook erreichte APISIX zwei- bis dreimal so hohe Werte wie Kong. Mit aktivierten Plugins zum Rate Limiting und für Prometheus-Metriken war der Unterschied etwas ausgeprägter. In den meisten Anwendungs-Szenarien wird bereits ein Durchsatz von 10.000 Requests pro Sekunde erheblich jenseits der erwarteten Last liegen.

APISIX vs. Kong Benchmark

Abbildung 3: Benchmark-Ergebnisse eines Vergleichs von APISIX und Kong

7. Fazit

APISIX ist ein schlankes Projekt, das mächtige Funktionen bietet. Die unterschiedlichsten Anforderungen können über Skripte mit wenig Aufwand umgesetzt werden. Dafür sind umfangreiche Lua und nginx Kenntnisse notwendig. Die sparsame Dokumentation macht die Arbeit mit APISIX leider nicht einfacher. APISIX ist daher nur versierten Administratoren oder Entwicklern zu empfehlen.

Es bietet fast vollständige Kontrolle über den Traffic, der nginx durchläuft. Allerdings erfordert es eine sehr genaue Vorstellung von allen Einzelheiten der jeweiligen Aufgabe. Wer ohnehin mit nginx arbeitet und mit Lua vertraut ist, wird in APISIX ein mächtiges Werkzeug finden, das in Installation und Konfiguration einige Handarbeit erfordert.

Auffällig sind die Performance-Unterschiede im Vergleich zu Kong, das eine sehr ähnliche Architektur auf Basis von nginx und OpenResty® aufweist. APISIX ist deutlich kompakter als Kong: Obwohl beide überwiegend aus Lua-Skripten bestehen, haben die Quelltexte von APISIX nur etwa ein Achtel der Größe.

8. Links