MAD · NOV 24-25 · 2017
Practical Spring Cloud
Álvaro Sánchez-Mariscal
Software Engineer, Grails Team
Sobre mí
• Trabajando como programador desde 2001.
• Java, Spring, Groovy, Grails, Docker, Ansible, etc.
• Fundador de Salenda.
• Actualmente en Object Computing, Inc (OCI)
Introducción
¿Qué es Spring Cloud?
• Conjunto de herramientas para microservicios.
• Impulsado por Pivotal.
• Distributed & versioned configuration.
• SC Config, SC Consul.
• Service discovery.
• SC Netflix (Eureka), SC Zookeeper, SC Consul.
¿Qué es Spring Cloud?
• Load balancing.
• SC Netflix (Ribbon, Feign).
• Circuit breakers.
• SC Netflix (Hystrix).
• Distributed tracing.
• SC Sleuth, SC Zipkin.
¿Qué es Spring Cloud?
• Event bus & message-driven microservices.
• SC Bus, SC Stream.
• OAuth 2.
• SC Security.
• Consumer-Driven Contracts.
• SC Contract.
¿Qué es Spring Cloud?
• Data integration pipelines.
• SC Data Flow, SC Stream, SC Task.
• Serverless.
• SC Function.
Primeros pasos
• start.spring.io:
Primeros pasos: Gradle
• Importa el BOM de Spring Cloud BOM:
• Elige los starters:
• Activa Spring Cloud:
dependencyManagement {
imports {
mavenBom “org.springframework.cloud:spring-cloud-dependencies:Dalston.SR4"
}
}
compile ‘org.springframework.cloud:spring-cloud-starter-config'
compile ‘org.springframework.cloud:spring-cloud-starter-consul-discovery’
@SpringBootApplication
@EnableDiscoveryClient
class SpringCloudDemoApplication {
	 static void main(String[] args) {
	 	 SpringApplication.run SpringCloudDemoApplication, args
	 }
}
Primeros pasos: Maven
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Primeros pasos: CLI
Distributed
configuration
Nivel
Nivel
server:
port: 9000
---
spring:
profiles: staging
server:
port: 9001
---
spring:
profiles: production
server:
port: 9002
Problemas
• Los ficheros de configuración son difíciles de
mantener:
• Diferentes valores para diferentes entornos.
• Secretos (p.ej.: contraseñas).
• ¿JAR/WAR por entorno?
Nivel
Nivel
Nivel
Demo - Spring Cloud
Config
Service Discovery
El problema
• En una arquitectura de microservicios, el
número de llamadas HTTP a realizar es alto.
• Configurar los clientes REST es complicado.
• ¿Entornos?
• ¿Máquinas? ¿Puertos?
• ¿Configuración SSL?
La solución
• Service discovery al rescate.
• Un servidor centralizado y en alta disponibilidad.
• Los clientes se registran ellos mismos, y además
piden los detalles sobre sus dependencias.
Service Discovery en Spring Cloud
• Opciones:
• Spring Cloud Netflix (Eureka Server).
• Consul con Spring Cloud Consul.
• Zookeeper con Spring Cloud Zookeeper.
Consul UI
Demo - Spring Cloud
Consul
Distributed tracing
El problema
• En un proceso que transcurre a través de
varios microservicios que se llaman unos a
otros, es difícil ver:
• Dónde está transcurriendo el tiempo.
• Cómo encontrar los logs de los distintos
servicios, agregados por petición.
La solución
• Spring Cloud Sleuth y Zipkin facilitan:
• Visualizar, para una operación end-to-end, el
tiempo que ha tardado cada servicio.
• Agregar los logs a través de un correlation ID.
Log correlation
Tracing
MAD · NOV 24-25 · 2017
¡Gracias!
¿Preguntas?
Álvaro Sánchez-Mariscal
Software Engineer, Grails Team

Practical Spring Cloud