Blogue ·
Lado nenhum é um lugar: mudanças entre sedes
Levar uma máquina para outra sede significa que durante um tempo não está em nenhum centro de dados. Quinze estados e três saídas do não saber.
Por Provibr
Mudar um servidor de um bastidor para outro dentro do mesmo edifício é um único ato físico com uma única incerteza: está lá ou não está. Isso foi modelado há algum tempo, e o que se revelou interessante foi o instante em que o destino não está reservado nem ocupado.
Levar um servidor para outra cidade não é o mesmo problema com um casaco maior. É uma sequência de atos em dois lugares, com um intervalo durante o qual a máquina não está em nenhum centro de dados, mais um lado de rede, um lado de endereços e um lado de agentes que têm de voltar a ser verdade na outra ponta. A tentação é reaproveitar a deslocação existente e deixar cair a verificação que obriga origem e destino à mesma sede. Não o fizemos, e a razão é esta.
Porque é um segundo objeto e não um indicador
A deslocação existente já tem origem, destino, uma verificação prévia congelada, uma reserva no destino, um contador de comparação e um rasto que só acrescenta. O que parece faltar é uma única verificação de base de dados.
Acrescentar um indicador fundiria duas máquinas de estados numa só que não serve nenhuma das duas. Uma deslocação dentro de uma sede tem nove estados; uma mudança entre sedes tem quinze. A primeira tem duas saídas do «não sabemos», a segunda tem três, e essa terceira é que a máquina se perdeu a caminho, coisa que entre dois bastidores da mesma sala não pode acontecer. E retirar a verificação deixaria qualquer deslocação existente, incluindo uma planeada na semana passada, atravessar em silêncio a fronteira de sede.
Partilha-se tudo o que é realmente igual: a mesma primitiva de ocupação com o seu índice único parcial, o mesmo histórico de localização só de acrescento e a mesma costura de operação feita de iniciar, avançar e fechar. Os tipos de linha do rasto estão separados, para que daqui a um ano quem leia consiga ver se uma máquina deslizou dentro de uma sala ou se passou uma tarde numa carrinha. Uma linha partilhada de «movida» apagaria essa diferença para sempre.
Quinze estados, e um deles é lado nenhum
Três estados administrativos antes de acontecer algo físico (rascunho, planeada, aprovada), nove fases de trabalho real e três finais. As fases são: desligar, desmontar, transporte, chegada ao destino, montagem, nova cablagem, nova medição, verificação e o estado em que ninguém sabe.
O estado que sustenta todo o desenho é in_transit. É o único estado em curso em que a sede da máquina está genuinamente vazia, e o código escreve esse vazio em vez de o descrever: a coluna de sede fica mesmo vazia. Numa sede, vazio significa habitualmente «não apurado», e aqui significa algo mais forte e mais literal. Não há centro de dados onde ela esteja. Está na estrada.
Os seus vizinhos não são isso, e é de propósito. unracked quer dizer fora do bastidor mas ainda dentro do edifício, num carro, portanto a sede continua a ser a origem. destination_claimed quer dizer que chegou à outra ponta mas ainda não está num bastidor, e a partir daí pertence administrativamente à sede de destino. Duas fronteiras separadas por uma hora, e fundi-las tornaria errada, para uma das duas, a resposta a «onde está agora a máquina 41».
A partir do desligar não há caminho de volta
As transições estão como tabela sobre os quinze estados e não como uma bifurcação, pela mesma razão que vale em todo este código: uma bifurcação com ramo por omissão transforma um estado recém-acrescentado num estado permitido, e um estado que alguém acrescenta porque está a passar-se algo invulgar seria o primeiro a quem tudo seria permitido.
A linha que conta sai de approved. Até aí inclusive, uma mudança pode ser cancelada e não aconteceu nada a ninguém. A partir de shutting_down, o cancelamento desaparece. Alguém começou a desmontar um serviço em funcionamento de um cliente; uma atualização na base de dados não desfaz isso, e fingir o contrário é uma afirmação sobre o mundo físico que ninguém verificou.
O que sobra a partir de cada fase física é a fase seguinte, o «não sabemos» e o «correu mal». Qualquer fase física pode chegar ao não saber, e isso é diferente da deslocação dentro de uma sede, onde só se chega lá a partir de um estado. A razão é o alcance: dentro de uma sede há um instante em que ninguém tem a certeza, numa mudança entre sedes há seis. Ainda está no bastidor antigo. Está no carro. Está na carrinha. Está no chão novo. Está no bastidor. Está ligada.
Quatro coisas que repara e nunca conserta
Uma mudança escreve exatamente duas coisas: a sede e a localização da máquina, e a reserva de bastidor. Nenhum endereço, nenhuma pertença de agente, nenhuma VLAN, nenhum tecido, nenhuma aresta de topologia.
Essa contenção é o verdadeiro requisito, e é justamente aí que a resposta errada parece óbvia. A máquina foi para a outra sede, portanto de certeza que o seu prefixo de endereços deveria acompanhá-la. Não deve. Um endereço de um prefixo encaminhado na sede de origem não funciona na de destino, e que endereço deveria estar lá em vez dele é algo que a plataforma não sabe. Que agente serve a sala nova é uma decisão de uma pessoa. Só a prova confirmada pode transformar topologia em verdade.
Cada uma dessas coisas passa por isso a ser uma verificação em aberto: medida, registada e mostrada, nunca executada.
| Verificação | De onde vem a resposta |
|---|---|
| Reatribuição de endereços | Ligações de serviço a servidores, a atribuições, ao prefixo e à sua sede |
| Pertença de agente | Existe sequer um agente que cubra a sede de destino |
| Nova entrada em serviço | Sempre aberta: equipamento que muda de edifício invalida a aptidão, e hoje nada produz esse veredicto |
| Nova cablagem | Sempre aberta: não há registo de cabos por unidade contra o qual medir |
As duas últimas são honestas quanto à sua abertura permanente em vez de ficarem caladas em «conforme». Dizer que algo está conforme é uma afirmação, e ninguém a fez.
Essa contenção é vigiada pela forma e não pela disciplina. Um teste percorre a árvore sintática dos seis ficheiros deste fluxo e falha perante qualquer inserção ou atualização numa tabela de endereços, agentes, rede, tecido, serviço ou servidores. Foi primeiro provado vermelho com uma escrita plantada. Um segundo teste, mais antigo, faz outra pergunta, a de saber se um valor de sede veio de um cálculo, e aprovaria de bom grado uma mudança que passe corretamente uma sede de destino. Duas perguntas, dois testes, e só juntos cobrem a regra.
Três saídas do não saber
Quando o resultado físico é incerto, alguém tem de ir ver. As três respostas ficam registadas como observação e não como reversão.
Vista no destino. A mudança fecha, e o rasto leva «observada no destino» em vez de «concluída», para que continue legível que houve dúvida.
Vista na origem. A reserva na outra ponta é libertada e a mudança termina como falhada e não como cancelada, porque alguém fez trabalho físico e a deslocação não se concretizou. A localização antiga não é reaberta, e isso é deliberado. Se a máquina já estava fora do bastidor, aquelas unidades ficaram livres e pode entretanto estar lá outra coisa; reclamá-las de novo poderia pôr duas máquinas numa unidade, exatamente a falha para a qual existe o índice único parcial. A máquina pertence à sede de origem e não está em bastidor nenhum, e essa é a verdade: está num carro. Voltar a colocá-la é uma localização nova e portanto um ato próprio.
Não encontrada em lado nenhum. A reserva no destino é libertada, porque guardar espaço de bastidor para equipamento que não vai chegar bloqueia outra pessoa para nada. A máquina fica em transporte sem sede, e a operação termina falhada com um bloqueio próprio. Não é de todo abatida nem posta em quarentena. Essas são decisões sobre a máquina, e «perdida» é uma observação. Equipamento que apareça na semana seguinte não devia entretanto ter desaparecido de todas as listas.
A ordem da verificação prévia, e uma coisa sobre sedes
O planeamento recusa por uma ordem fixa: o equipamento existe, não há nem uma deslocação nem uma segunda mudança em curso (duas tabelas com dois índices parciais que nada sabem um do outro), está realmente colocado nalgum sítio, as duas sedes são diferentes, a sede de destino está ativa, nenhum serviço está no caminho, e o espaço cabe.
Só o destino tem de estar ativo. Uma origem em desativação não é um obstáculo, é precisamente a razão pela qual se muda equipamento. Inverter isso bloquearia justamente a migração para a qual a funcionalidade existe.
A verificação de serviço recusa também em reserved e provisioning, e não apenas em ativo, o que primeiro nos surpreendeu e depois deixou de surpreender. Uma máquina com uma reserva em cima está comprometida; o que ali se cancela é a encomenda e não a viagem da máquina.
O que registaríamos
- Uma forma diferente merece um objeto diferente. Se o caso novo tem mais seis estados, mais uma saída e um período de não estar em lado nenhum, um indicador no antigo produz uma máquina que não descreve nenhum dos dois casos.
- Escreva «lado nenhum» à letra. Um valor vazio que significa «numa carrinha» é mais útil do que um estado que finge que a máquina ainda está algures.
- Depois de trabalho físico reportado, nunca reverta. Acrescente um estado que signifique «desconhecido» e dê-lhe saídas documentadas, todas elas observações.
- Não reabra um lugar libertado. O espaço que largou pode estar ocupado. Voltar é uma localização nova, com a mesma verificação de colisão que qualquer outra.
- Reparar sem consertar. Uma verificação em aberto que uma pessoa resolve vale mais do que um palpite automático sobre endereços, VLAN e cablagem.
- Vigie a contenção com um teste sobre a forma. «Este fluxo nunca escreve naquelas tabelas» é verificável; «vamos lembrar-nos de não o fazer» não é.
- Verifique o sentido da sua regra de sede. Exigir que a origem esteja saudável proibiria justamente a mudança de que toda a gente precisa.
Para ser claro sobre o que isto é: o trabalho de logística de centro de dados está atrás de um interruptor de lançamento desligado por omissão, com uma definição por organização por cima, portanto nada disto está hoje à venda. Quatro coisas não estão demonstradas. A migração foi aplicada à mão na base de dados de desenvolvimento e revertida, nunca através do migrador. A folha de reconciliação e o botão de cancelar não foram conduzidos num navegador. Não foi medido um pedido cru contra as ações com o interruptor fechado. E nunca se observou uma reserva de destino a expirar de verdade.
Do trabalho de plataforma da Provibr. A versão dentro de uma só sede, e porque é que uma reserva se torna a localização em vez de ser libertada e reescrita, está em a reserva torna-se a localização. Porque é que unidades livres num bastidor não são o mesmo que capacidade está em o espaço em bastidor não é capacidade.