El contenedor
Lender se construye desde un Dockerfile multi-etapa — un builder Go Alpine que produce un binario estático, copiado a un runtime distroless nonroot — y escucha en el puerto
8080. Se entrega como una imagen de contenedor que despliegas en tu clúster de con el tooling de ciclo de vida estándar de la plataforma; esta página no asume ningún empaquetado particular más allá de la imagen.
Sondas operativas:
| Endpoint | Propósito |
|---|---|
GET /health | Liveness. |
GET /readyz | Readiness de dependencias. |
GET /version | Metadatos de build y versión. |
Dependencias
| Dependencia | Rol |
|---|---|
| PostgreSQL 17 | Almacén de datos primario, con soporte primario/réplica y aislamiento schema-por-tenant en modo multi-tenant. |
| Valkey 8 (compatible con Redis) | Caché, rate limiting y la caché de credenciales M2M. |
| RabbitMQ | Transporte del publicador de eventos, impulsado por un dispatcher de outbox transaccional. |
| RedPanda | Backbone de streaming para el catálogo de eventos del ciclo de vida (vía la librería de streaming de Lerian). |
| Midaz | El de partida doble, alcanzado a través del SDK oficial. Lender se autentica vía Access Manager con credenciales máquina-a-máquina (M2M) por tenant, obtenidas de AWS Secrets Manager y cacheadas en Valkey. |
| Casdoor | Proveedor de identidad que respalda la autorización de rutas (vía la librería de auth de Lerian). |
| Systemplane | Plano de configuración en tiempo de ejecución, montado bajo /api/v1/systemplane. |
Superficie de configuración
La configuración es enteramente por entorno. Las claves de abajo son un subconjunto curado — las que moldean el comportamiento — no la lista completa.
| Grupo | Clave | Qué controla |
|---|---|---|
| App | ENV_NAME, LOG_LEVEL, DEPLOYMENT_MODE, SERVER_ADDRESS | Nombre de entorno, verbosidad de logs, modo de despliegue y dirección de escucha. |
| Tenancy | MULTI_TENANT_ENABLED, DEFAULT_TENANT_ID | Alternar entre modos single- y multi-tenant, y el tenant usado en single-tenant. |
| Tenancy (MT) | MULTI_TENANT_MAX_TENANT_POOLS, MULTI_TENANT_CIRCUIT_BREAKER_THRESHOLD | Techo de pools de conexión por tenant y punto de disparo del circuit breaker. |
| Postgres | POSTGRES_HOST, POSTGRES_PORT, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_NAME, POSTGRES_SSLMODE, MIGRATIONS_PATH | Conexión a la base primaria y migraciones. |
| Caché | REDIS_HOST, REDIS_PASSWORD, M2M_CREDENTIAL_CACHE_TTL_SEC | Conexión a Valkey y cuánto se cachean las credenciales M2M. |
| Mensajería | RABBITMQ_ENABLED, RABBITMQ_HOST, OUTBOX_ENABLED, OUTBOX_DISPATCH_INTERVAL_SEC | Transporte RabbitMQ y la cadencia del dispatcher del outbox. |
| Streaming | STREAMING_ENABLED, STREAMING_BROKERS, STREAMING_TLS_ENABLED | Toggle de streaming de eventos, direcciones de brokers y TLS. |
| Auth | PLUGIN_AUTH_ENABLED | Habilita la autorización de rutas contra el proveedor de identidad. |
| Ledger M2M | AWS_REGION | Región del Secrets Manager que guarda las credenciales de Midaz por tenant. |
| Observabilidad | ENABLE_TELEMETRY, OTEL_EXPORTER_OTLP_ENDPOINT | Toggle de telemetría y endpoint del colector OTLP. |
| Límites | RATE_LIMIT_ENABLED | Rate limiting de peticiones. |
| Docs | SWAGGER_ENABLED | Sirve el documento OpenAPI y la UI de referencia de la API. |
Modos multi-tenant
Lender corre en uno de dos modos:
- Single-tenant — un tenant (
DEFAULT_TENANT_ID), un esquema de base de datos y una organización de ledger y ledger fijados en tiempo de construcción usados como default de posting. - Multi-tenant (
MULTI_TENANT_ENABLED=true) — persistencia schema-por-tenant, un pool de clientes de Midaz por tenant y eventos y postings de alcance por tenant. En este modo no hay default de ledger por entorno: el destino de ledger viene por transacción del perfil contable del producto.
Posting al ledger y enrutamiento fail-closed
Cada evento financiero se contabiliza en el ledger a través de una intención de posting durable y un relay asíncrono — la ruta completa está en Lender en la plataforma. La propiedad operativamente importante: el enrutamiento falla cerrado. Un posting se contabiliza en la organización de ledger y el ledger resueltos desde el perfil contable (single-tenant cae de vuelta al default por entorno); si ninguno resuelve un destino no vacío, Lender se niega a contabilizar en lugar de contabilizar en un ledger vacío o equivocado. En modo multi-tenant, un producto sin perfil contable por lo tanto no puede hacer posting — que es la salvaguarda buscada.
Próximos pasos
Lender en la plataforma
La ruta de posting, el catálogo de eventos y el aislamiento de tenants en detalle.

