Saltar para o conteúdo principal Saltar para a navegação Saltar para o rodapé
Programa de Parceiros de Design: registe-se gratuitamente, plano BUSINESS vitalício

Limites e Quotas

Referência para os limites, máximos e quotas que se aplicam a repositórios, serviços, redes e armazenamento do Rediacc.

Limites e Quotas

Esta página documenta os limites rígidos e flexíveis que se aplicam às implementações do Rediacc. Compreender estes limites ajuda a planear a capacidade e a evitar restrições inesperadas.


Serviços por Repositório

Cada repositório suporta até 61 serviços a correr em simultâneo.

Este é um limite rígido determinado pelo espaço de endereços de rede alocado a cada repositório. Cada serviço obtém o seu próprio endereço IP privado dedicado, e o bloco de endereços de cada repositório acomoda exatamente 61 slots de serviço.

Se estiver a aproximar-se deste limite, consolide serviços mais pequenos (por exemplo, mova sidecars ou agentes de monitorização para um repositório separado com o seu próprio limite de isolamento) ou refatore para reduzir o número de processos a correr de forma independente numa única aplicação.


Repositórios por Máquina

Não existe um limite rígido imposto pelo Rediacc. O limite prático depende dos recursos da sua máquina:

RecursoImpacto
Espaço em discoCada repositório é uma imagem de disco encriptada. Uma máquina com 1 TB de armazenamento utilizável pode conter muitos repositórios, mas o tamanho total de todas as imagens deve caber dentro do pool do datastore.
RAMCada repositório em execução inicia o seu próprio daemon Docker e contentores. O uso de memória depende das suas cargas de trabalho.
CPUOperações de repositório paralelas (iniciar, cópia de segurança, fork) adicionam carga de CPU temporária.

As implementações típicas correm 10 a 50 repositórios por máquina sem problemas. Máquinas com 32 GB+ de RAM e 500 GB+ de armazenamento correm regularmente mais de 100 repositórios.

Limite de ID de rede ao nível do sistema

Cada repositório recebe um ID de rede único, um número usado para calcular o seu intervalo de endereços IP privados. Este pool é partilhado por todas as máquinas e repositórios geridos pela mesma configuração do Rediacc.

LimiteValor
IDs de rede disponíveis no total~261.944
ÂmbitoPor configuração (partilhado por todas as máquinas numa configuração)

Quando um repositório é eliminado, o seu ID de rede é libertado e fica disponível para reutilização. O Rediacc aloca IDs sequencialmente e apenas procura intervalos libertados quando o contador avançado se aproxima do limite. Na prática, este limite nunca é atingido. Exigiria criar e rastrear centenas de milhares de repositórios ao longo da vida de uma única configuração.


Forks

Não existe limite no número de forks ativos de um repositório. Cada fork é um clone completo copy-on-write com o seu próprio armazenamento encriptado, endereços de rede e daemon Docker. Os forks consomem espaço em disco proporcional aos dados escritos neles após a criação (não ao tamanho total do pai).


Portas Externas

Portas sempre ativas

As portas só são abertas quando configurar um IP público com rdc config infra set --public-ipv4. Até então, não há portas abertas na máquina. Uma vez configurado:

PortaProtocoloFinalidade
80TCPHTTP: gerido pelo Traefik; devolve 404 para domínios não configurados, não passa para nenhum serviço
443TCPHTTPS: igual ao anterior; pedidos sem rota correspondente são rejeitados na camada de proxy
10000-10010TCPIntervalo dinâmico para encaminhamento TCP gerido pelo Rediacc

HTTP/HTTPS diferem das portas TCP brutas: mesmo que as portas 80 e 443 estejam abertas, cada pedido é validado pelo proxy reverso contra uma tabela de encaminhamento explícita. Sem um serviço configurado e domínio correspondente, nenhum código de aplicação é atingido e nenhum dado é exposto.

Encaminhamento TCP/UDP por opt-in

