Compartilhamento de tecnologia

Nuvem de primavera

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. O que são microsserviços?

1. Conceitos básicos

Microsserviços são umestilo arquitetônico(Diferente da arquitetura monolítica, arquitetura vertical, arquitetura distribuída e arquitetura SOA), os aplicativos são divididos em serviços menores orientados por processos.

2. Características dos microsserviços

  1. Leve: divida sistemas ou serviços complexos verticalmente e cada microsserviço se concentra na solução de problemas especiais.
  2. Baixo acoplamento: Cada serviço dividido é independente um do outro em termos de código, recursos e ambiente, e pode ser desenvolvido, testado, implantado e mantido de forma independente, o que é benéfico para a estabilidade do sistema (o impacto é reduzido quando os problemas ocorrer) e a avaliação de recursos de expansão (expansão de recursos) é mais conveniente e menos arriscada).
  3. Plataforma cruzada: Diferentes microsserviços podem usar diferentes linguagens de desenvolvimento e rodar em diferentes ambientes.

2. O que é SpringCloud?

1. Conceitos básicos:

Primavera Nuvem é umEstrutura de microsserviços , que fornece uma variedade de soluções de sistemas distribuídos. Fornece recursos como desenvolvimento e implantação de microsserviços, registro e descoberta de serviços, governança de serviços e operação e manutenção de serviços por meio de componentes.

2. Componentes comumente usados:

1)Netflix na nuvem de primavera:

Eureka: centro de registro

Faixa de opções: balanceamento de carga

Fingir: chamada remota

Hystrix: disjuntor de serviço

Zuul/Gateway:Gateway

2)Spring Cloud Config: ferramenta de gerenciamento de configuração centralizada, armazenamento externo de configuração de aplicativo, pode ser usada para aplicativos Spring ou não Spring.

3)Spring Cloud Bus: barramento de eventos e mensagens, usado para propagar mudanças de estado ou eventos de mudança de configuração no cluster.

4)Spring Cloud Consul: ferramenta de descoberta e configuração de serviços, perfeitamente integrada com contêineres Docker.

5)Spring Cloud Security: um kit de ferramentas de segurança que fornece suporte para segurança e autenticação de aplicativos.

6)Spring Cloud Sleuth: rastreamento de cadeia de chamadas distribuído, compatível com rastreamento Zipkin, HTrace e ELK.

7)Spring Cloud Cluster: eleição de líder, implementada por meio de abstração de Zookeeper, Redis e Consul.

8)Spring Cloud Data Flow: orquestração de microsserviços, fácil de usar por meio de interface de arrastar e soltar ou API REST.

9)Spring Cloud Stream: uma estrutura leve de microsserviço orientada a eventos para criar rapidamente aplicativos que se conectam a sistemas externos.

10)Spring Cloud Task: uma estrutura de microsserviço de curto prazo para construir rapidamente aplicativos que concluem tarefas de processamento de dados em lote.

3. Etapas para usar componentes SpringCloud

tutorial springcloud - 3. Mecanismo de disjuntor de microsserviço, explicação detalhada do uso do disjuntor hystrix_Como configurar o disjuntor java-CSDN Blog

tutorial de springcloud--4. Explicação detalhada do uso do gateway zuul_zuul tutorial de uso-blog CSDN.

1. Hystrix (fusível, downgrade, limitação de corrente)

1) O que isso faz?

existirem sistemas distribuídos , se um nó de serviço falhar ou ocorrer uma anormalidade na rede, o chamador poderá ser bloqueado e aguardar. Se o tempo limite for definido como um longo período, os recursos do chamador poderão estar esgotados.Isto, por sua vez, leva ao esgotamento de recursos no sistema upstream do chamador, resultando em última análise emavalanche de sistema . Os disjuntores podem prevenir eficazmente avalanches de serviço.

Se você encontrar um aumento repentino no tráfego, a abordagem geral éFunções comerciais não essenciaisSão adoptadas medidas de degradação do serviço para proteger o serviço normal das funções empresariais essenciais, enquanto para os serviços funcionais essenciais, é necessário adoptar as actuais medidas limitantes.

2) Isso acontece no lado do cliente ou no lado do servidor?

Disjuntor de serviço:geralmente Ocorre no lado do servidor (o objetivo é permitir que o chamador falhe rapidamente. Quando um serviço expira ou se torna anormal, ele causa um fusível, semelhante a um fusível na vida real). (Às vezes também pode ser configurado no cliente para falhar rapidamente quando uma exceção for encontrada ao chamar um determinado serviço);
Degradação do serviço: geralmente ocorre no lado do cliente Considerando a carga geral de solicitações do site, quando um serviço é desconectado ou desligado, o serviço não será mais chamado (às vezes também pode ser configurado no lado do servidor, quando o sistema tiver; tráfego repentino, as funções principais serão rebaixadas para proteger as funções principais);

