Nginx-eventloop
HTTP, WebSockets en niet-blokkerende database-I/O delen de eventloop van Nginx.
Backend met SQL als basis Alfa
Een Rust-module voor Nginx die PostgreSQL-functies via HTTP beschikbaar maakt en wijzigingsmeldingen via WebSockets verstuurt.
GitHubHTTP, WebSockets en niet-blokkerende database-I/O delen de eventloop van Nginx.
Voorbereide statements en pipelining verminderen herhaald werk en retourreizen naar de database.
De JSONB-antwoordtekst van PostgreSQL wordt ongewijzigd doorgestuurd. Uitvoervalidatie uitschakelen voorkomt ook het parsen van de JSON-respons.
De build met aangepaste libpq vermijdt kopieën van de verzoekinhoud naar Rust en libpq bij geschikte verzoeken. Automatisch lenen van buffers geldt voor geschikte grote verzoeken via onversleutelde databaseverbindingen. Standaardbuilds blijven kopiëren.
De bovenstaande benchmark gebruikte gekopieerde buffers. Antwoorden en TLS vereisen nog steeds kopieën.
# HTTP endpoints
pgxio_endpoint list_tasks
web.list_tasks read_only;
pgxio_endpoint create_task
web.create_task;
# WebSocket subscription authorization
pgxio_stream tasks
web.authorize_tasks;SQL-functies ontvangen en retourneren JSON. Ze verwerken query’s, bedrijfsregels en autorisatie.
Declareer welke functies je API aanbiedt. pgxio controleert JWT’s en roept elke functie binnen een transactie aan.
Geautoriseerde WebSocket-abonnementen melden wijzigingen. Je client haalt de actuele momentopname opnieuw op via HTTP.
Abonnementen leveren wijzigingssignalen, geen duurzaam gebeurtenissenlogboek. Na opnieuw verbinden abonneren clients zich opnieuw en halen ze een verse momentopname op.
Voer deze opdrachten uit vanuit een bestaande lokale pgxio-kopie. Je hebt Docker Compose en Python 3.9 of nieuwer nodig.
De meegeleverde ontwikkelomgeving luistert op localhost. pgxio is alfasoftware; deze configuratie is bedoeld om lokaal te verkennen.
bin/pgxio init
bin/pgxio up
TOKEN=$(bin/pgxio token alice)
curl http://localhost:8080/v1/create_task \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"title":"Hello from pgxio"}'
curl http://localhost:8080/v1/list_tasks \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{}'