Resiliência (resiliency) é um conceito importante no desenvolvimento de aplicativos de alta disponibilidade.

Definição na Wikipedia:

“A resiliência é um conceito psicológico emprestado da física, definido como a capacidade de o indivíduo lidar com problemas, superar obstáculos ou resistir à pressão de situações adversas – choque, estresse etc. – sem entrar em surto psicológico.”

Definição básica no dicionário:

(Física) propriedade do material de retornar à forma ou posição original uma vez cessada a pressão sobre o mesmo.
(Figurado) habilidade que uma pessoa desenvolve para resistir, lidar e reagir de modo positivo em situações adversas.

No caso do desenvolvimento de software, a resiliência é tratada como a capacidade de superar problemas eventuais sem prejudicar a sua funcionalidade e experiência do usuário. Este assunto geralmente está associado a outros conceitos como tolerância a falhas e redundância.

Por exemplo, a API de acesso ao Azure Storage tenta aumentar a resiliência de quem utiliza o serviço incluindo um mecanismo de retentativa de acesso caso ocorra erros conhecidos como timeout. Neste caso, uma nova tentativa é feita a outro servidor do farm (redundância), o qual muito provavelmente conseguirá processar a requisição com sucesso. Ou seja, apesar de ter ocorrido uma falha eventual (um servidor falhou), não causou um erro efetivo no fluxo de execução da aplicação (outro servidor atendeu com sucesso) e gera a impressão ao usuário de que tudo ocorreu sem qualquer problema.

Um caso interessante é o do Chaos Monkey da Netflix. Eles criaram um “macaquinho” que derruba servidores aleatoriamente da sua infraestrutura de produção para ter certeza que a solução pode sobreviver a falhas deste tipo sem impacto para seus usuários, ou seja, uma solução com boa resiliência.

Até mais.

Rafael Leonhardt

Referências:
Resiliência (psicologia) na Wikipedia
Resiliency at Netflix
Building Elastic and Resilient Cloud Applications
Fault tolerance and resilience: meanings, measures and assessment