Al igual! La construcción de este tipo de arquitectura micro-servicios, es demasiado fácil!

Autor: Alexander Lukyanchikov      
Traductor: Oopsguy
original: dzone.com/articles/microservice-architecture-with-spring-cloud-and-do

[Nota del editor] cómo utilizar la primavera de arranque, Nube, Primavera, acoplable Netflix y algunas herramientas de código abierto para construir una arquitectura de micro-servicio. Mediante el uso del resorte de arranque, ejemplos de aplicación y conceptual de primavera de nubes acoplable construido para proporcionar un punto de partida para la comprensión de la micro-servicio modelo de arquitectura común.

El código está disponible en GitHub, y se proporciona en el espejo acoplable concentradores. Sólo se necesita un comando para iniciar todo el sistema.

https://github.com/sqshq/PiggyMetrics

Elegí un viejo proyecto como base para este sistema, que solía ser la parte final de una sola aplicación. Esta aplicación proporciona el procesamiento de las finanzas personales, organizar ingresos por gastos generales, la gestión del ahorro, el análisis estadístico y crear una función de predicción simple.

Las características del servicio

Toda la aplicación en servicio micro tres núcleo. Todos ellos pueden ser desplegados de forma independiente de la aplicación, algunas funciones de negocio alrededor de la organización.

Servicios de cuentas

Contiene la lógica general de entrada y validación de usuario: los gastos de ingresos / ahorros y ajustes de cuentas registradas.

Estadísticas de los Servicios

Cálculo de los principales parámetros estadísticos, y la captura de series de tiempo para cada cuenta. Contiene valores de los puntos de datos y la moneda sobre la base período de normalización. Estos datos se pueden utilizar para rastrear el flujo de efectivo en cuenta el ciclo de vida en movimiento.

Servicio de notificación

Almacenamiento de la información de contacto del usuario y la configuración de las notificaciones (como recordatorios y la frecuencia de copia de seguridad). Los arreglos para el personal requiere información de otros servicios recoger y enviar los clientes de suscripción de correo electrónico.

prestar atención

  • Cada servicio tiene su propia base de datos micro, así que no hay manera de evitar el API para acceder directamente a los datos persistentes.

  • En este proyecto, yo uso MongoDB como la base de datos maestra para cada servicio. Tener más de un tipo de arquitectura persistencia (políglota arquitectura persistencia) es también significativa.

  • Servicio de habitaciones (Servicio-a-service) la comunicación es muy sencilla: micro-servicios REST API mediante comunicación sólo sincrónica. Una práctica común en la realidad el sistema es utilizar una combinación de estilo interactivo. Por ejemplo, una solicitud GET para recuperar datos de sincronización y realiza asíncrono creados usando el método a través de un intermediario de mensajes (broker) / operación de actualización, así como para liberar el acoplamiento entre el servicio y la memoria intermedia de mensajes. Sin embargo, esto nos da es la consistencia final.

Servicios de infraestructura

Los sistemas distribuidos patrón común, nos puede ayudar a describir el servicio básico es cómo funciona. Nube resorte proporciona una poderosa herramienta que puede mejorar el comportamiento de la aplicación de la primavera de arranque para poner en práctica estos patrones. Voy a describir brevemente:

Servicio de configuración

Primavera Nube de configuración es una configuración centralizada a nivel de sistema distribuido de servicios de extensión. Se utiliza el soporte actual de almacenamiento local, Git y subversión repositorios tal como la capa de acoplamiento activo (capa repositorio).

En este proyecto, he usado el perfil nativa, simplemente carga el archivo de configuración de la ruta de clases local. Se puede ver el directorio compartido en un recurso de servicio de configuración. Ahora, una notificación de solicitud de servicio cuando su configuración, la parte posterior respuesta de servicio a la configuración compartida / notificación service.yml y compartido / application.yml (compartido entre todas las aplicaciones de cliente).

utilización clientes

Sólo el uso Sprng nube-arranque-config depende construcción de la aplicación de Primavera de arranque, se configura automáticamente para realizar otro trabajo.

Ahora su aplicación no requiere ningún propiedades incrustadas, sólo tendrá que proporcionar bootstrap.yml al nombre de la aplicación y la configuración de la dirección URL del servicio:

spring:  
application:  
name: notification-service  
cloud:  
config:  
  uri: http://config:8888  
  fail-fast: true  

Uso de primavera de nubes de configuración, puede cambiar dinámicamente la configuración de la aplicación

Por ejemplo, frijol EmailService utiliza @RefreshScope comentario. Esto significa que usted puede cambiar el contenido y el asunto del correo electrónico, sin tener que reconstruir y aplicaciones de servicio de notificación de reinicio.

