o que é "degradação graciosa"?


11

Eu ouço muito sobre esse termo "Degradação graciosa".

Por exemplo ,

 "An application server should gracefully degrage when it is under heavy load "

  "Graceful degradation of user interfaces.... "

O termo parece algo abstrato para mim. Algum exemplo concreto do que isso significa?


5
Um bom artigo sobre o assunto codinghorror.com/blog/2011/04/…
JF Dion

Respostas:


10

aqui estão alguns exemplos:

  • Se você ficar sem algum recurso (alças, soquetes, memória, espaço em disco), você não trava, mas continua servindo o maior número de usuários possível com os recursos disponíveis. Algo que não se degrada normalmente pode simplesmente parar de funcionar quando retirado do envelope do design.
  • Sob cargas mais pesadas do que o que você projetou para os usuários, a resposta será mais lenta do que o que você projetou. Sem degradação graciosa, deixar o sistema parar de funcionar quando os requisitos forem excedidos pode ser aceitável.
  • Condições de erro, como falha na unidade de disco, falha no núcleo da CPU, falha na memória. Um sistema projetado para degradar normalmente pode continuar trabalhando em um modo reduzido (por exemplo, sem poder acessar dados na unidade com falha, mas ainda assim fornecer dados da unidade que não falhou) enquanto outro simplesmente trava.

5

Aplicativos que têm um modo "degradado" geralmente oferecem acesso a um conjunto limitado de recursos devido a um problema interno ou externo. Por exemplo, imagine que seu aplicativo se conecte a duas fontes de dados diferentes. Se uma delas falhar, ainda será possível continuar em execução, mas desativar todos os recursos visuais (ou de back-end) relacionados ao recurso indisponível.

Exemplo concreto: seu aplicativo possui duas fontes de dados, em uma delas você armazena pessoas, na outra você armazena contas. Mesmo se o banco de dados da conta falhar, se o aplicativo tiver um modo degradado, você ainda poderá criar novas pessoas, embora não interaja com suas contas.

Quanto à interface do usuário, isso geralmente significa que você indica claramente ao usuário que alguns recursos estão desabilitados e exibe uma mensagem de aviso para que ele não seja deixado de fora no escuro por que algo está indisponível.

Além disso, há uma entrada da Wikipedia relacionada a sistemas tolerantes a falhas .


2

Com o avanço da tecnologia, sempre temos mudanças rolando em um aplicativo que, a qualquer momento, pode não ser suportado por todos os públicos-alvo. Nesses cenários, encontramos a degradação graciosa, que simula o que criamos para o melhor disponível, mas também temos um sistema de segurança para aqueles que não fizeram upgrade ou que seu sistema pode não suportar.

Um exemplo importante é a <img>tag que tem o altatributo que é útil nos casos em que as imagens são bloqueadas ou desativadas, agora elas fornecem um contexto significativo para as imagens (é claro, apenas se especificarmos).

Bem, outro exemplo em que consigo pensar são as folhas de estilo, em caso de erro ou indisponibilidade, o navegador fornece uma versão genérica própria para mostrar / exibir a página.

Agora, como você mencionou a carga pesada, é necessário definir cuidadosamente um plano, como o que deve ser feito se seus hits ultrapassarem o limite, você desativa certos recursos ou suspende alguns serviços que não são críticos e oferecem uma pausa. Tudo isso ajudará você a configurar uma degradação normal para que o usuário saiba devido às coisas x que o servidor pode levar algum tempo para responder ou o serviço x ficará indisponível por uma hora ou mais


1

Isso significa que, conforme as entradas e o estado excedem os limites do projeto, as saídas permanecem o mais razoável e confiável possível.

Se for um servidor projetado para lidar com 100 conexões simultâneas, ele não trava ou começa a retornar resultados malucos em 101 ou 150 conexões - ele diminui a velocidade ou talvez reduza algumas conexões, mas continua trabalhando principalmente. Se é um banco de dados projetado para lidar com 1 bilhão de registros, não diminui repentinamente para um estado inutilizável em 1,01 bilhão.


1

Se você não possui um sistema gráfico (como nenhum servidor X11 em execução), seu programa deve pelo menos fornecer uma CLI, como ncurses.

O vi possui um modo burro no qual se comporta como ex, se o terminal tiver poucos recursos.


1

Ao criar aplicativos da Web, a degradação graciosa entra em ação quando o site depende de JavaScript ou Flash ou de técnicas semelhantes que o usuário não possui ou desabilitou.

Você ainda deve fornecer algumas funcionalidades básicas apenas com HTML ou pelo menos uma mensagem de por que o site não está funcionando conforme o esperado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.