docs: execucao e entrada de trafego no cluster - #24
Conversation
NicolasArthurDev
left a comment
There was a problem hiding this comment.
- O ADR-0032 ainda fala em fila. A Decisão diz "notificação na fila de saída", e o PR existe justamente para tirar "fila" dos documentos. Deveria ser "notificação pendente".
- A afirmação sobre metrics-server está errada. O KEDA serve as métricas do scaler de PostgreSQL pelo próprio metrics apiserver dele. O commit que corrige isso está no #28 (
docs: corrige a dependencia de metrics-server na adr-0032) e deveria vir para este PR. - Falta decidir a concorrência no ScaledJob. É a lacuna principal. O ScaledJob cria Jobs conforme o valor que a query devolve. Sem regra de quem pega qual lote, dois Jobs leem o mesmo cursor e indexam a mesma coisa duas vezes. O ADR precisa dizer como o lote é reservado, por exemplo um Job por tenant,
FOR UPDATE SKIP LOCKEDou ummaxReplicaCountcom estratégia de escala. - O texto da Decisão do ADR-0027 foi reescrito com status Aceita. O ADR-0018 seguiu o padrão "Substituída pelo...". Para manter o histórico, seria melhor anotar "Alterada pelo ADR-0032" no 0027.
- Status do ADR-0032. Está "Aceita", mas o próprio texto diz que descreve o alvo e não o que roda. Vale considerar "Proposta" até o KEDA ser instalado.
- Menor: o "Como testar" manda procurar "ingress" e não achar nada, mas o ADR-0027 cita Ingress de propósito.
There was a problem hiding this comment.
Para aprovar: tirar "fila de saída" da Decisão do ADR-0032, trazer para cá a correção do metrics-server que está no #28 e registrar no ADR como o ScaledJob evita que dois Jobs processem o mesmo lote.
NicolasArthurDev
left a comment
There was a problem hiding this comment.
Ótimo trabalho! A reserva por cofre com FOR UPDATE SKIP LOCKED fechou bem a questão da concorrência, e as alternativas registradas (maxReplicaCount 1 e advisory lock por tenant) deixam claro por que essa foi a escolhida. O status "Proposta" e o "alterada pelo ADR-0032" no 0027 deixam o histórico fácil de seguir.
Só uma ideia para o futuro, sem bloquear: como a trava dura a transação, um cofre grande segura uma transação longa durante toda a indexação. Se isso pesar, dá para registrar depois um limite de tamanho de lote. Aprovado.
O que mudou
FOR UPDATE SKIP LOCKEDPor quê
Duas coisas estavam erradas no desenho, e as duas por falta de decisão registrada.
A escala a zero era promessa sem mecanismo. A documentação do Kubernetes define Job como tarefa
que roda até terminar e para, então alguém precisa criá-lo a cada lote, e nenhum ADR dizia quem.
O diagrama mostrava dois Jobs parados dentro de um grupo chamado "Escala a zero", como se
fossem serviços residentes esperando carga, o que não existe. O ADR-0018 rejeitou broker e o
ADR-0021 rejeitou fila dedicada, os dois condicionando a entrada a medir o custo primeiro. KEDA
lendo o cursor de revisão cabe nesse histórico sem contrariá-lo, porque continua sendo o mesmo
polling, agora feito pela plataforma.
A entrada de tráfego usava Ingress. A documentação do Kubernetes diz que "the Ingress API has
been frozen" e que o projeto recomenda Gateway no lugar dela. Gateway, GatewayClass e HTTPRoute
estão GA, e o TLS termina nos listeners do Gateway. Uma caixa "Ingress" virava três recursos com
donos distintos.
Quatro passagens diziam "enfileira a nota" ou "enfileira a notificação". Não existe fila: a
escrita avança o cursor de revisão, e a notificação é gravada como pendente.
Conferido
kubernetes/community/icons, que o draw.io usa sem alterarO que a infraestrutura da disciplina oferece
Conferido no repositório que descreve o cluster de produção:
gatewayClassName: cilium. O Cilium implementa o Gateway, com Envoy e kube-proxy substituídoIsso fecha a escolha de Gateway API e mostra que não há banco gerenciado, então o PostgreSQL
roda no cluster com volume persistente. O diagrama foi corrigido, porque ele estava desenhado
fora.
KEDA não está instalado. O ADR-0032 passa a registrar isso como dependência de infraestrutura, e
descreve o alvo em vez do que roda hoje. O próprio KEDA serve as métricas do scaler de
PostgreSQL, então metrics-server não é pré-requisito. Instalar é por Helm, que já existe nas
máquinas.
Como testar
Auto-review (checklist)