Backend centrado em SQL Alfa

APIs PostgreSQL rápidas.
Pouca memória.

Um módulo Rust para Nginx que expõe funções PostgreSQL por HTTP e envia notificações de alterações por WebSockets.

GitHub

Como o pgxio reduz o trabalho adicional

Ciclo de eventos do Nginx

HTTP, WebSockets e E/S não bloqueante da base de dados partilham o ciclo de eventos do Nginx.

Ligações à base de dados reutilizadas

As instruções preparadas e o pipelining reduzem o trabalho repetido e as idas e voltas à base de dados.

Sem nova serialização JSON

O texto JSONB da resposta do PostgreSQL é transmitido sem alterações. Desativar a validação de saída também evita analisar o JSON da resposta.

Encaminhamento de pedidos sem cópias Experimental

A compilação com libpq modificado elimina cópias do corpo para Rust e libpq nos pedidos elegíveis. O empréstimo automático de buffers aplica-se a pedidos grandes elegíveis em ligações não cifradas à base de dados. As compilações padrão continuam a copiar.

O benchmark acima usou buffers copiados. As respostas e o TLS continuam a envolver cópias.

Como funciona

pgxio.confExcerto de configuração
# 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

    Escreva funções SQL

    As funções SQL recebem e devolvem JSON. Tratam de consultas, regras de negócio e autorização.

  2. 02

    Publique endpoints explícitos

    Declare as funções que a sua API expõe. O pgxio verifica JWTs e chama cada função dentro de uma transação.

  3. 03

    Subscreva alterações

    As subscrições WebSocket autorizadas sinalizam alterações. O cliente volta a obter o estado atual por HTTP.

Navegador / clienteHTTP + WebSocket
pgxio dentro do NginxRust + libpq não bloqueante
PostgreSQLFunções + notificações

As subscrições enviam sinais de alteração, não um registo duradouro de eventos. Ao voltar a ligar, os clientes subscrevem novamente e obtêm um estado atualizado.

Executar localmente

Execute estes comandos a partir de uma cópia local do pgxio. Precisa de Docker Compose e Python 3.9 ou posterior.

O ambiente de desenvolvimento incluído escuta em localhost. O pgxio é software alfa; esta configuração destina-se à exploração local.

Terminal · a partir da sua cópia local do 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 '{}'