En primer lugar, cambiar los atributos necesarios para el servidor de configuración. A continuación, la notificación de solicitud de servicio de actualización: -H rizo "Autorización: Portador # # token" -XPOST http://127.0.0.1:8000/notifications/refresh.

También puede utilizar web hook para automatizar este proceso.

http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_push_notifications_and_spring_cloud_bus

prestar atención

  • actualización dinámica, hay algunas restricciones. @RefreshScope no trabajar juntos y clase @Configuraion, y no actúa sobre el método @Scheduled.

  • fail-fast medios de propiedad que si la aplicación de configuración de arranque primavera no puede conectarse al servicio, no se podrá iniciar de inmediato. Al iniciar la aplicación todos juntos, lo cual es muy útil.

  • Los siguientes consejos de seguridad importantes

Servicio autorizado

En parte responsable de la autorización está totalmente extraído a un servidor independiente que proporciona servicio de token OAuth2 a los recursos de back-end. servidor de autorización para la autorización y la seguridad entre los usuarios dentro de las comunicaciones máquina perímetro.

En este proyecto, utilizo las credenciales de la contraseña como el tipo de autorización (ya que sólo es utilizado por la interfaz de usuario de aplicación local) y las credenciales del cliente como un servicio de tipo micro-autorizado autorizado de la autorización del usuario.

Primavera Cloud Security proporciona anotación conveniente y de configuración automática para que pueda ser fácilmente implementado en el servidor o cliente. Puede encontrar más información en el documento, y comprobar los detalles de la configuración del servidor en el código de autorización.

código de servidor de autorización: https: //github.com/sqshq/PiggyMetrics/tree/master/auth-service/src/main/java/com/piggymetrics/auth

Desde el punto de vista del cliente, todo es exactamente lo mismo que con la autorización tradicional basada en sesión. Puede recuperar el principal objeto de la solicitud, comprobar la función de usuario y otra de control de acceso basado en la expresión y @PreAuthorize contenido de anotación.

PiggyMetrics cada cliente (servicios de cuenta, servicios de estadística, servicios de notificación, y el navegador) tiene un rango: Servidor de servicios de back-office para la pantalla del navegador de interfaz de usuario. Así podemos evitar controlador de protección de acceso externo, por ejemplo:

@PreAuthorize("#oauth2.hasScope('server')")  
@RequestMapping(value = "accounts/{name}", method = RequestMethod.GET)  
public List<DataPoint> getStatisticsByAccountName(@PathVariable String name) {  
return statisticsService.findByAccountName(name);  
}   

Puerta de enlace de la API

Como se puede ver, hay tres servicios básicos. Están expuestos a la API de cliente externo. En los sistemas reales, este número puede crecer muy rápidamente, y todo el sistema llegará a ser muy complicado. De hecho, representar una página compleja puede implicar cientos de servicio.

En teoría, el cliente puede enviar directamente la solicitud directamente a cada micro-servicios. Pero esta es la forma en que los desafíos y limitaciones, si lo que necesita saber las direcciones de todos los puntos finales fueron ejecutados petición http para cada pieza de información, la fusión dará como resultado al cliente. Otro problema es que esto no es un protocolo compatible con la web sólo se puede utilizar en la parte de atrás.

Por lo general, un mejor enfoque es utilizar la puerta de enlace API. Es el único punto de entrada del sistema, por las solicitudes a servicio backend apropiado o para procesar la petición llamando a una pluralidad de servicios de backend y resultados de la polimerización. Además, se puede utilizar para la autenticación, puntos de vista, la prueba de esfuerzo, canario de prueba (prueba canario), servicios de migración, y transformar activamente la gestión de procesamiento de respuesta estática.

resultados de la polimerización: http: //techblog.netflix.com/2013/01/optimizing-netflix-api.html

Dicho código abierto del servicio de Netflix un borde, ahora con la nube primavera, podemos utilizar una anotación @EnabledZuulProxy para habilitarlo. En este proyecto, he utilizado Zuul almacenar contenido estático (aplicaciones de interfaz de usuario), y la solicitud será dirigida al micro-servicios apropiados. El siguiente se basa en un prefijo sencillo (basado en el prefijo) de enrutamiento de la configuración del servicio de notificación:

