Backend incentrato su SQL Alpha

API PostgreSQL veloci.
Poca memoria.

Un modulo Rust per Nginx che espone funzioni PostgreSQL tramite HTTP e invia notifiche di modifica via WebSocket.

GitHub

Come pgxio riduce il lavoro aggiuntivo

Ciclo di eventi Nginx

HTTP, WebSocket e I/O non bloccante del database condividono il ciclo di eventi di Nginx.

Connessioni al database riutilizzate

Le istruzioni preparate e il pipelining riducono il lavoro ripetuto e i viaggi di andata e ritorno al database.

Nessuna riserializzazione JSON

Il testo JSONB della risposta PostgreSQL passa senza modifiche. Disattivare la validazione dell'output evita anche l'analisi del JSON di risposta.

Inoltro delle richieste senza copie Sperimentale

La build con libpq modificato elimina le copie del corpo in Rust e libpq per le richieste idonee. Il prestito automatico dei buffer si applica alle richieste grandi idonee su connessioni al database non cifrate. Le build standard continuano a copiare.

Il benchmark sopra ha usato buffer copiati. Le risposte e TLS comportano ancora copie.

Come funziona

pgxio.confEstratto di configurazione
# 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

    Scrivi funzioni SQL

    Le funzioni SQL ricevono e restituiscono JSON. Gestiscono query, regole aziendali e autorizzazione.

  2. 02

    Pubblica endpoint espliciti

    Dichiara le funzioni esposte dall'API. pgxio verifica i JWT e chiama ogni funzione all'interno di una transazione.

  3. 03

    Iscriviti alle modifiche

    Le sottoscrizioni WebSocket autorizzate segnalano le modifiche. Il client recupera nuovamente lo snapshot corrente via HTTP.

Browser / clientHTTP + WebSocket
pgxio dentro NginxRust + libpq non bloccante
PostgreSQLFunzioni + notifiche

Le sottoscrizioni inviano segnali di modifica, non un registro persistente degli eventi. Alla riconnessione, i client si iscrivono di nuovo e recuperano uno snapshot aggiornato.

Esegui in locale

Esegui questi comandi da una copia locale di pgxio. Servono Docker Compose e Python 3.9 o successivo.

L'ambiente di sviluppo incluso ascolta su localhost. pgxio è software alpha; questa configurazione serve per provarlo in locale.

Terminale · dalla tua copia locale di pgxio
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 '{}'