Saltar al contenido principal

Configurando

Requisitos previos

  • Has identificado el método de instalación para el sistema anfitrión:

    • Para bare-metal, tienes dos ejecutables instalados en la ruta del sistema operativo del host: stellar-horizon y stellar-core.
    • Para ejecutar la imagen de Horizon con el demonio Docker, usarás stellar/stellar-horizon alojado en Docker Hub. Ya has extraído la imagen stellar/stellar-horizon a través de docker pull stellar/stellar-horizon:<tag_version> en el host. Esta imagen contiene el stellar-horizon y el stellar-core dentro.
    • Para Kubernetes con el Horizon Helm Chart, has seguido el Instalar Horizon con Helm Chart.
  • Inicializar base de datos

Ahora estás listo para identificar los parámetros de configuración necesarios para desempeñar tres roles importantes:

  • Atender solicitudes de API solo de lectura a través de una API HTTP basada en web;
  • Ingerir libros contables desde los nodos Core de la red Stellar para mantener actualizada su visión del mundo;
  • Enviar transacciones a través de una API HTTP basada en web, reenviando la solicitud de envío de transacciones a la red Stellar.

Para desempeñar estos roles, puedes elegir entre uno de los dos modos de implementación a continuación (implementación de instancia única o implementación de múltiples instancias). Cada uno tiene sus propios parámetros de configuración.

Implementación de Instancia Única

Ejecuta stellar-horizon en un solo proceso del o/s y realizará los tres roles simultáneamente.

variable de entornoejemplo
DATABASE_URLpostgres://localhost/horizon_pubnet
NETWORKpubnet
HISTORY_RETENTION_COUNT518400

Implementación de Múltiples Instancias

En esta variante de implementación escalable, ejecutas múltiples instancias de stellar-horizon, cada una desempeñando un subconjunto de los roles. Esto te permite escalar horizontalmente cada una de las funciones de rol de manera independiente.

Instancia de Rol de Ingestión

Debes asignar al menos una instancia para realizar la ingestión continua y capturar la actividad de la red. Esto limitará por defecto el almacenamiento de la actividad de red ingerida en la base de datos a nuestra recomendación de una ventana deslizante de los últimos 30 días.

variable de entornoejemplo
DATABASE_URLpostgres://localhost/horizon_pubnet
NETWORKpubnet
HISTORY_RETENTION_COUNT518400
DISABLE_TX_SUBtrue

Instancia de Rol de API

Puedes ejecutar ninguna o múltiples instancias para atender solicitudes de API solo de lectura. Ten en cuenta que no es necesario definir configuraciones de red aquí, ya que Horizon solo lee de la base de datos.

variable de entornoejemplo
DATABASE_URLpostgres://localhost/horizon_pubnet
INGESTfalse
DISABLE_TX_SUBtrue

Instancia de Rol de Envío de Transacciones

Puedes ejecutar ninguna o múltiples instancias para atender solicitudes de envío de transacciones. Si ejecutas una instancia con el envío de transacciones habilitado, se requiere que la implementación de Horizon tenga al menos una instancia que desempeñe el rol de ingestión en la misma base de datos. El envío de transacciones de Horizon depende de que esta ingestión en vivo tenga lugar contra la base de datos para confirmar el estado de envío de la tx.

Si se planea que la ingestión se realice en una instancia separada, agrega INGEST=false en esta instancia, de lo contrario, no incluyas el parámetro, Horizon asumirá por defecto INGEST=true. Cuando una instancia habilitada para envío de transacciones tiene INGEST=true efectivo, configurará automáticamente el parámetro relacionado STELLAR_CORE_URL para usar la instancia de núcleo cautiva lanzada internamente y no será necesario que la implementación establezca el valor de configuración explícitamente.

