minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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.
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.
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.
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.
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;
@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.
- @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
- //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
- // 条件一: 请求数量达到3个
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
- // 条件二: 每20秒一个判断单位
- @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
- // 条件三: 失败率30%
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
- // 结果: 熔断后, 30秒内不再请求远程服务
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
- })
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")
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.
- @HystrixCommand(
- commandProperties= {
- @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
- @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
- },
- fallbackMethod = "errMethod"
- )
2), limite de corrente do pool de threads
- @HystrixCommand(
- commandProperties = {
- @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
- },
- threadPoolKey = "createOrderThreadPool",
- threadPoolProperties = {
- @HystrixProperty(name = "coreSize", value = "20"),
- @HystrixProperty(name = "maxQueueSize", value = "100"),
- @HystrixProperty(name = "maximumSize", value = "30"),
- @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
- },
- fallbackMethod = "errMethod"
- )
Observe aqui: emjava
No 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 atingequeueSizeRejectionThreshold
adotará a estratégia de rejeição, entãomaximumSize
fracassado.sequeueSizeRejectionThreshold > maxQueueSize
, o número de filas atingemaxQueueSize
hora,maximumSize
for 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.
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:
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.
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:
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 > downgrade).
Resumo do conteúdo do link:
@FeignClient(nome="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)
referir-se:
Implementação prática da arquitetura do projeto SpringBoot "Gateway zuul Construction" - CSDN Blog
referir-se:
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.
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.
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.
Prática do modo Seata TCC (Parte 2) -Alibaba Cloud Developer CommunityCombate real no modo Seata TCC (Parte 2)https://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.htmlhttps://www.cnblogs.com/lilpig/p/16613226.html
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.
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.
Vantagens do modo TCC:
Desvantagens do modo TCC:
Confirm
eCancel
Também pode falhar e você precisa lidar com esse processoForte consistência, coordenando quando as transações locais de cada participante são confirmadas e revertidas.
Vantagens do modo XA:
Desvantagens do modo XA:
consistência fraca