Limitação de corrente: geralmente ocorre no lado do servidor;

3) Como usar

  • Colapso:

@EnableCircuitBreaker: habilitado na aplicaçãofusível

@HistrixCommand(fallbackMethod="xxxFallback",commandProperties = {
}): A anotação de fusão é adicionada à anotação de downgrade. Preencha as condições de fusão em commandProperties = {}.HystrixPropertiesManager - Guia de instalaçãoVerificar.

  1. @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
  2. //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
  3. // 条件一: 请求数量达到3个
  4. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
  5. // 条件二: 每20秒一个判断单位
  6. @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
  7. // 条件三: 失败率30%
  8. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
  9. // 结果: 熔断后, 30秒内不再请求远程服务
  10. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
  11. })
  • Rebaixar:

Crie uma nova classe xxxFallbackFactory para implementar FallbackFactory e substituir o método create. O método de downgrade é definido em create.

@FeignCliend(fallbackFactory=xxxFallbackFactory.class): Histrix está integrado ao Feign

Ou especifique o método substituto diretamente no método: @HistrixCommand(fallbackMethod="xxxFallback")

  • Limitando:

        1、Estratégia de limitação atual:

1), limite de corrente do semáforo

O semáforo é usado para controlar o número de threads simultâneos. Especifique o número de licenças virtuais internas por meio do construtor.

Se a tecnologia de isolamento de semáforo for usada, cada vez que uma solicitação for recebida, o próprio thread do serviço chama diretamente o serviço dependente. O semáforo é equivalente a um ponto de verificação. Depois que cada thread passa pelo ponto de verificação, o número de semáforos é reduzido em 1. é 0, não é mais O thread pode passar, mas a lógica de fallback é executada e retornada diretamente, para ser franco, é apenas um limite atual.

Um semáforo pode ser entendido como umcontador, o contador conta o número de solicitações que estão sendo processadas no momento. Quando o valor do contador atingir o valor definido, as solicitações subsequentes não serão aceitas (ou sofrerão downgrade) e você precisará aguardar até que o valor do contador seja menor que o valor definido antes que as solicitações subsequentes possam. ser processado.

  1. @HystrixCommand(
  2. commandProperties= {
  3. @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
  4. @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
  5. },
  6. fallbackMethod = "errMethod"
  7. )

2), limite de corrente do pool de threads

  1. @HystrixCommand(
  2. commandProperties = {
  3. @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
  4. },
  5. threadPoolKey = "createOrderThreadPool",
  6. threadPoolProperties = {
  7. @HystrixProperty(name = "coreSize", value = "20"),
  8. @HystrixProperty(name = "maxQueueSize", value = "100"),
  9. @HystrixProperty(name = "maximumSize", value = "30"),
  10. @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
  11. },
  12. fallbackMethod = "errMethod"
  13. )

Observe aqui: emjavaNo pool de threads, se o número de threads excedercoreSize, as solicitações de criação de thread entrarão na fila primeiro. Se a fila estiver cheia, os threads continuarão a ser criados até que o número de threads atinja.maximumSize e, em seguida, adote a estratégia de rejeição.Mas há um parâmetro adicional no pool de threads configurado pelo hystrixqueueSizeRejectionThreshold,sequeueSizeRejectionThreshold < maxQueueSize, o número de filas atingequeueSizeRejectionThresholdadotará a estratégia de rejeição, entãomaximumSize fracassado.sequeueSizeRejectionThreshold > maxQueueSize, o número de filas atingemaxQueueSizehora,maximumSizefor válido, o sistema continuará a criar threads até que o número atinjamaximumSize

      2. A diferença entre a limitação de corrente do semáforo e a limitação de corrente do pool de threads:

1) Nível de desempenho: O semáforo utiliza o thread original e possui baixo consumo de desempenho;

2) Nível de estabilidade do sistema: os pools de threads são isolados e os problemas por si só não afetarão outros pools de threads;

3) Síncrono e assíncrono: Como o semáforo é o thread original usado, ele é síncrono e bloqueador.

        3. Cenários atuais de utilização da estratégia limitante:

Quando o número de solicitações é muito intenso e a sobrecarga do isolamento do thread é relativamente alta, recomenda-se o uso de semáforos para reduzir a carga. Esta situação geralmente é usada para lidar com solicitações fora da rede (sem chamar serviços externos). Recomenda-se usar o método do pool de threads em outros cenários.