Si estableces INGEST=false, entonces debes definir la variable STELLAR_CORE_URL en esta instancia habilitada para el envío de transacciones, ya que no habrá una instancia de núcleo cautivo alojado internamente como parte de la ingestión disponible para referencia, en su lugar, STELLAR_CORE_URL proporciona la capacidad de definir la URL de un puerto HTTP de instancia de núcleo hacia el cual Horizon enviará los envíos de transacciones.

variable de entornoejemplo
DATABASE_URLpostgres://localhost/horizon_pubnet
STELLAR_CORE_URLhttp://example.watcher.core:11626
INGESTfalse

Notas

Ingestión

Si has configurado tu implementación para realizar el rol de ingestión, entonces se recomienda firmemente revisar Ingestión primero y Filtrado segundo y tener eso en cuenta para los parámetros de configuración para lograr el mejor rendimiento relacionado con los requisitos de tu aplicación antes de proceder más.

  • Horizon creará un subdirectorio bajo el directorio de trabajo actual del proceso del o/s para almacenar los archivos de datos en tiempo de ejecución de núcleo cautivo. Consulta Requisitos previos para el tipo y la cantidad de almacenamiento recomendado. Puedes anular esta ubicación con la variable de entorno opcional CAPTIVE_CORE_STORAGE_PATH, establecida en un directorio en el sistema de archivos donde el núcleo cautivo almacenará los archivos de ejecución.

DISABLE_TX_SUB

Este parámetro de configuración es opcional, establecido como FALSO por defecto. Controla si Horizon aceptará solicitudes HTTP al endpoint API /tx y las reenviará a la red. Consulta Cuentas de Canal para algunas recomendaciones sobre optimizaciones opcionales de envío de transacciones del cliente.

  • Cuando se establece en FALSO, requiere que el proceso de ingestión en vivo esté corriendo en la misma base de datos porque Horizon depende de nuevos libros contables de la red para confirmar el estado de envío de una transacción, Horizon informará un error de inicio si detecta que no hay ingestión en vivo. Requiere que INGEST=true o que STELLAR_CORE_URL esté definido para acceder a una instancia de Core.
  • Cuando el envío de transacciones está deshabilitado al establecerlo en VERDADERO, Horizon devolverá 405 en POSTs a /tx.

NETWORK

Este parámetro de configuración es opcional, puede ser una de las redes públicas de Stellar, 'pubnet' o 'testnet'. Activa a Horizon para configurar automáticamente las configuraciones para el resto de los ajustes de Horizon y generar la configuración correcta de core toml/cfg. Si solo necesitas que Horizon se conecte a una de esas redes públicas de Stellar, esto atenderá todas las configuraciones relacionadas.

  • Si deseas conectar Horizon a una red Stellar diferente a pubnet o testnet o anular cualquiera de los valores predeterminados que la utilización de NETWORK iniciará, las variables de entorno clave que se pueden establecer son: HISTORY_ARCHIVE_URLS, CAPTIVE_CORE_CONFIG_PATH, NETWORK_PASSPHRASE, CAPTIVE_CORE_STORAGE_PATH, STELLAR_CORE_URL.

DB_URL

Este parámetro de configuración es obligatorio, especifica la base de datos de Horizon. Su valor sigue este formato: dbname=<pg_dbname> user=<pg_user_name> password=<pg_user_pwd> host=<host_address>

LOG_LEVEL

Este parámetro de configuración es opcional, puede ser uno de 'info', 'error', 'debug'.

HISTORY_RETENTION_COUNT

Este parámetro de configuración es opcional, determina la ventana deslizante máxima de datos históricos de la red a retener en la base de datos desde la ingestión. El valor se expresa como un recuento absoluto de libros contables, que es una forma indirecta de definir una duración de tiempo, cada libro contable siendo aproximadamente de 5 segundos. Se establece en 0 por defecto, lo que significa que no purgará ningún historial de la base de datos. Para realizar la ventana deslizante recomendada de un mes, establece esto en 518400, que es el número aproximado de libros contables en 30 días. Consulta Recursos de Cómputo para saber cómo el espacio de almacenamiento de la base de datos está estrechamente relacionado con esta configuración.

