Backend centrado en SQL Alfa

APIs rápidas de PostgreSQL.
Poco uso de memoria.

Un módulo de Rust para Nginx que expone funciones de PostgreSQL por HTTP y envía avisos de cambios por WebSockets.

GitHub

Cómo reduce pgxio la sobrecarga

Bucle de eventos de Nginx

HTTP, WebSockets y la E/S no bloqueante de la base de datos comparten el bucle de eventos de Nginx.

Conexiones de base de datos reutilizadas

Las sentencias preparadas y el uso de pipelines reducen el trabajo repetido y los viajes de ida y vuelta a la base de datos.

Sin volver a serializar JSON

El texto JSONB de la respuesta de PostgreSQL pasa sin cambios. Desactivar la validación de salida también evita analizar el JSON de la respuesta.

Reenvío de solicitudes sin copias Experimental

La compilación con libpq modificado elimina las copias del cuerpo de la solicitud a Rust y libpq en las solicitudes aptas. El préstamo automático de búferes se aplica a solicitudes grandes aptas sobre conexiones sin cifrar a la base de datos. Las compilaciones estándar siguen copiando.

La prueba anterior usó búferes copiados. Las respuestas y TLS siguen requiriendo copias.

Cómo funciona

pgxio.confExtracto de configuració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;
  1. 01

    Escribe funciones SQL

    Las funciones SQL reciben y devuelven JSON. Se encargan de las consultas, las reglas de negocio y la autorización.

  2. 02

    Publica endpoints explícitos

    Declara las funciones que expone tu API. pgxio verifica los JWT y llama a cada función dentro de una transacción.

  3. 03

    Suscríbete a los cambios

    Las suscripciones autorizadas por WebSocket avisan de los cambios. El cliente vuelve a obtener la instantánea actual por HTTP.

Navegador / clienteHTTP + WebSocket
pgxio dentro de NginxRust + libpq no bloqueante
PostgreSQLFunciones + notificaciones

Las suscripciones envían avisos de cambios, no un registro duradero de eventos. Al reconectarse, los clientes se vuelven a suscribir y obtienen una instantánea nueva.

Ejecutar localmente

Ejecuta estos comandos desde una copia local de pgxio. Necesitas Docker Compose y Python 3.9 o posterior.

El entorno de desarrollo incluido escucha en localhost. pgxio es software alfa; esta configuración sirve para probarlo localmente.

Terminal · desde tu copia local de 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 '{}'