zuul:  
routes:  
notification-service:  
    path: /notifications/**  
    serviceId: notification-service  
    stripPrefix: false  

Esto significa que todas las peticiones a la notificación / serán enviados al inicio del servicio de notificación. Como se puede ver, no hay direcciones no modificables. mecanismo de descubrimiento de servicios Zuul utiliza para localizar y notificar a los interruptores de instancia de servicio y los equilibradores de carga, como se describe a continuación.

Descubrimiento de servicios

Otro patrón de arquitectura común es el descubrimiento de servicios. Permite la detección automática de la posición de una instancia de servicio de red, ya que el fracaso de extensión y actualización automática, que puede ser asignado dinámicamente la dirección.

La parte clave del descubrimiento de servicios se ha registrado. Yo uso Netflix Eureka llevar a cabo este proyecto, cuando el cliente es responsable de determinar la instancia de servicio puede utilizar (el uso del servidor de registro) Ubicación del multi-plataforma de carga y las peticiones de equilibrio, el cliente de Eureka es un buen ejemplo de patrón de descubrimiento.

Uso de Primavera de arranque, puede usar un muelle en la nube-arranque-Eureka-servidor dependiente, @ notas EnabledEurekaServer y configuración sencilla de construir fácilmente Eureka registro de la propiedad (Eureka Registro).

anotaciones uso @EnabledDiscoveryClient y bootstrap.yml con el nombre de la aplicación para habilitar el soporte de cliente:

spring:  
application:  
name: notification-service  

Ahora, cuando se inicia la aplicación, que se registrará en el servidor de Eureka y proporcionar metadatos, tales como el host y el puerto indicador de salud URL, el hogar y así sucesivamente. Eureka recibir mensajes de latido de cada instancia subordinada de un servicio. Si los latidos del corazón no supera la programación configurada, los ejemplos eliminarán del registro.

Además, Eureka también ofrece una interfaz sencilla, se puede realizar un seguimiento del número de instancias en ejecución de servicio y disponible a través de él: http: // localhost: 8761

El balanceo de carga, interruptores de circuito y cliente HTTP

Netflix OSS ofrece otra serie de grandes herramientas.

Cinta

La cinta es un equilibrador de carga del cliente, HTTP se puede controlar bien y el comportamiento del cliente TCP. En comparación con los equilibradores de carga tradicionales, cada una llamadas de línea no necesitan un salto adicional - se puede contactar directamente con el servicio deseado.

Se encontró servicios en la nube de primavera están integrados y pueden estar fuera de la caja. Eureka cliente proporciona una lista dinámica de servidores disponibles, por tanto, la cinta puede equilibrar entre ellos.

hystrix

Hystrix es un modo de ejecución del interruptor de circuito, que puede ser controlado por los errores de acceso de red y retrasar dependiente. La idea central es detener a los fallos en cascada en un entorno distribuido con un gran número de servicio de micro. Esto ayuda a fallar y recuperarse tan pronto como sea posible de forma rápida - en un sistema tolerante a fallos de auto-sanación es muy importante.

Además del control de interruptor de circuito, MAMMALIA, en uso, se puede añadir un método de copia de seguridad en caso de fallo de la orden primaria, que será llamado para obtener los valores por defecto.

Además, Hystrix generar los resultados de cada comando y latencia métricas, podemos utilizarla para controlar el comportamiento del sistema.

Fingir

Fingir es un cliente HTTP declarativa, una perfecta integración con la cinta y Hystrix. De hecho, por una dependencia y @EnabledFeignClients primavera-nube-starter-fingir anotaciones, se puede utilizar un conjunto de equilibrio de carga, interruptores de circuito y los clientes HTTP, y viene con una configuración por defecto razonable.

Los siguientes son ejemplos de servicios de cuenta:

@FeignClient(name = "statistics-service")  
public interface StatisticsServiceClient {  
@RequestMapping(method = RequestMethod.PUT, value = "/statistics/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)  
void updateStatistics(@PathVariable("accountName") String accountName, Account account);  
}   
  • Todo lo que necesita es una interfaz

  • Puede compartir la sección @RequestMapping entre el método controlador Spring MVC y Feign

  • El ejemplo anterior especifica sólo el servicio necesarios ID - estadísticas de servicio, gracias a la detección automática de Eureka (pero al parecer se puede utilizar una dirección URL específica para acceder a cualquier recurso).

monitoreo salpicadero

En esta configuración del proyecto, Hystrix cada micro-servicios a través de primavera de nubes autobús (a través de broker AMQP) empujará el índice para la turbina. El seguimiento del proyecto utilizando sólo una pequeña turbina de aplicación primavera de arranque y el salpicadero Hystrix.

Veamos el comportamiento del sistema bajo carga: Cuenta de Respuesta servicio de estadísticas de llamadas de servicio y un cambio en su retardo analógico. Respuesta umbral de tiempo de espera de 1 segundo.

Análisis de registro

El registro centralizado es muy útil cuando se trata de encontrar el problema en un entorno distribuido. Elasticsearch, Logstash y Kibana pila de tecnología le permite buscar y analizar los datos de actividad Registros de red, utilización y fácil. En otro proyecto en el que he estado de configuración acoplable listo.

seguridad

configuración de seguridad avanzada está más allá del alcance de este proyecto conceptual. Con el fin de simular de manera más realista sistema real, considere el uso de HTTPS y cifrado de contenido JCE propiedades del almacén de claves con la contraseña de micro-servicio y configurar el servidor (para más detalles, véase la documentación).

Automatización de infraestructura

El despliegue de micro-servicios mucho más complejo que el proceso de desplegar una única aplicación, ya que son interdependientes. conjunto de bases ha totalmente automatizado es muy importante. Podemos recibir los siguientes beneficios por medio de la entrega continua:

  • En cualquier momento la publicación de capacidades del software.

  • Cualquier edificio con el tiempo podría convertirse en un comunicado.

  • Construcción de una pieza de trabajo (artefacto) una vez desplegado, como sea necesario.

Se trata de un flujo de trabajo sencillo entrega continua, implementado en este proyecto:

En esta configuración, Travis CI para cada Git éxito empuje para crear la etiqueta de imagen. Por lo tanto, cada servicio de micro acoplable Hub en el último, habrá un espejo, sino una imagen especular de la mayor Git presentadas mediante el símbolo de almohadilla. Si es necesario, se puede implementar fácilmente cualquiera de ellos, y rápidamente se deshace.

Cómo ejecutar todos?

Es muy simple, te recomiendo que lo pruebe. Recuerde que usted tendrá que empezar a 8 aplicación primavera de arranque, cuatro instancia MongoDB y RabbitMQ. Asegúrese de que hay 4 GB de memoria en su máquina. Siempre que puedas servicios importantes a través de las operaciones de puerta de enlace, registro, configuración, autenticación y la cuenta del centro de servicio.

antes de ejecutar

  • Instalación y acoplable acoplable Componer.

  • variable de entorno de configuración: CONFIG_SERVICE_PASSWORD, NOTIFICATION_SERVICE_PASSWORD, STATISTICS_SERVICE_PASSWORD, ACCOUNT_SERVICE_PASSWORD, MONGODB_PASSWORD

Modo de producción

En este modo, todas las últimas espejos son extraídos de la ventana acoplable concentradores. Copiar ventana acoplable-compose.yml y realizar ventana acoplable-componer hasta -d puede ser.

modelo de desarrollo

Si usted quiere construir su propia imagen (por ejemplo, algunas modificaciones en el código), debe clonar toda almacén (repositorio) y utilizar Mavne construir artefactos (artefacto). A continuación, ejecute la ventana acoplable -f de composición del cargador de muelle-compose.yml -f ventana acoplable-compose.dev.yml hasta -d

cargador de muelle-compose.dev.yml heredó ventana acoplable-compose.yml, viene con una configuración adicional, el espejo puede ser construido localmente, y se expone a todos los puertos de contenedores con el fin de facilitar el desarrollo.

criterios de valoración importantes (punto final)

  • localhost: 80 - Puerta de enlace

  • localhost: 8761 - salpicadero Eureka

  • localhost: 9000 - salpicadero Hystrix

  • localhost: 8989 - flujo de la turbina (fuente tablero Hystrix)

  • localhost: 15672 - Gestión RabbitMQ

prestar atención

Todas las aplicaciones de la primavera de arranque necesitan para ejecutar el servidor de configuración para comenzar. Gracias a la Bota de primavera fail-fast propiedad y estibador-compsoe reanudar el juego: siempre opciones, que pueden comenzar todos los contenedores de forma simultánea. Esto significa que todo dependerá de contenedor intentarán reiniciar hasta que el servidor de configuración en funcionamiento hasta ahora.

Además, los mecanismos de descubrimiento de servicios toman algún tiempo después de todo, comienzan las aplicaciones. En el ejemplo anterior, el servidor y el cliente de Eureka en su caché local tiene los mismos metadatos, servicios no están disponibles para cualquier detección de clientes, puede tomar tres golpes. El intervalo de latidos predeterminado de 30 segundos.

Publicado 50 artículos originales · ganado elogios 1706 · Vistas 2,22 millones +

Supongo que te gusta

Origin blog.csdn.net/zl1zl2zl3/article/details/105301323
Recomendado
Clasificación