Backend oparty na SQL Alfa

Szybkie API PostgreSQL.
Małe zużycie pamięci.

Moduł Rust dla Nginx udostępniający funkcje PostgreSQL przez HTTP i powiadomienia o zmianach przez WebSocket.

GitHub

Jak pgxio ogranicza narzut

Pętla zdarzeń Nginx

HTTP, WebSocket i nieblokujące operacje wejścia/wyjścia bazy danych współdzielą pętlę zdarzeń Nginx.

Ponowne użycie połączeń

Przygotowane instrukcje i przetwarzanie potokowe ograniczają powtarzaną pracę oraz liczbę wymian z bazą danych.

Bez ponownej serializacji JSON

Tekst odpowiedzi JSONB z PostgreSQL jest przekazywany bez zmian. Wyłączenie walidacji wyjścia pozwala też uniknąć parsowania JSON odpowiedzi.

Przekazywanie żądań bez kopiowania Eksperymentalne

Wersja ze zmodyfikowaną libpq eliminuje kopie treści odpowiednich żądań do Rust i libpq. Automatyczne pożyczanie buforów dotyczy odpowiednich dużych żądań przez nieszyfrowane połączenia z bazą. Standardowe wersje nadal kopiują.

Powyższy test używał kopiowanych buforów. Odpowiedzi i TLS nadal wymagają kopii.

Jak to działa

pgxio.confFragment konfiguracji
# 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

    Napisz funkcje SQL

    Funkcje SQL przyjmują i zwracają JSON. Obsługują zapytania, reguły biznesowe i autoryzację.

  2. 02

    Jawnie publikuj punkty końcowe

    Zadeklaruj funkcje udostępniane przez API. pgxio sprawdza JWT i wywołuje każdą funkcję w transakcji.

  3. 03

    Subskrybuj zmiany

    Autoryzowane subskrypcje WebSocket sygnalizują zmiany. Klient ponownie pobiera aktualny obraz danych przez HTTP.

Przeglądarka / klientHTTP + WebSocket
pgxio w NginxRust + nieblokująca libpq
PostgreSQLFunkcje + powiadomienia

Subskrypcje dostarczają sygnały zmian, a nie trwały dziennik zdarzeń. Po ponownym połączeniu klienci odnawiają subskrypcje i pobierają świeży obraz danych.

Uruchom lokalnie

Wykonaj te polecenia w istniejącej lokalnej kopii pgxio. Wymagane są Docker Compose i Python 3.9 lub nowszy.

Dołączone środowisko programistyczne nasłuchuje na localhost. pgxio jest w fazie alfa; ta konfiguracja służy do lokalnego poznawania projektu.

Terminal · w lokalnej kopii 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 '{}'