"Registro e descoberta do serviço Cosul" de microsserviços

Registro e descoberta de serviço

Consul é um framework de microsserviços e uma solução para registro e descoberta de serviços. Antes de falar sobre Consul, vamos ver o que é 服务注册与发现.

No sistema de microsserviço, registro de serviço e descoberta de serviço são os dois módulos principais. Quando o serviço A chama o serviço B, ele precisa encontrar o serviço B por meio do módulo de descoberta de serviço IP和端口列表e a instância do serviço B precisa registrar o IP e a porta do serviço no registro de serviço quando é iniciado. Uma estrutura típica é mostrada abaixo:

Em outras palavras, ServiceA precisa encontrar ServiceRegistry para “发现”ServiceB, enquanto ServiceB precisa enviar seu próprio serviço para ServiceRegistry toda vez que ele inicia ip+portpara “注册”ServiceB.

Registro de serviço

No momento, o registro populares são mais comuns com zookeeper, ectd, consul, eurekae assim por diante.

Normalmente existem três inscrição 自注册serviços: 第三方注册, 注册中心主动同步,.

  • Autorregistro
    O autorregistro, como o nome indica, é para 服务提供方enviar o IP e a porta do serviço para a central de registro quando o serviço é iniciado e 心跳方式manter um estado de integridade; quando o serviço ficar offline, os dados correspondentes serão excluídos por si só . Um exemplo típico é usar o eurekacliente para publicar microsserviços.
  • Registro de
    terceiros O registro de terceiros refere-se à existência de um sistema de terceiros responsável por adicionar ou excluir dados de serviço no registro quando o serviço é iniciado ou interrompido. O uso típico é que o devopssistema ou sistema de programação de contêineres ajusta ativamente o serviço de registro da interface do centro de registro.
  • Sincronização do centro de registro ativo
    Semelhante ao método de registro de terceiros, o método de registro ativo significa que o centro de registro e o sistema de agendamento ou publicação estão conectados para sincronizar ativamente a lista de IP de serviço mais recente; um exemplo são os dados de assinatura no kubernetessistema .corednsapi server

Descoberta de serviço

Antes de realmente iniciar uma chamada de serviço, as necessidades de chamada para obter o serviço correspondente disponível a partir do registro IP和端口列表, ou seja 服务发现. A descoberta de serviço pode ser dividida em duas categorias de intrusão de aplicativos:

  • O
    método de descoberta de serviço baseado em SDK requer que o chamador confie no SDK correspondente e chame explicitamente o código SDK para implementar a chamada de serviço, que é intrusiva para o negócio. Exemplos típicos são eureka, zookeeperetc.
  • O DNS baseado em
    DNS em si é um sistema de resolução de nome de domínio, que pode atender a cenários de descoberta de serviço simples, como as duas partes concordam sobre portas, protocolos de serialização e assim por diante. No entanto, isso está longe de atender às necessidades de cenários reais de microsserviços. Nos últimos anos, a descoberta de serviço baseada em DNS foi proposta pela indústria.

Protocolo de interação de descoberta de serviço

Na arquitetura de microsserviço, o protocolo de comunicação para registro e descoberta de serviço pode ser dividido em duas categorias:

  • Um é “私有”协议, como dubbo+ zke eureka;
  • O outro é universal DNS协议, como k8s+ coredns.
  1. Acordo "privado"

O protocolo "privado" tem um alto grau de customização e pode implementar funções mais avançadas com produtos específicos, como zk + dubbo, que pode suportar conexões push e longas. Porém, o protocolo "privado" também traz outro problema, ou seja, a abertura é muito pobre, o acesso de terceiros precisa usar um SDK específico e o recurso de cross-language não é bom. Em um microsserviço ou ambiente de nuvem, o registro e a descoberta de serviço entre idiomas é um cenário muito comum.

  1. Protocolo DNS

O protocolo DNS é um protocolo "antigo" e um dos protocolos mais básicos e comuns. A descoberta de serviço baseada no protocolo DNS tem boa versatilidade e quase todos os idiomas podem ser acessados ​​facilmente. Comparada com a descoberta de serviço do protocolo "privado", a descoberta de serviço baseada no protocolo DNS ainda apresenta alguns problemas a serem resolvidos, como o problema da porta e o problema de cache do framework da linguagem.

Cônsul

