Recursos Adicionais do Nacos no Contexto do Spring Cloud

Configuração

Mecanismo de Atualização Automática de Configuração

No Spring Cloud, um escopo denominado 'refresh' é implementado para permitir a atualização dinâmica de beans de configuração. A anotação @AtualizacaoEscopo é utilizada para ativar essa funcionalidade em uma classe ou método.

import java.lang.annotation.Documentado;
import java.lang.annotation.Elemento;
import java.lang.annotation.Retener;
import java.lang.annotation.PoliticaRetencao;
import java.lang.annotation.Alvo;
import org.springframework.context.annotation.Escopo;
import org.springframework.context.annotation.ModoProxyEscopo;

@Alvo({Elemento.TYPE, Elemento.METHOD})
@Retener(PoliticaRetencao.RUNTIME)
@Escopo("atualizacao")
@Documentado
public @interface AtualizacaoEscopo {
    ModoProxyEscopo modoProxy() default ModoProxyEscopo.CLASSE_ALVO;
}

Por padrão, a configuração principal (main config) atualiza-se automaticamente, enquanto as configurações de extensão (extension-configs) e compartilhadas (shared-configs) não o fazem. Essa funcionalidade pode ser desativada para a configuração principal através da propriedade spring.cloud.nacos.config.refresh-enable=false. A atualização automática significa que, quando a configuração referenciada é alterada, a aplicação cliente obtém os valores mais recentes.

É crucial notar que, embora a atualização automática esteja habilitada por padrão, para propriedades injetadas com @Value, é necessário adicionar a anotação @AtualizacaoEscopo ao bean correspondente. Somente assim as alterações nas propriedades @Value serão refletidas em tempo de execução.

Consulta de Listener para Configurações em Uso

O Nacos fornece mecanismos para monitorar quais aplicações estão utilizando uma determinada configuração em tempo real.

Serviços

Instâncias Temporárias versus Persistentes

No registro padrão no Nacos, as instâncias são consideradas temporárias. Essas instâncias mantêm a comunicação com o servidor através de heartbeats enviados periodicamente pelo cliente. O intervalo padrão entre heartbeats é definido como cinco segundos.

public static final long INTERVALO_HEART_PADRAO = TimeUnit.SECONDS.toMillis(5);

No servidor, se um heartbeat não for recebido por quinze segundos, a instância é marcada como não saudável. Se a ausência persistir por trinta segundos, a instância é removida do registro.

public static final long TIMEOUT_HEART_PADRAO = TimeUnit.SECONDS.toMillis(15);
public static final long TIMEOUT_EXCLUSAO_IP_PADRAO = TimeUnit.SECONDS.toMillis(30);

Para instâncias persistentes, mesmo que o serviço fique offline, a instância permanece registrada. Para configurar uma instância como persistente, utilize a propriedade spring.cloud.nacos.discovery.ephemeral=false, que armazena as informações da instância em disco. Instâncias persistentes são úteis quando consumidores precisam acessar informações de instâncias que podem estar temporariamente indisponíveis.

Limiar de Proteção

É possível configurar um limiar de proteção representado por uma proporção entre zero e um. Se a razão de instâncias saudáveis em relação ao total de instâncias de um serviço cair abaixo dessa proporção, o limiar é ativado. Ao ser acionado, o Nacos fornecerá todas as instâncias, saudáveis ou não, aos consumidores. Isso evita que todo o tráfego seja direcionado para as poucas instâncias saudáveis restantes, prevenindo uma sobrecarga que poderia causar falha total. Embora algumas requisições possam acessar instâncias não saudáveis e falhar, garante que parte do tráfego ainda seja processado por instâncias saudáveis, mantendo a operação do sistema. Em algumas implementações, como o Spring Cloud Tencent, essa funcionalidade é conhecida como "all-dead-all-alive".

Configuração de Peso com NacosRule

Quando uma serviço possui múltiplas instâncias com capacidades de hardware diferentes, é possível atribuir pesos distintos para balancear a carga. No consumo de serviços via Ribbon, o peso configurado no Nacos não é aplicado por padrão. Para utilizar o balanceamento de carga baseado em peso do Nacos, configure a regra de Ribbon para NacosRegra.

@Bean
public IRegra ribbonRegra(){
    return new NacosRegra();
}

Acesso por Cluster

O Nacos permite agrupar instâncias de um serviço em clusters diferentes. Para especificar o cluster de uma instância, utilize a propriedade spring.cloud.nacos.discovery.cluster-name.

spring.cloud.nacos.discovery.cluster-name=pequim

Os consumidores de serviço podem ser configurados para direcionar as chamadas apenas para instâncias dentro do mesmo cluster, definindo a mesma propreidade. Caso a propriedade cluster-name não seja configurada, o consumidor acessará instâncias de todos os clusters disponíveis.

Tags: Nacos Spring Cloud Configuração Dinâmica Anotação RefreshScope Instâncias de Serviço

Publicado em 6-3 00:51 por Thomas