Falando em Breaking de Springcloud Circuit me lembra o circuito quebrado no mercado de ações no ano passado. Eu percebi muitos momentos dolorosos. O impacto da quebra do circuito aleatório em todo o sistema é desastroso. Bem, vamos falar sobre os assuntos sérios a seguir.
Fusível
Efeito Avalanche
Nas arquiteturas de microsserviços, geralmente existem várias camadas de serviço para ligar. A falha do serviço subjacente pode levar a falhas em cascata, o que, por sua vez, faz com que todo o sistema esteja indisponível. Esse fenômeno é chamado de efeito de avalanche de serviço. O efeito Avalanche de serviço é um processo no qual a indisponibilidade do "provedor de serviços" leva à indisponibilidade dos "consumidores de serviço" e amplia gradualmente a indisponibilidade.
Se a figura abaixo mostrar: A é o provedor de serviços, B é o consumidor de serviço de A e C e D são os consumidores de serviço de B. A indisponibilidade de uma indisponibilidade de B e quando a indisponibilidade é ampliada para C e D como uma bola de neve, o efeito de avalanche é formado.
Circuitbreaker
O princípio de um fusível é muito simples, como um protetor de sobrecarga de energia. Pode obter uma falha rápida. Se detectar muitos erros semelhantes por um período de tempo, forçará suas chamadas subsequentes a falhar rapidamente e não acessará mais o servidor remoto, impedindo que o aplicativo tente constantemente executar operações de falha possíveis, fazendo com que o aplicativo continue a executar sem esperar pela correção do erro ou desperdiçar o tempo da CPU até um longo período de tempo. O fusível também pode permitir o aplicativo para diagnosticar se o erro foi corrigido e, se foi corrigido, o aplicativo tentará chamar a operação novamente.
O modo de fusível é como um proxy que pode facilmente levar a operações erradas. Esse proxy pode registrar o número de erros que ocorreram na chamada mais recente e depois decidir usar a operação de permitir continuar ou retornar o erro imediatamente.
A lógica da conversão mútua de interruptores de fusíveis é a seguinte:
Os fusíveis são a última linha de defesa para proteger a alta disponibilidade de serviços.
Recursos Hystrix
1. Mecanismo do disjuntor
O disjuntor é fácil de entender. Quando o comando hystrix solicita falhas de serviço de back-end exceder uma certa proporção (padrão 50%), o disjuntor mudará para o estado aberto (aberto). No momento, todas as solicitações falharão diretamente sem enviar para o serviço de back-end. Depois que o disjuntor permanecer no estado aberto por um período de tempo (padrão de 5 segundos), ele mudará automaticamente para o estado meio aberto (meio aberto). Neste momento, o status de retorno do próximo pedido será julgado. Se a solicitação for bem -sucedida, o disjuntor voltará para o estado de circuito fechado (fechado), caso contrário, ele mudará para o estado aberto (aberto). O disjuntor da Hystrix é como um fusível em nosso circuito doméstico. Depois que o serviço de back-end não estiver disponível, o disjuntor interromperá diretamente o link de solicitação para evitar o envio de um grande número de solicitações inválidas para afetar a taxa de transferência do sistema. O disjuntor tem a capacidade de se auto-detectar e recuperar.
2.Fallback
O fallback é equivalente a uma operação de rebaixamento. Para operações de consulta, podemos implementar um método de fallback. Quando ocorre uma exceção em um serviço de volta solicitado, o valor retornado pelo método de fallback pode ser usado. O valor de retorno do método de fallback é geralmente definido pelo valor padrão ou vem do cache.
3. Isolamento de recursos
Em Hystrix, o isolamento de recursos é alcançado principalmente através de pools de threads. Normalmente, ao usá -lo, dividimos vários pools de threads de acordo com o serviço remoto que chamamos. Por exemplo, o comando que chama serviços de produto é colocado em um pool de threads e o comando que chama os serviços de conta é colocado no pool de threads B. A principal vantagem disso é que o ambiente em execução é isolado. Dessa forma, mesmo que o código que chama de serviço seja cortado ou o pool de threads que é consumido devido a outros motivos, ele não afetará outros serviços do sistema. No entanto, o custo é que a manutenção de vários pools de threads trará uma sobrecarga de desempenho adicional para o sistema. Se você tiver requisitos de desempenho estritos e tiver certeza de que não haverá problemas com o código do cliente que chama o serviço, você poderá usar o modo de sinal da Hystrix (semáforos) para isolar os recursos.
Feign Hystrix
Como o disjuntor funciona apenas no final da chamada de serviço, precisamos alterar apenas o código relevante do projeto do consumidor da nuvem primavera com base no código de exemplo no artigo anterior. Como o Feign já depende do Hystrix, não há necessidade de fazer alterações na configuração do MAVEN.
1. Arquivo de configuração
Adicione isso ao Application.Properties:
Feign.hystrix.enabled = true
2. Crie uma aula de retorno de chamada
Crie HeloremoteHystrix Classe Heretance e Heloremote para implementar retornos de chamada
@ComPonenPublic Classe HeloremoteHystrix implementa Helloremote {@Override public String hello (@RequestParam (value = "name") Nome da string) {return "Hello +Name +", esta mensagem envia falha "; }}3. Adicione o atributo de fallback
Adicione a classe de fallback especificada à classe Helloremote e retorne o conteúdo da classe Fallback quando o serviço estiver circuitado.
@FeignClient (Name = "Spring-Cloud-produtor", Fallback = Helloremotehystrix.class) interface pública heloremote {@RequestMapping (value = "/helloEste é o ponto de mudança, é muito simples.
4. Teste
Então vamos testá -lo para ver o efeito.
Inicie os três projetos Spring-Cloud-Eureka, Produce da nuvem de primavera e consumidor da nuvem de primavera.
Entre no navegador: http: // localhost: 9001/hello/neo
Retorno: Olá Neo, esta é a primeira mensagem
Isso significa que, depois de adicionar informações relacionadas ao disjuntor, isso não afetará o acesso normal. Em seguida, interrompemos manualmente o projeto do produtor de nuvem de primavera e o testamos novamente:
Entre no navegador: http: // localhost: 9001/hello/neo
Retorno: Olá Neo, esta mensagem Enviar falhou
De acordo com o resultado do retorno, o disjuntor foi indicado com sucesso.
Código de amostra
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.