O nome USS Yorktown batiza diversos Porta-Aviões icônicos da Marinha Americana.

Em diferentes versões, esses navios participaram de algumas das batalhas aeronáuticas mais importantes da história (Mar de Coral e Midway), resgataram os astronautas do Apollo 8 e até estrelaram um filme histórico ganhador do Oscar.

Porém, um de seus exemplares, o CG-48, realizou um feito que o tornou único: quase sair de ação por causa de uma conta matemática.

Introdução

Em 21 de Setembro de 1997 executava um treinamento na costa de Cape Charles quando um membro da equipe notou que uma das válvulas de combustível estava fisicamente fechada e constava como aberta no Smart Ship’s Standard Machinery Control System (Sistema que realizava o  Monitoramento dos equipamentos do Navio).

USS YorkTown

Imagem de um grande porta-aviões no meio do mar

Na tentativa de resolver o problema, o funcionário acessou o banco de dados do sistema e inseriu o valor zero na propriedade responsável pela válvula. Esta alteração gerou uma falha geral em todos os sistemas informatizados do navio e deixou o YorkTown a deriva no mar por 2 horas e 45 minutos, tendo que ser rebocado até o cais por outro navio.

O que aconteceu?

Em outubro de 1995, o US Naval Research Advisory Committee publicou um artigo sugerindo que os obstáculos para reduzir as tripulações em navios e porta-aviões eram mais culturais do que tecnológicos.

Seguindo essa lógica, em dezembro do mesmo ano, a Marinha Americana iniciou um movimento de modernização tecnológica chamado Smart Ship Program Office, escolhendo o USS Yorktown CG-48 como “cobaia” para receber um dos protótipos desenvolvidos pela empresa Litton.

Porta-aviões Yorktown (CV-5), que afundou em Midway.

A arquitetura do sistema Smart Ship contava com diversos computadores conectados via fibra óptica a um servidor Windows NT.

Este tipo de Arquitetura, chamada de Cliente Servidor era muito comum para época. Apesar de muito eficiente, possuía a seguinte vulnerabilidade: se o servidor principal caísse, todos os computadores caíam.

O engenheiro Anthony DiGiorgio investigou a falha e publicou um relatório em 1998. Segundo ele, o erro ocorrido em 21 de setembro de 1997 aconteceu porque o operador alterou um valor que servia como denominador em uma operação de divisão. Ao tentar dividir por zero, o banco de dados entrou em colapso e derrubou todos os sistemas conectados.

A conectividade dos componentes do Smart Ship não possuía resiliência suficiente. Como o próprio DiGiorgio afirmou em seu relatório, uma falha que uma calculadora de US$ 2,95 conseguiria contornar deixou à deriva um navio “inteligente” que custou um bilhão de dólares para ser construído.

Conclusão

O padrão de arquitetura de software chamado Circuit Breaker ajuda a evitar falhas em cascata como essa. Herdado da engenharia elétrica, esse padrão também é utilizado no mercado financeiro e, basicamente, “desarma” a conexão entre os componentes assim que detecta uma falha.

Esse mecanismo impede que um problema se propague como um efeito dominó e gere situações parecidas com a do USS Yorktown. Além disso, validar as entradas do usuário e restringir o acesso de escrita aos bancos de dados sempre se mostram medidas essenciais.

Evitar bugs é uma tarefa árdua, mas vale a pena pesquisar ferramentas que ajudam a conter os danos quando eles ocorrem.

Um abraço e obrigado pela leitura.

Referências

@bishr_tabbaa/when-smart-ships-divide-by-zer0-uss-yorktown-4e53837f75b2">https://medium.com/@bishr_tabbaa/when-smart-ships-divide-by-zer0-uss-yorktown-4e53837f75b2

https://www.usni.org/magazines/proceedings/1998/june/smart-ship-not-answer

https://learn.microsoft.com/pt-br/azure/architecture/patterns/circuit-breaker