Consul é uma ferramenta de código aberto lançada pela HashiCorp, usada para implementar a descoberta de serviço e configuração de sistemas distribuídos. Em comparação com outras soluções encontradas no registro de serviço distribuído, Cônsul do programa mais "one-stop", construído 服务注册与发现框架,, 分布一致性协议实现, 健康检查, Key/Value存储, 多数据中心方案não necessidade de contar com outras ferramentas (como ZooKeeper, etc.), é relativamente simples de usar.

Consul é escrito em linguagem Go, por isso tem portabilidade natural (suporte Linux, Windowse Mac OS X), o pacote de instalação contém apenas um arquivo executável, que é conveniente para a implantação e Dockerpode funcionar perfeitamente com outros recipientes leves.

Instalação Consul

Visite o site oficial da Consul e opte por fazer o download da última versão do Consul de acordo com o tipo de sistema operacional. O endereço de download é https://www.consul.io/downloads.html.
Insira a descrição da imagem aqui
Baixado é um zippacote compactado, após a descompactação, é um exearquivo executável.

Consul começa

O terminal entra na consulpasta onde o arquivo executável está localizado e, em seguida, executa o seguinte comando para iniciar:

consul agent -dev

As informações do processo de inicialização são as seguintes:

[superfarr@19:20:59]:~->cd /Users/superfarr/Documents/iCollections/casaba/consul[superfarr@19:21:08]:~/Documents/iCollections/casaba/consul->consul agent -dev
==> Starting Consul agent...
           Version: '1.8.2'
           Node ID: 'f011f480-5d47-e343-c26a-6bbd32675721'
         Node name: 'superfarrdeMacBook-Pro.local'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: false)
       Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
      Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

==> Log data will now stream in as it occurs:

    2020-10-11T19:21:18.633+0800 [DEBUG] agent: Using random ID as node ID: id=f011f480-5d47-e343-c26a-6bbd32675721
    2020-10-11T19:21:18.638+0800 [WARN]  agent: Node name will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.: node_name=superfarrdeMacBook-Pro.local
    2020-10-11T19:21:18.650+0800 [INFO]  agent.server.raft: initial configuration: index=1 servers="[{Suffrage:Voter ID:f011f480-5d47-e343-c26a-6bbd32675721 Address:127.0.0.1:8300}]"
...

Depois que a inicialização for bem-sucedida, visite http: // localhost: 8500. Se você puder ver a interface de gerenciamento de serviço do Consul conforme mostrado na figura abaixo, significa que o servidor de registro pode fornecer serviços normalmente.
Insira a descrição da imagem aqui

Exemplo de projeto: registro e descoberta do serviço de configuração SpringBoot

  1. Novo projeto MavenserviceA

  2. Adicionar dependência

Em pom.xmladição Spring Cloud, Consulregistro e da mola de arranque relacionada dependências.

  • Nota: Spring Boot 2.1 e versões posteriores terão problemas com o registro do serviço Consul, que podem ser devido a mudanças de configuração ou mudanças nos métodos de suporte, então aqui ajustamos a versão Spring Boot para a 2.0.4versão Spring Cloud Finchley.RELEASE.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hory</groupId>
    <artifactId>service</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <!-- spring boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- spring-boot-admin -->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server</artifactId>
            <version>2.0.4</version>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server-ui</artifactId>
            <version>2.0.4</version>
        </dependency>

        <!--consul-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
    </dependencies>

    <!--spring cloud-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  1. Adicionar arquivo de configuração

No resourcescaso do novo application.ymlarquivo de configuração, adicione a configuração do registro do serviço:

server:
  port: 8000
spring:
  application:
    name: serviceA
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        serviceName: ${
    
    spring.application.name}	# 注册到consul的服务名称
  1. Começar a aula

Crie um novo pacote no diretório java com.hory.serviceAe crie uma nova classe de inicialização no pacote ServiceApplication:

Adicione @EnableDiscoveryClientcomentários para habilitar o suporte à descoberta de serviço.

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @Author Hory
 * @Date 2020/10/11
 */
@EnableAdminServer
@EnableDiscoveryClient  //开启服务发现
@SpringBootApplication
public class ServiceApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(ServiceApplication.class, args);
    }
}

teste

Inicie o servidor de monitoramento de serviço, visite http: // localhost: 8500 e descubra que o serviço foi registrado com êxito no registro.
Insira a descrição da imagem aqui
Após o teste, não se esqueça de desligar o Consul (o terminal Ctrl+Cfecha o Consul).

Acho que você gosta

Origin blog.csdn.net/weixin_44471490/article/details/109016074
Recomendado
Clasificación