"Registro y descubrimiento de servicios de Cosul" de microservicios

Registro y descubrimiento de servicios

Consul es un marco de microservicios y una solución para el registro y descubrimiento de servicios. Antes de hablar de Cónsul, veamos qué es 服务注册与发现.

En el sistema de microservicios, el registro de servicios y el descubrimiento de servicios son los dos módulos principales. Cuando el servicio A llama al servicio B, necesita encontrar el servicio B a través del módulo de descubrimiento de servicios IP和端口列表, y la instancia del servicio B debe registrar la IP y el puerto del servicio en el registro de servicios cuando se inicia. A continuación se muestra una estructura típica:

En otras palabras, ServiceA necesita encontrar ServiceRegistry a “发现”ServiceB, mientras que ServiceB necesita enviar su propio servicio a ServiceRegistry cada vez que comienza ip+porta “注册”ServiceB.

Registro de servicio

En la actualidad, el registro populares son más comunes con zookeeper, ectd, consul, eurekay así sucesivamente.

Por lo general, hay tres de registro de 自注册servicios: 第三方注册, 注册中心主动同步,.

  • Autorregistro El
    autoregistro, como su nombre lo indica, consiste en 服务提供方enviar la IP y el puerto del servicio al centro de registro cuando se inicia el servicio, y 心跳方式mantener un estado saludable; cuando el servicio se desconecta, los datos correspondientes se borrarán por sí mismos . Un ejemplo típico es usar el eurekacliente para publicar microservicios.
  • Registro de terceros El registro
    de terceros se refiere a la existencia de un sistema de terceros responsable de agregar o eliminar datos del servicio en el registro cuando el servicio se inicia o se detiene. El uso típico es que el devopssistema o el sistema de programación de contenedores ajusta activamente el servicio de registro de la interfaz del centro de registro.
  • Sincronización del centro de registro activo De manera
    similar al método de registro de terceros, el método de registro activo significa que el centro de registro y el sistema de programación o publicación están conectados para sincronizar activamente la última lista de IP del servicio; un ejemplo son los datos de suscripción en el kubernetessistema .corednsapi server

Descubrimiento de servicios

Antes de iniciar realmente una llamada de servicio, la persona que llama debe obtener el servicio correspondiente disponible en el registro IP和端口列表, es decir 服务发现. El descubrimiento de servicios se puede dividir en dos categorías por la intrusión de las aplicaciones:

  • El
    método de descubrimiento de servicios basado en SDK requiere que la persona que llama confíe en el SDK correspondiente y llame explícitamente al código del SDK para implementar la llamada de servicio, que es intrusiva para la empresa. Algunos ejemplos típicos son eureka, zookeeperetc.
  • El DNS basado en
    DNS en sí es un sistema de resolución de nombres de dominio, que puede cumplir con escenarios simples de descubrimiento de servicios, como que las dos partes acuerden puertos, protocolos de serialización, etc. Sin embargo, esto está lejos de satisfacer las necesidades de escenarios de microservicios reales. En los últimos años, la industria ha propuesto el descubrimiento de servicios basados ​​en DNS.

Protocolo de interacción de descubrimiento de servicios

En la arquitectura de microservicios, el protocolo de comunicación para el registro y el descubrimiento de servicios se puede dividir aproximadamente en dos categorías:

  • Uno es “私有”协议, como dubbo+ zky eureka;
  • El otro es universal DNS协议, como k8s+ coredns.
  1. Acuerdo "privado"

El protocolo "privado" tiene un alto grado de personalización y puede implementar funciones más avanzadas con productos específicos, como zk + dubbo, que puede admitir conexiones push y largas. Sin embargo, el protocolo "privado" también trae otro problema, es decir, la apertura es muy pobre, el acceso de terceros necesita usar un SDK específico y la función de idiomas cruzados no es buena. En un entorno de microservicio o nube, el registro y el descubrimiento de servicios en varios idiomas es un escenario muy común.

  1. Protocolo DNS

El protocolo DNS es un protocolo "antiguo" y uno de los protocolos más básicos y comunes. El descubrimiento de servicios basado en el protocolo DNS tiene una buena versatilidad y se puede acceder a casi todos los idiomas sin problemas. En comparación con el descubrimiento de servicios del protocolo "privado", el descubrimiento de servicios basado en el protocolo DNS todavía tiene algunos problemas por resolver, como el problema del puerto y el problema del almacenamiento en caché del marco del lenguaje.

Cónsul

Consul es una herramienta de código abierto lanzada por HashiCorp, que se utiliza para implementar el descubrimiento de servicios y la configuración de sistemas distribuidos. En comparación con otras soluciones encontradas en el registro del servicio distribuido, Cónsul del programa más de "ventanilla única", construida 服务注册与发现框架,, 分布一致性协议实现, 健康检查, Key/Value存储, 多数据中心方案ya no tendrá que depender de otras herramientas (como ZooKeeper, etc.), es relativamente fácil de usar.

Cónsul está escrito en lenguaje Go, por lo que tiene la portabilidad naturales (apoyo Linux, Windowsy Mac OS X), el paquete de instalación sólo contiene un archivo ejecutable, que es conveniente para el despliegue y Dockerpuede trabajar sin problemas con otros envases ligeros.

Instalación del cónsul

Visite el sitio web oficial de Consul y elija descargar la última versión de Consul según el tipo de sistema operativo. La dirección de descarga es https://www.consul.io/downloads.html.
Inserte la descripción de la imagen aquí
Downloaded es un zippaquete comprimido, después de la descompresión, es un exearchivo ejecutable.

Cónsul comienza

El terminal ingresa a la consulcarpeta donde se encuentra el archivo ejecutable y luego ejecuta el siguiente comando para comenzar:

consul agent -dev

La información del proceso de inicio es la siguiente:

[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}]"
...

Después de que el inicio sea exitoso, visite http: // localhost: 8500. Si puede ver la interfaz de administración del servicio Consul como se muestra en la figura siguiente, significa que el servidor de registro puede proporcionar servicios normalmente.
Inserte la descripción de la imagen aquí

Ejemplo de proyecto: registro y descubrimiento del servicio de configuración SpringBoot

  1. Proyecto New MavenserviceA

  2. Agregar dependencia

Al pom.xmlagregar Spring Cloud, el Consulregistro y las dependencias relacionadas con Spring Boot.

  • Nota: Spring Boot 2.1 y versiones posteriores tendrán problemas con el registro del servicio Consul, lo que puede deberse a cambios de configuración o cambios en los métodos de soporte, por lo que aquí ajustamos la versión de Spring Boot a la versión de 2.0.4Spring 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. Agregar archivo de configuración

En resourcescaso de que el nuevo application.ymlarchivo de configuración, agregue la configuración del registro del servicio:

server:
  port: 8000
spring:
  application:
    name: serviceA
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        serviceName: ${
    
    spring.application.name}	# 注册到consul的服务名称
  1. Comenzar la clase

Cree un nuevo paquete en el directorio de java com.hory.serviceAy cree una nueva clase de inicio en el paquete ServiceApplication:

Agregue @EnableDiscoveryClientcomentarios para habilitar el soporte de descubrimiento de servicios.

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);
    }
}

prueba

Inicie el servidor de supervisión del servicio, visite http: // localhost: 8500 y compruebe que el servicio se ha registrado correctamente en el registro.
Inserte la descripción de la imagen aquí
Después de la prueba, no olvide apagar Consul (la terminal Ctrl+Ccierra Consul).

Supongo que te gusta

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