Descripción general
Supongamos que ahora hay un requisito:
Nuestra aplicación se implementa en 10 máquinas. Cuando ajustamos un determinado parámetro de configuración, no necesitamos reiniciar la máquina. 10 máquinas pueden obtener automáticamente la última configuración.
¿Cómo lograrlo? Hay muchos tipos, como:
1. Coloque la configuración en una base de datos, y cada vez que la aplicación lee la configuración directamente desde el DB. De esta manera, solo necesitamos hacer un cambio de DB y actualizar la información de configuración más reciente a la base de datos. De esta manera, no importa cuántas aplicaciones sean, ya que todas obtienen información de configuración de la misma DB, naturalmente pueden obtener la última configuración.
2. Cada máquina proporciona una interfaz UpdateConFig que actualiza la información de configuración. Cuando es necesario modificar la configuración, la interfaz UpdateConFig del servidor se llama una por una.
3. Use Redis para implementarlo y colocar la información de configuración en Redis, pero de esta manera, debe leerla cada vez, lo que tiene más solicitudes de red.
Los tres métodos anteriores son los más fáciles de pensar y son fáciles de hacer, pero, por supuesto, hay muchas desventajas. Aunque hay muchas deficiencias, algunas empresas tradicionales hacen esto.
En las compañías de Internet, básicamente nunca he visto a nadie jugando así, todos usan centros de configuración distribuidos. Use código abierto o impleméntelo usted mismo. Actualmente, hay muchos centros de configuración distribuidos de código abierto, y Spring Cloud Config es el mejor entre ellos. A continuación, utilizaremos Spring Cloud Config para implementar un centro de configuración distribuido.
Si usar la última versión de Spring Boot 2.0
Solía usar la última nube de Spring Cloud 2.0 para hacer una demostración distribuida que es el centro de configuración. Pensé que era simple, pero tardó todo un día en hacerlo. Hay varias razones:
1. El documento correspondiente de Spring Cloud no se ha actualizado completamente, y hay un problema y no se puede encontrar en el documento;
2. Actualmente, hay pocas compañías que usan la versión 2.0, y no hay artículos prácticos específicos en Internet. Después de que se rompió el problema, Baidu no pudo encontrar una solución. Básicamente es difícil para Google encontrar soluciones, todas las cuales son fragmentos de conocimiento esporádicos;
3. Hay algunos cambios menores en la configuración y el bus en la versión 2.0, y si todavía se realiza de acuerdo con la versión 1.5.x, no funcionará.
Según las razones anteriores, se recomienda usar la versión 1.5.x para que sea más confiable. El siguiente artículo se introducirá en la siguiente versión:
Bota de primavera:
1.5.2. Release
La nube de primavera correspondiente usa:
Dalston.
Construir servidor de configuración de Spring Cloud
Si solo desea administrar la configuración de manera uniforme por Spring Cloud Config y no desea estar altamente disponible en el centro de configuración por el momento, solo necesita componentes de configuración y bus. Sin embargo, si desea garantizar una alta disponibilidad, también debe usar el componente de descubrimiento de registro de Spring Cloud.
Además de la configuración y el bus, también necesitamos usar GIT. Porque Spring Cloud Config usa Git para la administración de versiones.
Es muy simple hacer un centro de configuración basado en la configuración de Spring Cloud, se realiza en solo unos pocos pasos.
【1】 Introducir componentes de configuración y bus
<Spendency> <MoupRoMID> org.springframework.cloud </groupid> <artifactid> spring-cloud-config-server </artifactid> </pendency> <pendency> <grupoD> org.springframework.cloud </groupId> <artifactid> spring-cloud-starter-cuus-am-amp </artifactid> <//dependence> </dependente>
【2】 La clase de inicio usa la anotación de @enableconfigserver
paquete spring.cloud.config; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.config.server.enableconfigserverver;@enabliconfigs@springaplate@springaboatapl {public static void main (string [] args) {springapplication.run (configApplication.class, args); }}【3】 El archivo de aplicación.yml configura los repositorios de RabbitMQ y Git
servidor: puerto: 8040spring: aplicación: nombre: springcloud-config-server nube: config: servidor: git: uri: https://gitlab.xxxxxxx.com/config/xxxxxxx.git search-paths: username: xxxxx contraseña: xxxxx Activemq: host: 127.0.0.0.1 Ports1 Contraseña: Guest Management: Security: habilitado: falso
RabbitMQ está configurado porque el componente del bus debe usarlo para notificar al cliente, y los cambios de configuración se realizan. Además, recuerda usar
Gestión: Seguridad: habilitada: falso
La verificación se cerrará y la próxima operación siempre informará un error de autorización.
Se ha completado el centro de configuración del servidor. Ahora puede hacer un pequeño experimento en el servidor y enviar un archivo Demo-Dev.Properties. El contenido del archivo es el siguiente:
dirección = hola
Luego usa
http: // localhost: 8040/demo/dev
Si la salida
{"Dirección": "Hola"}Esto significa que la interacción entre la configuración de Spring Cloud y Git está bien.
Centro de configuración de acceso al cliente
Nuestros objetivos:
Después de modificar y enviar la información de configuración a GIT, todos los clientes conectados a Spring Cloud Config recibirán notificaciones de inmediato y obtendrán la información de configuración más reciente.
Lo siguiente describe cómo lograr este objetivo.
El cliente solo necesita hacer algunos pequeños pasos para completar la acción de acceso.
【1】 Introducir dependencias
<Spendency> <MoupRoMID> org.springframework.boot </groupid> <artifactId> spring-boot-starter-web </artifactid> </pendency> <paperency> <grupoD> org.springframework.cloud </groupId> <artifactid> spring-nloud-starter-config </artifactid> </dependency> </dependency> <MoupRoD> org.springframework.cloud </groupid> <artifactid> spring-ncloud-starter-config </artifactid> </pendency> <pendency> <grupo)
La introducción de la red-boot-starter-Web es solo para la experimentación.
【2】 Configure RabbitMQ e introduzca URL en el centro de configuración
Aplicación. Properties
Spring.Application.name = Spring-Cloud-Config-Client1Server.port = 8042Management.Security.enabled = falspring.rabbitmq.host = 127.0.0.1spring.rabbitmq.port = 5672spring.rabbitmq.username = invitados
bootstrap.properties
spring.cloud.config.name = Demospring.cloud.config.profile = devspring.cloud.config.label = masterspring.cloud.config.uri = http: // localhost: 8040/
Hay tres puntos a los que prestar atención a:
1. Verificación cercana: gestión.security.enabled = falso
2. La configuración relacionada con la configuración de Spring Cloud debe colocarse en Bootstrap.Properties
3. Use spring.cloud.config.uri para especificar la dirección del centro de configuración
Además, para el cliente, la clase de inicio no necesita agregar ninguna anotación relacionada con la configuración y el bus .
Después de llegar a este cliente, podemos usar un controlador para comenzar a experimentar.
paquete springcloudconfig.client; import org.springframework.beans.factory.annotation.value; import org.springframework.cloud.context.config.annotation.refreshscope; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restController;@RestController@RefreshScopepublic Class HELOCONTROLLER {@Value ("$ {dirección}") Dirección de cadena privada; @RequestMapping ("/dirección") Cadena pública getAddress () {return this.address; }}Suponiendo que el Hellocontroller anterior necesita usar la configuración de la dirección, solo necesita usar @RefreshScope y anotaciones @Value.
@RefreshScopepublic Class Hellocontroller {} @Value ("$ {dirección}") Dirección de cadena privada;Para verificar si el cliente puede obtener la última información de configuración, proporcionar un
@RequestMapping ("/dirección") Cadena pública getAddress () {return this.address; }método.
Modificemos el archivo Demo-Dev.Properties y cambiemos el valor a
dirección = hola actualización
Y enviarlo a Git. En este momento, llamamos a la interfaz GetAddress
http: // localhost: 8041/dirección
Descubrí que no obtuve el último valor. Esto se debe a que después de que se completó la acción de presionar a GIT, no notificamos el autobús Spring Cloud. Puede usar Postman para hacer una solicitud de publicación y llamar a la siguiente interfaz para notificar al bus.
http: // localhost: 8040/bus/actualización
Una vez que esta interfaz se llama con éxito, el bus usará RabbitMQ para notificar a todos los clientes que la configuración se ha actualizado.
Atención especial:
Estamos llamando a la interfaz /bus /actualización del servidor, no la interfaz /bus /actualización del cliente.
Si tiene que llamar a la interfaz /bus /actualizar en el servidor cada vez que envía, entonces esto es demasiado problemático. Puede usar Webhook para ayudar.
Si está utilizando el nuevo GITLAB, solo necesita hacer clic en [Configuración] en el proyecto, luego haga clic en [Integraciones] para configurar el Webhook, como se muestra en la figura a continuación:
Complete la URL en la dirección de la interfaz /bus /actualización del servidor del centro de configuración y luego haga clic en [Agregar webhook].
Comparación con el Apolo de Ctrip
Lo exquisito de la configuración de Spring Cloud es que su configuración se almacena en GIT, que naturalmente aísla la modificación de la configuración, los permisos, las versiones y otros problemas. Este diseño hace que Spring Cloud Confect sea muy simple en general, pero también trae algunos inconvenientes.
Intentemos hacer un resumen simple:
| Puntos funcionales | Apolo | Spring Cloud Config | Observación |
|---|---|---|---|
| Interfaz de configuración | Una interfaz administra diferentes entornos y diferentes configuraciones de clúster | Ninguno, necesito operar a través de Git | |
| Configurar el tiempo efectivo | tiempo real | Reiniciar en vigencia, o la actualización manual entra en vigencia | Spring Cloud Config necesita pasar el Webhook de Git, más una cola de mensajes adicional para admitir el efecto en tiempo real |
| Gestión de versiones | El historial de lanzamiento y los botones de reversión se proporcionan directamente en la interfaz | Ninguno, necesito operar a través de Git | |
| Lanzamiento en escala de grises | apoyo | No compatible | |
| Autorización, auditoría, auditoría | Soporte directamente en la interfaz y admite la separación de la modificación y los permisos de publicación | Debe establecerse a través del repositorio de git, y no admite la separación de la modificación y el permiso de liberación | |
| Monitoreo de configuración de instancia | Es fácil ver qué clientes están utilizando actualmente qué configuraciones | No compatible | |
| Configuración para obtener rendimiento | Rápido, acceso a través de la base de datos y el soporte de almacenamiento en caché | Más lento, necesito leer del repositorio de clones de git y luego del sistema de archivos | |
| Soporte del cliente | Admite de forma nativa todas las aplicaciones Java y .NET, proporcionan API para admitir otras aplicaciones de idiomas y también admite la anotación de Spring para obtener la configuración | Soporte de aplicaciones de Spring y proporcione anotación para obtener la configuración | Apollo tiene una gama más amplia de aplicaciones |
Personalmente recomiendo usar Spring Cloud Config, que es muy liviano y activo en la comunidad. Es fácil encontrar una solución al encontrar problemas. Además, personalmente creo que la diferencia entre Apollo y Spring Cloud Config es solo que no hay interfaz. La interfaz se puede hacer, y podemos hacerlo a través de Git, pero la experiencia del usuario no es tan buena.
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.