4) Qual é a diferença entre os três?

A limitação de corrente é apenas uma limitação de corrente. Contanto que o limite de tráfego não seja excedido, o serviço ainda estará disponível (diferente do disjuntor) e não precisará ser rebaixado (a exceção de limite de tráfego excedido também pode ser lançada para o chamador tratar). sozinho). Então, vamos apenas falar sobre a diferença entre disjuntor e downgrade:

  • conceitos diferentes

Disjuntor significa que o serviço como um todo está indisponível (com foco na autoproteção), downgrade significa escolher a próxima melhor opção (com foco na proteção dos resultados financeiros) e a limitação de corrente refere-se à quantidade de tráfego que não pode ser excedida.

  • Diferentes mecanismos de disparo

Por padrão, se o hystrix detectar que a taxa de falha da solicitação excede 50% em 10 segundos, ele acionará o mecanismo do disjuntor. Depois disso, a solicitação ao microsserviço é repetida a cada 5 segundos. Se o microsserviço não puder responder, o mecanismo do disjuntor continua. Se o microsserviço estiver acessível, o mecanismo do disjuntor será desligado e as solicitações normais serão restauradas.

Por padrão, o hystrix acionará o mecanismo de downgrade sob as 4 condições a seguir:

  1. Método lança HystrixBadRequestException
  2. Tempo limite de chamada de método
  3. Ligue o disjuntor para interceptar a chamada
  4. O conjunto de threads, fila ou semáforo está cheio
  • Diferentes relações de propriedade

O mecanismo de downgrade pode ser chamado durante o disjuntor, mas o mecanismo do disjuntor geralmente não é chamado durante o downgrade.Porque o disjuntor começa na perspectiva geral e desativa os serviços para garantir a estabilidade do sistema, enquanto o downgrade é a segunda melhor opção e fornece uma solução garantida, portanto suas relações de propriedade são diferentes (disjuntor &gt; downgrade).

2. Modelo Fingir e Descansar

Resumo do conteúdo do link:

  1. Adicione dependência inicial;
  2. Adicione anotação: @EnableFeignClients;
  3. Crie a interface Feign:

@FeignClient(nome="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)

tutorial do springcloud - 1. Crie rapidamente uma demonstração básica, basta ler este artigo_Ye Juyan-GitCode comunidade de código abertoSem mais delongas, siga-me e comece sua primeira experiência no Spring Cloud. Primeiro, revise os componentes básicos dos microsserviços: [Foto aqui] Produtor: Fornece serviço Consumidor: Consome serviço Centro de registro/descoberta de serviço: Registro de serviço, descoberta, monitoramento Então, primeiro. entenda a base arquitetônica dos microsserviços springcloud: produtor (cliente), consumidor (cliente), centro de registro/descoberta de serviço (servidor) Comunidade de código aberto Ye Juyan GitCodeícone-default.png?t=N7T8Português: https://gitcode.csdn.net/65e840841a836825ed78b9d0.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MzI1MTQ3NiwiZXhwIjoxNzIxMTM0MjcwLCJpYXQiOjE3MjA1Mjk0NzAsInVzZXJuYW1lIjoicXFfMTk5NTIwMjkifQ.7co5oRDfDrxtdqIsV-9AjJacdbURh-cikj5Rtxt7Z1c

3. Uso de Zuul

referir-se:

Implementação prática da arquitetura do projeto SpringBoot "Gateway zuul Construction" - CSDN Blog

4. Utilização do centro de registo Eureka

referir-se:

Arquitetura do projeto SpringBoot combate real "construção do projeto pai e construção do centro de registro"_java construção springboot projeto pai startup-CSDN blog

4. Como funciona o SpringCloud

1. Princípio de funcionamento do Eureka:

  1. Registro do serviço: Ao iniciar o provedor de serviços, ele enviará uma solicitação de registro ao servidor Eureka, incluindo o endereço IP do serviço, número da porta, nome do serviço e outras informações. Após receber a solicitação de registro, o servidor Eureka salvará as informações do serviço na memória e fornecerá a função de consulta de informações de registro de serviços externos.

  2. Descoberta de serviço: quando um consumidor de serviço precisar chamar outros serviços, ele enviará uma solicitação de descoberta de serviço ao servidor Eureka para obter uma lista de instâncias dos serviços necessários. Após receber a solicitação, o servidor Eureka retornará uma lista de instâncias do serviço correspondente, incluindo o endereço IP, número da porta e outras informações do serviço. O consumidor de serviço seleciona uma das instâncias de serviço para chamar (balanceamento de carga) com base na lista de instâncias retornadas.

  3. Verificação de integridade de pulsação: O provedor de serviços enviará regularmente pacotes de pulsação ao servidor Eureka para provar que seu serviço está em operação normal. Se o servidor Eureka não receber um pacote de pulsação de uma instância de serviço dentro de um período de tempo, ele considerará a instância de serviço inativa e a removerá da lista de serviços.

5. Código-fonte subjacente do SpringCloud

1. Código-fonte do gateway Zuul

Implementação prática da arquitetura do projeto SpringBoot "Gateway zuul Construction" - CSDN Blog O artigo foi visto e lido 227 vezes. Capítulo 3 Gateway Zuul Construção Prefácio: 1. Funções principais O Zuul fornece principalmente roteamento dinâmico (implementação de fita integrada) e filtragem (pode ser usado como filtro de autenticação unificado, filtro de publicação em escala de cinza, filtro IP de lista negra e branca, filtro de limitação de corrente de serviço) (Pode ser implementado com Sentinel)) função 2. A diferença do Spring Cloud GateWay é que ele é uma solução de gateway fornecida por duas organizações de código aberto diferentes. Spring Cloud GateWay usa API sem bloqueio, filtro limitador de corrente integrado, suporta conexões longas (como websockets) e é melhor que Zuul em cenários de alta simultaneidade e resposta lenta do serviço de back-end...https://blog.csdn.net/qq_19952029/article/details/124285479

