spring cloud into production
TRANSCRIPT
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
[email protected] @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
▸ @ziftytodd
▸ www.zifty.com