Pasando Configuraciones a Horizon

El binario stellar-horizon busca variables de entorno del proceso para la configuración. Dependiendo de cómo se instaló Horizon, el método que uses para configurar el entorno del proceso diferirá:

  • Bare-metal
    • No administrador de paquetes: usa variables de entorno del O/S para pasar configuraciones. Hay muchas herramientas que puedes usar para gestionarlas, como direnv o dotenv.
    • Administrador de paquetes: el wrapper stellar-horizon-cmd proporcionado iniciará un nuevo proceso y creará variables de entorno en el proceso desde /etc/default/stellar-horizon y luego lanzará el 'stellar-horizon'. Para establecer configuraciones, edita el archivo en /etc/default/stellar-horizon.
      información

      Este script invoca a Horizon con el usuario stellar, así que asegúrate de que los permisos para el usuario estén configurados adecuadamente. El directorio de trabajo actual debe ser escribible para este usuario y el usuario debe poder ejecutar los binarios stellar-horizon y stellar-core; etc.

  • Contenerizado

Inicializar la Base de Datos de Horizon

Antes de ejecutar el servidor Horizon por primera vez, debes inicializar la base de datos de Horizon. Esta base de datos se utilizará para toda la información producida por Horizon, especialmente información histórica sobre transacciones que han ocurrido en la red Stellar.

Para preparar una base de datos para el uso de Horizon, primero asegúrate de que esté en blanco. Es más fácil crear una nueva base de datos en tu servidor PostgreSQL específicamente para el uso de Horizon. Recomendamos crear un nuevo usuario (rol) en postgres dedicado a la base de datos de Horizon y asignar a ese usuario (rol) como el propietario de esta base de datos.

Para ilustrar un ejemplo usando psql, primero inicia sesión en el servidor de la base de datos usando la herramienta de línea de comandos psql como superusuario, y luego crea el nuevo usuario (rol) y la base de datos para Horizon:

postgres=#
postgres=# CREATE ROLE horizon WITH LOGIN;
CREATE ROLE
postgres=#
postgres=# CREATE DATABASE horizon OWNER horizon;
CREATE DATABASE
postgres=#

Además, puedes establecer una contraseña en tu nuevo usuario postgres horizon con ALTER USER.

Una vez completado, puedes componer el valor completo del parámetro de configuración para el acceso a la db DATABASE_URL="dbname=horizon user=horizon password=<value_here> host=<address_of_pg_server>".

A continuación, ejecuta el binario de Horizon para instalar el esquema en la base de datos vacía desde la línea de comandos. En este ejemplo, asume que el shell actual no tiene DATABASE_URL en el entorno aún, así que expórtalo primero al shell:

$ export DATABASE_URL="dbname=horizon user=horizon password=<value_here> host=<address_of_pg_server>"
$ stellar-horizon db init

Configuraciones Opcionales de Postgres

Basado en observaciones de rendimiento a lo largo del tiempo, recomendamos configuraciones adicionales de Postgres (postgresql.conf), pero estas no son obligatorias:

  • Establece random_page_cost=1 si estás usando almacenamiento SSD. Con esta configuración, el Planificador de Consultas hará un mejor uso de los índices, especialmente para consultas de JOIN. Hemos notado una gran mejora de velocidad para algunas consultas con esta configuración.

_ Para mejorar la disponibilidad de los servidores de ingestión, api, envío de transacciones, se recomienda establecer los siguientes valores:

  • tcp_keepalives_idle: 10 segundos
  • tcp_keepalives_interval: 1 segundo
  • tcp_keepalives_count: 5

Con la configuración anterior, si no hay consultas de un cliente dado durante 10 segundos, Postgres debería comenzar a enviar paquetes de keepalive TCP. Reintentará 5 veces cada segundo. Si no hay respuesta del cliente después de ese tiempo, se cerrará la conexión.

Siguiente Paso

Después de completar la configuración, ahora estás listo para proceder a Ejecutar Horizon!