Backend centrado em SQL Alfa

APIs PostgreSQL rápidas.
Pouco uso de memória.

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

GitHub

Como o pgxio reduz o trabalho extra

Loop de eventos do Nginx

HTTP, WebSockets e E/S não bloqueante do banco compartilham o loop de eventos do Nginx.

Conexões de banco reutilizadas

Instruções preparadas e pipelining reduzem o trabalho repetido e as idas e voltas ao banco.

Sem resserialização de JSON

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

Encaminhamento de requisições sem cópias Experimental

A compilação com libpq modificado elimina cópias do corpo para Rust e libpq nas requisições elegíveis. O empréstimo automático de buffers se aplica a requisições grandes elegíveis em conexões sem criptografia com o banco. As compilações padrão continuam copiando.

O benchmark acima usou buffers copiados. Respostas e TLS ainda envolvem cópias.

Como funciona

pgxio.confTrecho 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 retornam JSON. Elas cuidam das consultas, regras de negócio e autorização.

  2. 02

    Publique endpoints explícitos

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

  3. 03

    Assine as mudanças

    Assinaturas WebSocket autorizadas sinalizam mudanças. Seu cliente busca novamente o estado atual por HTTP.

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

As assinaturas enviam sinais de mudança, não um registro durável de eventos. Ao reconectar, os clientes assinam novamente e buscam um estado atualizado.

Executar localmente

Execute estes comandos de uma cópia local do pgxio. Você precisa de Docker Compose e Python 3.9 ou mais recente.

O ambiente de desenvolvimento incluído escuta em localhost. O pgxio é software alfa; esta configuração serve para exploração local.

Terminal · na 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 '{}'