Todas as outras portas (bases de dados, caches, message brokers, DNS, correio) estão fechadas por predefinição e devem ser abertas explicitamente. Isto mantém a superfície de ataque da máquina mínima.

Para expor uma porta de um serviço específico:

labels:
  - "rediacc.tcp_ports=5432"   # expose PostgreSQL from this container
  - "rediacc.udp_ports=53"     # expose DNS from this container

Para abrir uma porta ao nível da máquina (disponível para todos os serviços):

rdc config infra set -m server-1 --tcp-ports 25,587,993   # mail server
rdc config infra push -m server-1

Nunca exponha portas de base de dados ou cache externamente a não ser que tenha um requisito específico. Use rotas automáticas HTTPS para serviços web e mantenha os serviços de armazenamento internos.


Datastore

O datastore é um pool de tamanho fixo criado quando uma máquina é configurada pela primeira vez. O seu tamanho não cresce automaticamente.

  • Tamanho mínimo recomendado: 50 GB
  • Tamanho máximo: Limitado pelo seu disco. Um único pool pode abranger um disco completo.
  • Redimensionar: Use rdc datastore resize para expandir um pool existente. A redução não é suportada.
  • Sistema de ficheiros: O Rediacc usa BTRFS internamente para snapshots copy-on-write e forking eficiente. Requer uma máquina a correr Linux kernel 6.1 ou posterior para estabilidade total em produção.

Cada imagem de repositório tem um tamanho máximo fixo definido no momento da criação (predefinição: 10 GB). Use rdc repo resize para expandir um repositório individual. A soma de todos os tamanhos máximos de repositório não pode exceder o tamanho do pool do datastore.


Rotas HTTP

Cada serviço com a etiqueta rediacc.service_port obtém uma rota HTTPS automaticamente. Não existe limite no número de serviços com rotas, sujeito ao máximo de 61 serviços por repositório.

Os certificados TLS wildcard são provisionados por repositório na primeira implementação via Let’s Encrypt (desafio Cloudflare DNS-01). O Let’s Encrypt impõe um limite de 50 certificados por domínio registado por semana. Como o Rediacc usa um certificado wildcard por repositório (não por serviço), uma implementação com mais de 50 novos repositórios numa única semana pode atingir este limite.

Os forks reutilizam o certificado wildcard existente do repositório pai e não consomem nenhuma quota de certificado.


Checkpoint / Restore (CRIU)

A migração ao vivo via CRIU tem as seguintes restrições:

  • Por opt-in: Apenas os contentores com a etiqueta rediacc.checkpoint=true são submetidos a checkpoint. As bases de dados e serviços sem estado são excluídos por predefinição e arrancam do zero no restore.
  • Requisito de kernel: Linux 6.1+ tanto na máquina de origem como na de destino.
  • Modo de rede: O CRIU requer modo de rede host. Os contentores que usam configurações de rede personalizadas não podem ser submetidos a checkpoint.
  • Memória: O tamanho dos dados do checkpoint é igual à memória residente do processo submetido a checkpoint. Conjuntos de dados grandes em memória (por exemplo, uma aplicação Node.js com 4 GB de dados em cache) produzem ficheiros de checkpoint de 4 GB.
  • Conexões TCP: As aplicações devem tolerar perda de conexão no restore. As conexões TCP ativas não são preservadas. O processo restaurado vê os sockets como fechados e deve reconectar. Isto aplica-se tanto aos caminhos de restore na mesma máquina como entre máquinas.
  • O fork ao vivo na mesma máquina não é suportado: rdc repo fork --parent X --tag Y --checkpoint tem sucesso na captura do checkpoint, mas o rdc repo up subsequente na mesma máquina falha com criu failed: type RESTORE errno 0 quando o pai ainda está a correr. Isto é causado pelos bugs upstream do CRIU checkpoint-restore/criu#478 e checkpoint-restore/criu#514 a interagir com network_mode: host. Para preservação do estado de processo no local na mesma máquina, use rdc repo down --checkpoint + rdc repo up. Para migração ao vivo, use rdc repo push --checkpoint para uma máquina diferente.