2. Código-fonte Eureka do centro de registro

3. Código-fonte Histrix do disjuntor

4. Centro de configuração Código-fonte de configuração

5. Balanceamento de carga do código-fonte da fita

6. Microsserviço chama código-fonte Feign

6. Como SpringCloud implementa transações distribuídas

Prática do modo Seata TCC (Parte 2) -Alibaba Cloud Developer CommunityCombate real no modo Seata TCC (Parte 2)ícone-default.png?t=N7T8https://developer.aliyun.com/article/1053737?spm=5176.26934562.main.1.799c6a03T45SJ9A postagem do blog acima não resolve o problema da suspensão, que pode ser avaliado por diferentes indicadores de status.

https://www.cnblogs.com/lilpig/p/16613226.htmlícone-default.png?t=N7T8https://www.cnblogs.com/lilpig/p/16613226.html

1. Função do modo TCC

TM: Gerenciador de transações, gerado com a anotação @GlobalTransaction.

TC: Coordenador

RM:Participante

Todo o processo é:

A TM faz proxy de suas transações globais e registra-se na TC antes de iniciar a execução
O TM começa a executar cada transação de filial na transação global e o RM registra e relata as transações de filial e o status de execução ao TC
Após a conclusão da execução da transação da filial, o TM inicia uma solicitação ao TC para confirmar ou reverter a transação global.

2. O significado da reserva, envio e reversão de recursos TCC.

Reserva significa bloquear e atualizar o recurso do banco de dados para um estado intermediário e, em seguida, alterá-lo para o estado efetivo quando o commit do segundo estágio for executado após a confirmação.Portanto, a fase de reserva e a fase de reversão de commitTodos envolvem bancos de dados operacionais, portanto, também pode haver falhas de confirmação e reversão que exigem processamento manual, que podem ser resolvidas registrando logs, compensando novas tentativas, etc.

3. Vantagens e desvantagens do TCC

Vantagens do modo TCC

  1. Envio direto em um estágio, sem bloqueios de banco de dados, sem outros bloqueios, bom desempenho
  2. A lógica de reserva e recuperação é escrita por você mesmo e não depende do banco de dados. Pode ser usada em bancos de dados não transacionais.

Desvantagens do modo TCC

  1. A codificação é complexa
  2. Fracamente consistente
  3. porqueConfirmeCancelTambém pode falhar e você precisa lidar com esse processo
  4. Algumas empresas não são adequadas para o modelo TCC. Por exemplo, fazer um pedido é um processo de adição de uma nova linha.

4. Modo XA

Forte consistência, coordenando quando as transações locais de cada participante são confirmadas e revertidas.

Vantagens do modo XA

  1. Fácil de implementar, porque a maioria dos bancos de dados já suporta transações XA, o Seata só precisa fazer um empacotamento simples
  2. consistência forte

Desvantagens do modo XA

  1. Cada transação precisa aguardar a conclusão de todo o processamento da transação, ocupando bloqueios de banco de dados, resultando em baixo desempenho e baixa disponibilidade.
  2. Não pode ser usado se o banco de dados não suportar transações XA

5. Modo AT

consistência fraca