Backend met SQL als basis Alfa

Snelle PostgreSQL-API’s.
Weinig geheugen.

Een Rust-module voor Nginx die PostgreSQL-functies via HTTP beschikbaar maakt en wijzigingsmeldingen via WebSockets verstuurt.

GitHub

Hoe pgxio de overhead verlaagt

Nginx-eventloop

HTTP, WebSockets en niet-blokkerende database-I/O delen de eventloop van Nginx.

Hergebruikte databaseverbindingen

Voorbereide statements en pipelining verminderen herhaald werk en retourreizen naar de database.

Geen nieuwe JSON-serialisatie

De JSONB-antwoordtekst van PostgreSQL wordt ongewijzigd doorgestuurd. Uitvoervalidatie uitschakelen voorkomt ook het parsen van de JSON-respons.

Verzoeken zonder kopieën doorsturen Experimenteel

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.

Hoe het werkt

pgxio.confConfiguratiefragment
# 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;
  1. 01

    Schrijf SQL-functies

    SQL-functies ontvangen en retourneren JSON. Ze verwerken query’s, bedrijfsregels en autorisatie.

  2. 02

    Publiceer expliciete endpoints

    Declareer welke functies je API aanbiedt. pgxio controleert JWT’s en roept elke functie binnen een transactie aan.

  3. 03

    Abonneer op wijzigingen

    Geautoriseerde WebSocket-abonnementen melden wijzigingen. Je client haalt de actuele momentopname opnieuw op via HTTP.

Browser / clientHTTP + WebSocket
pgxio in NginxRust + niet-blokkerende libpq
PostgreSQLFuncties + meldingen

Abonnementen leveren wijzigingssignalen, geen duurzaam gebeurtenissenlogboek. Na opnieuw verbinden abonneren clients zich opnieuw en halen ze een verse momentopname op.

Lokaal uitvoeren

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.

Terminal · vanuit je lokale pgxio-kopie
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 '{}'