Documentos de Asset Core

Documentación del motor de estado mundial determinista y referencias de API.

Documentos de Decision Gate

Fundamentos del Despliegue

Esta guía explica cómo desplegar demonios de escritura y lectura de Asset Core en un solo nodo con almacenamiento duradero. Es la base que debe validar antes de pasar a topologías más complejas.

Requisitos previos

Asegúrate de que puedes ejecutar ambos daemons con almacenamiento persistente y que tienes permisos para escribir en los directorios de destino. En producción, estos directorios deben ser respaldados y monitoreados.

  • Compilar los binarios de Asset Core (cargo build --release)
  • Directorio escribible para el registro de confirmaciones, puntos de control y tokens de autenticación
  • Puertos 8080 y 8081 disponibles (o alternativas)

Paso 1 - Preparar directorios

Cree directorios para el estado persistente:

mkdir -p /var/lib/assetcore/{data,logs,auth/tokens}

El registro de commits, los puntos de control y los archivos de tokens se almacenarán aquí. Trate este directorio como crítico para las operaciones.

Paso 2 - Configurar el daemon de escritura

Cree un archivo de configuración write.toml:

[paths]
base_dir = "/var/lib/assetcore"

[server]
host = "0.0.0.0"
port = 8080

[commit_log]
path = "data/commit_log.log"

[commit_log_driver]
checkpoint_path = "data/write.checkpoint.json"

[namespaces]
catalog_backend = "sqlite"
catalog_path = "data/namespace_catalog.sqlite"

[auth]
directory = "auth/tokens"

Configuraciones clave:

ConfiguraciónDescripción
server.host/server.portDirección y puerto para enlazar
commit_log.pathDonde almacenar el registro de eventos
commit_log_driver.checkpoint_pathPunto de control del daemon de escritura
auth.directoryDirectorio del token portador
namespaces.catalog_pathArchivo SQLite del catálogo de espacios de nombres

Paso 3 - Configurar el daemon de lectura

Cree un archivo de configuración read.toml o use argumentos de línea de comandos:

[paths]
base_dir = "/var/lib/assetcore"

[server]
address = "0.0.0.0:8081"

[storage]
commit_log_path = "data/commit_log.log"
checkpoint_path = "data/read.checkpoint.json"

[auth]
directory = "auth/tokens"
namespace_catalog_path = "data/namespace_catalog.sqlite"
namespace_catalog_read_only = true

El daemon de lectura debe apuntar al mismo registro de confirmaciones que el daemon de escritura. Si estos divergen, tus proyecciones no coincidirán con la ruta de escritura.

Paso 4 - Iniciar el daemon de escritura

./target/release/assetcored-write --config write.toml

Verifica que esté en funcionamiento:

curl -H "Authorization: Bearer $ASSETCORE_ADMIN_TOKEN" \
  http://localhost:8080/v1/write/health

Se espera: {"status": "healthy", ...}

Paso 5 - Iniciar el daemon de lectura

./target/release/assetcored-read --config read.toml

Verifica que esté en funcionamiento:

curl -H "Authorization: Bearer $ASSETCORE_READ_TOKEN" \
  -H "x-assetcore-namespace: $ASSETCORE_NAMESPACE_ID" \
  http://localhost:8081/v1/read/health

Paso 6 - Verificar de extremo a extremo

Enviar un commit de prueba:

curl -X POST http://localhost:8080/v1/write/namespaces/${ASSETCORE_NAMESPACE_ID}/lifecycle \
  -H "Authorization: Bearer $ASSETCORE_ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"target_state":"provisioned","reason":"deployment bootstrap"}'

curl -X POST http://localhost:8080/v1/write/namespaces/${ASSETCORE_NAMESPACE_ID}/commit \
  -H "Authorization: Bearer $ASSETCORE_WRITE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "operations": [
      {"op": "CreateContainer", "args": {"container_id": 1, "kind": {"type": "balance"}, "owner": null, "policies": null}}
    ]
  }'

Lea de nuevo:

curl -H "Authorization: Bearer $ASSETCORE_READ_TOKEN" \
  http://localhost:8081/v1/read/namespaces/${ASSETCORE_NAMESPACE_ID}/containers/1

Solución de problemas

”Dirección ya en uso”

Otro proceso está utilizando el puerto. Detenga ese proceso o cambie la dirección de listen.

”Permiso denegado” en el registro de confirmaciones

El usuario que ejecuta el daemon no tiene acceso de escritura al directorio. Verifique la propiedad:

chown -R assetcore:assetcore /var/lib/assetcore

El daemon de lectura muestra datos antiguos

Verifica el endpoint de frescura:

curl -H "Authorization: Bearer $ASSETCORE_READ_TOKEN" \
  http://localhost:8081/v1/read/namespaces/${ASSETCORE_NAMESPACE_ID}/freshness

Si world_seq está detrás de commit_log_world_seq, el daemon de lectura está alcanzando. Monitoree la métrica de retraso.

Recuperación de fallos

Ambos daemons se recuperan automáticamente de sus puntos de control al reiniciarse. No se necesita intervención manual.

Próximos pasos