# Autoscaling

{% hint style="warning" %}
Os recursos de autoscaling estão disponíveis apenas para realms que utilizam o modelo **Consumption-Based.** Se o seu realm utiliza esse modelo, é altamente recomendado ativar o autoscaling para aproveitar a elasticidade automática, o que pode reduzir custos de consumo.
{% endhint %}

## O que é Autoscaling

Autoscaling é o processo de ajuste de recursos computacionais de acordo com a carga de trabalho.\
Os pipelines são escaláveis horizontalmente, o que significa que réplicas podem ser **criadas ou removidas dinamicamente**, dependendo do número de mensagens (invocações) na fila.

A Digibee Integration Platform monitora continuamente a fila e ajusta o número de réplicas para garantir o **uso ideal dos recursos** e o **processamento eficiente**, independentemente do tipo de trigger que gerou as mensagens.

## Como Autoscaling funciona

<figure><img src="https://content.gitbook.com/content/cO0A6g1dOsu8BiHYqO67/blobs/9IrvstRKrEQtUvDuZ22o/Untitled%20(19).png" alt=""><figcaption></figcaption></figure>

Toda execução de pipeline começa com um **trigger**. Diferentes tipos de triggers, como [Scheduler](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/triggers/scheduling/scheduler), [Event](https://app.gitbook.com/s/EKM2LD3uNAckQgy1OUyZ/triggers/messaging-and-events/event) ou [HTTP](https://app.gitbook.com/s/EKM2LD3uNAckQgy1OUyZ/triggers/web-protocols/http), possuem comportamentos e critérios de ativação específicos. Esses triggers determinam se uma mensagem será enviada para a fila de execução para processamento ou se deve ser ignorada ou rejeitada.

### Algoritmo de Autoscaling

O algoritmo de autoscaling escala os pipelines **horizontalmente**. A cada **10 segundos**, a Plataforma monitora o sistema e pode executar os seguintes comandos:

#### Activation (de 0 para 1)

* Se o **número mínimo de réplicas estiver configurado como zero**, o pipeline pode receber mensagens, mas não terá nenhuma réplica em execução.
* A primeira réplica é implantada quando a **primeira mensagem é recebida**, o que pode **aumentar a latência**.
* O tempo mínimo de inicialização é de **20 segundos**.
* Uma vez inicializada, a réplica processa a primeira e as próximas mensagens.

{% hint style="info" %}
A quantidade e o tipo de conectores no pipeline podem impactar o tempo de inicialização.
{% endhint %}

#### Scale Up (de 1 para N)

Quando o número de mensagens na fila ultrapassa **70% do total de execuções concorrentes**, a Plataforma implanta **réplicas adicionais**.

#### Scale Down (de N para 1)

A Plataforma reduz as réplicas quando menos recursos são necessários. O sistema calcula o número de réplicas necessárias com a seguinte fórmula:

```
Réplicas = ((Taxa de mensagens por segundo * Tempo de resposta em segundos) / Total de execuções concorrentes)
```

#### Scale-to-Zero (Cooldown)

Se o mínimo de réplicas for zero e uma única réplica permanecer ociosa por mais de **60 segundos**, o pipeline **reduz para zero réplicas**. Novas réplicas só são implantadas quando chegam novas mensagens.

* **Cooldown Personalizado:** É possível configurar um tempo de cooldown entre 60 e 300 segundos nas Configurações Avançadas do pipeline. Esse tempo define quanto o sistema espera antes de reduzir para zero após ficar ocioso.

## Autoscaling na Digibee Integration Platform

O processo de autoscaling na Digibee Integration Platform segue as seguintes fases:

### Fase 1: Ativação da primeira réplica

1. O sistema executa um comando de **Ativação** para criar e iniciar a **primeira réplica**.
2. Esse comando aciona o processamento da **primeira mensagem da fila**.
3. Os componentes necessários para o processamento do pipeline só são inicializados quando a réplica é implantada, ou seja, quando chegam mensagens.

{% hint style="info" %}
Como essa etapa pode adicionar latência ao tempo de resposta da primeira mensagem, recomenda-se configurar **mínimo de réplicas ≥ 1** em pipelines sensíveis à latência.
{% endhint %}

### Fase 2: Processamento de mensagens

1. Após a implantação e inicialização da primeira réplica, a Plataforma processa as primeiras mensagens conforme as configurações de concorrência.
2. Quando novas mensagens chegam:
   * Se houver capacidade disponível, elas são processadas pelos consumidores ativos.
   * Caso contrário, um [comando Scale Up](#scale-up-de-1-para-n) inicia uma nova réplica.

{% hint style="info" %}
O impacto do Scale Up no tempo de resposta é menor, pois ele ocorre apenas quando a fila atinge 70% da capacidade de execução concorrente.
{% endhint %}

**Fórmula da capacidade total de processamento:**

```
Capacidade total = Replicas × Execuções simultâneas por réplica
```

#### Fase 3: Redução de réplicas

* Se houver apenas algumas mensagens na fila, a Plataforma reduz gradualmente o número de réplicas até restar apenas uma.
* Se essa réplica única permanecer ociosa por mais de **60 segundos**, um [comando de Cooldown ](#scale-to-zero-cooldown)reduz o pipeline para zero réplicas.
* Novas réplicas só são implantadas quando chegam novas mensagens.

## Estratégias de Autoscaling

Existem dois tipos de estratégias de implantação de autoscaling na Digibee Integration Platform: **Scale-to-Zero** e **Always On**.

### Scale-to-Zero

O pipeline é implantado com autoscaling habilitado e mínimo de **zero réplicas**. Ele pode receber novas requisições, mas funciona com “zero réplicas”, sem custo até que a primeira mensagem chegue.

#### Cenário de uso recomendado

Essa estratégia é ideal para workloads que **não exigem resposta imediata** para a primeira mensagem.\
Por exemplo, um pipeline que roda apenas uma vez ao dia pode permanecer inativo a maior parte do tempo.\
Veja outros cenários onde o Scale to zero é aplicável:

* Pipelines agendados usando [trigger Scheduler](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/triggers/scheduling/scheduler).
* Workloads de baixa criticidade, em que a primeira mensagem pode tolerar latência extra.
* Workloads que buscam maximizar economia de custos durante períodos ociosos.

### Always On

O pipeline é implantado com autoscaling habilitado e mínimo de **1 ou mais réplicas**. Pelo menos uma réplica está sempre ativa, pronta para processar as primeiras mensagens imediatamente.

#### Cenário de uso recomendado

Essa estratégia garante respostas rápidas de baixa latência, mesmo em períodos de baixo tráfego. Always On é aplicável nos seguintes cenários:

* [Pipelines acionados por API](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/triggers/web-protocols/api).
* Workloads críticos, em que não é aceitável adicionar tempo extra de resposta na primeira mensagem.

{% hint style="info" %}
Substitua um pipeline Large com 1 réplica sem autoscaling por um pipeline Small com autoscaling habilitado, configurado entre 1 e 4 réplicas.
{% endhint %}
