Spring Cloud Into Production

Post on 21-Feb-2017

127 views 1 download

Transcript of Spring Cloud Into Production

SPRING CLOUD INTO PRODUCTION

TODD MILLER

SPRING CLOUD INTO PRODUCTION

ABOUT MEAtlanta, GA

Inc 5000 fastest growing companies 5 years in a row

Forbes 25 Best Small Businesses 2016

Father of four

todd@zifty.com @ziftytodd

Microservices are great… until you realize all the other 💩 it takes to run them.

Todd Miller

SPRING CLOUD INTO PRODUCTION

SPRING INTO PRODUCTION

MICROSERVICE “TAX”

▸ Configuration Management

▸ Service Discovery (and registration)

▸ More faults to handle (and more gracefully)

▸ Authentication & Authorization

▸ and so on…

SPRING CLOUD INTO PRODUCTION

WHAT IS SPRING CLOUD?

▸ Config management

▸ Service discovery

▸ Circuit breakers

▸ Intelligent routing

▸ Micro-proxy

▸ Control bus

▸ One-time tokens

▸ Global locks

▸ Distributed sessions …. and more!

SPRING CLOUD INTO PRODUCTION

CONFIGURATION - SPRING CLOUD CONFIG

▸ Separate server service

▸ Keep config in a repository

▸ YAML or Properties files

▸ Supports multiple services and profiles

▸ Super simple client

▸ One config line

▸ One dependency

SPRING CLOUD INTO PRODUCTION

SERVICE DISCOVERY - EUREKA

▸ Separate server service

▸ Service registry

▸ Clients register and discover

▸ Some fault tolerance

▸ Add Ribbon for intelligent routing

SPRING CLOUD INTO PRODUCTION

CIRCUIT BREAKERS - HYSTRIX

▸ Part of your service’s code

▸ Circuit breaker

▸ Failure isolation

▸ Graceful degradation

▸ Built-in monitoring

▸ Use with Turbine to aggregate

SPRING CLOUD INTO PRODUCTION

EC2 CONTAINER SERVICE (ECS)

▸ Manages containers & cluster

▸ Define tasks

▸ Compose tasks into services

▸ Load balancing

▸ Auto-scaling

▸ AWS’s Docker registry (ECR)

SPRING INTO PRODUCTION

CLOUD CONFIG INTO PRODUCTION

▸ Which comes first? Eureka or Config?

▸ How do you find the Config Server?

▸ Use an ELB to point to config server instances

SPRING CLOUD INTO PRODUCTION

Gr8ConfigApplication.groovy

bootstrap.yml

Dockerfile

SPRING INTO PRODUCTION

SPRING INTO PRODUCTION

SPRING INTO PRODUCTION

SPRING INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

IT RUNS!

▸ Access via ELB’s endpoint URL

▸ But who wants to remember a URL like this?

▸ Plus, it’s not very portable

▸ Enter AWS Route 53 and private DNS

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

IT RUNS BETTER!

▸ Any service in our VPC can access via

http://config.gr8conf.vpc:8888/

▸ Private hosted zones do not work from outside VPC access

▸ Use public DNS records if external access is needed

SPRING INTO PRODUCTION

EUREKA INTO PRODUCTION

▸ How do you find a server?

▸ How do servers find each other?

▸ Route53 and DNS to the rescue again

SPRING CLOUD INTO PRODUCTION

Gr8EurekaApplication.groovy

SPRING CLOUD INTO PRODUCTION

bootstrap.yml

SPRING CLOUD INTO PRODUCTION

eureka-server.yml

SPRING INTO PRODUCTION

ROUTE 53 FOR EUREKA

▸ TXT record per region to point to AZ in that region txt.us-east-1.gr8conf.vpc ->us-east-1d.gr8conf.vpc

us-east-1e.gr8conf.vpc

▸ TXT record per AZ in region txt.us-east-1d.gr8conf.vpc ->

ec2-##-##-##-##.compute-1.amazonaws.com

ec2-##-##-##-##.compute-1.amazonaws.com

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

A FEW TRICKS

▸ List of EC2 instances must use the expanded EIP hostname

▸ Separated by spaces

▸ Space at start, and space at end

▸ Failure results in Eureka servers using wrong hostname and not recognizing each other properly

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

HOW DO OUR SERVICES USE THIS?

▸ Point to config server ELB

▸ Store Eureka config details for clients in config server

▸ EurekaInstanceConfigBean has to happen on services too

SPRING CLOUD INTO PRODUCTION

Gr8ServiceApplication.groovy

SPRING CLOUD INTO PRODUCTION

Gr8Controller.groovy

SPRING CLOUD INTO PRODUCTION

bootstrap.yml

SPRING CLOUD INTO PRODUCTION

gr8service.yml

SPRING CLOUD INTO PRODUCTION

DEPLOY TO PRODUCTION

▸ Same as we’ve seen

▸ Push Docker image to ECR

▸ Create Task Definition

▸ Create Service

▸ Public facing? Use an ELB to get a reliable URL

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

HYSTRIX MONITORING

▸ Use Hystrix Dashboard

SPRING CLOUD INTO PRODUCTION

SPRING CLOUD INTO PRODUCTION

http://techblog.netflix.com/2012/12/hystrix-dashboard-and-turbine.html

SPRING CLOUD INTO PRODUCTION

HYSTRIX MONITORING FOR THEM ALL

▸ Start a Turbine server

▸ Finds services to get Hystrix streams via Eureka

▸ Need AMPQ broker

SPRING CLOUD INTO PRODUCTION

http://www.programering.com/a/MDN3gzNwATE.html

SPRING CLOUD INTO PRODUCTION

THANK YOU

▸ https://github.com/ziftytodd

▸ todd@zifty.com

▸ @ziftytodd

▸ www.zifty.com