Cópias de Segurança

LimiteValor
Destinos de cópia de segurança por repositórioIlimitado
Tarefas de cópia de segurança simultâneas1 por repositório (as tarefas ficam em fila se acionadas em simultâneo)
Frequência de cópia de segurançaSem intervalo mínimo imposto; limitado pela largura de banda do seu armazenamento. Use rdc config backup-strategy set --name <name> --bwlimit "6M" para limitar a velocidade de envio (sintaxe --bwlimit do rclone: simples 6M, direcional 6M:off, ou tabela de horários 08:00,3M;22:00,10M)
RetençãoControlada pelo seu fornecedor de armazenamento (S3, Cloudflare R2, etc.). O Rediacc não impõe políticas de retenção.
Cópia de segurança entre máquinasSuportado; a máquina de destino deve ter espaço suficiente no datastore

CLI e API

LimiteValor
Comandos rdc concorrentes contra a mesma máquinaIlimitado (cada comando abre a sua própria conexão SSH)
Concorrência predefinida de arranque paralelo de repositório3 (ajustável com --concurrency)
Tempo de espera de conexão SSH30 segundos para a conexão inicial
Duração da sessão rdcSem tempo limite; operações de longa duração mantêm a conexão ativa

Versões de SO Suportadas

As máquinas remotas devem correr um dos seguintes para satisfazer os requisitos de kernel, sistema de ficheiros e isolamento de rede do Rediacc. Esta lista é o conjunto autoritativo testado em CI (matriz Bridge Workers) e deve permanecer sincronizada com os Requisitos:

SOVersão MínimaKernel PredefinidoNotas
Ubuntu24.04 LTS (recomendado)6.8AppArmor predefinido.
Debian13 (Trixie); 12 Bookworm também funciona6.12 (6.1 no Debian 12)
Fedora436.12SELinux enforcing predefinido.
openSUSE Leap16.06.4+AppArmor predefinido.
Oracle Linux10 (UEK)UEK 7+O UEK mantém btrfs; SELinux enforcing predefinido.

Kernel mínimo exigido: 6.1. As máquinas com kernels mais antigos são rejeitadas no momento da configuração com uma mensagem de erro clara.

Porquê o kernel 6.1? O Rediacc usa BTRFS para armazenamento encriptado de repositório e forking copy-on-write. O Linux 6.1 introduziu melhorias críticas no BTRFS que reduzem significativamente os tempos de montagem para grandes datastores, melhoram o desempenho de eliminação de snapshots e corrigem problemas de integridade de dados presentes em kernels anteriores. O kernel 6.1 também é necessário para os hooks de isolamento de rede ao nível do kernel que impõem o isolamento entre repositórios, reescrevendo transparentemente as chamadas bind() e bloqueando conexões entre repositórios.

Porquê não o kernel stock do Rocky Linux 10 / RHEL 10? O kernel stock do RHEL 10 é distribuído sem o módulo btrfs (modprobe btrfs falha com “Module btrfs not found”). O backend de armazenamento encriptado do Rediacc não consegue funcionar sem btrfs. O Oracle Linux 10 é o único alvo compatível com RHEL na lista suportada porque usa por predefinição o Unbreakable Enterprise Kernel (UEK), que mantém btrfs. Consulte Requisitos -> Porquê o UEK? para a explicação completa.

Matriz de funcionalidades do kernel

Os operadores podem ler isto como uma vista rápida do que cada SO testado em CI fornece de origem. Os cinco satisfazem todos os requisitos; a matriz é uma referência para operadores, não um critério de bloqueio.

SOmódulo btrfscgroups v2Landlock (ABI >= 1)hooks eBPF cgroup
Ubuntu 24.04in-treehierarquia unificadasim (5.13+)sim
Debian 13in-treehierarquia unificadasimsim
Fedora 43in-treehierarquia unificadasimsim
openSUSE Leap 16.0in-treehierarquia unificadasimsim
Oracle Linux 10 (UEK)in-tree (via UEK)hierarquia unificadasimsim