Escrever aplicações que são prontas para produção exige mais do que apenas funcionar. Num contexto em que cloud computing e modelos distribuídos são regra, é importante pensar em como o sistema irá tratar eventuais falhas de rede, picos de tráfego e sobrecarga, apenas para citar alguns problemas recorrentes.
Nesse artigo, vamos entender um pouco sobre principios de arquietetura e padrões de projeto que são úteis nesse contexto, além de como implementá-los em soluções usando uma stack baseada em Node.js.
Para começarmos, vamos pensar em um cenário hipotético, porem recorrente.
Suponha que você é uma engenheira de software da maior empresa varejista do país. É a última sexta-feira de Novembro, a famosa Black Friday, e para incentivar ainda mais as compras no seu novo e-commerce, foram disponibilizados cupons de desconto válidos somente para hoje. Tendo em vista essa situação, pagamentos que dão errado, cupons inválidos, leituras e escritas em escala no banco de dados (que podem trazer lentidão) ou ainda perdas de pacotes por conta da grande quantidade de tráfego na rede são o início de uma lista de problemas que devem ser levados em conta. De forma geral, tudo que pode dar errado em seu sistema, em algum momento de sua vida útil, irá acontecer - já dizia nosso amigo Murphy e sua lei.
A questão é que não existe uma fórmula mágica para evitar dores de cabeça. É preciso ter proatividade quanto aos problemas conhecidos e por meio de diferentes técnicas de monitoramento e testes, atuar nos problemas desconhecidos, assim que eles forem descobertos - antes que se tornem monstros impossíveis de conter.