Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Flying to clouds - can it be easy? Cloud Native Applications

231 views

Published on

Nowadays "cloud" and "microservice" terms are used all the time, even overused. Does any system must be the "microservices" deployed in the "cloud"? Definitely not! However once you see that your system may benefit from that architecture, the next question is how to get there - how to fly to the clouds?
Spring was always about simplifying the complicated aspects of your enterprise system. Netflix went to microservice architecture long before this term even was created. Both are very much contributed to open source software. How can you benefit from joint forces of the both?

Published in: Software
  • Be the first to comment

Flying to clouds - can it be easy? Cloud Native Applications

  1. 1. Jacek Bukowski GlobalLogic „Flying to clouds” – can it be easy?
  2. 2. Joint forces of Netflix and Spring Spring was always about simplifying the complicated aspects of your enterprise system. Netflix went to microservice architecture long before this term even was created. Both are very much contributed to open source software. How can you benefit from joint forces of the both?
  3. 3. CLOUD AND CLOUD NATIVE APPLICATION
  4. 4. Cloud „any computing environment in which computing, networking, and storage resources can be provisioned and released elastically in an on- demand, self-service manner” from „Migrating to Cloud Native Applications Architectures” by Matt Stine
  5. 5. Target cloud Service model Cloud Provider SaaSSaaS PaaSPaaS IaaSIaaS MBaaSMBaaS EaaS/XaaS/*aaSEaaS/XaaS/*aaS
  6. 6. Technology stack Language Persistence
  7. 7. Cloud Native Style of application development •Twelve-Factor Applications – http://12factor.net •Microservices •Self-Service Agile Infrastructure •API-Based Collaboration •Antifragility
  8. 8. NETFLIX
  9. 9. Netflix – some facts •Moved away of monolithic architecture before microservices where named (started in 2009, ended early 2016) •30% of the Internet traffic •500+ microservices •2+ billion API gateway requests daily •Each API call requires avarage six calls to backend services •Over 800 different client devices •Open sourced much of their tools and services
  10. 10. Netflix Open Source Software Netflix OSS Center: •Big Data •Build and Delivery Tools •Common Runtime Services & Libraries •Content Encoding •Data Persistence •Insight, Reliability and Performance •Security •User Interface http://netflix.github.io
  11. 11. Netflix OSS - Runtime and Libraries •Eureka – registry/service discovery •Archaius – distributed configuration •Ribbon – inter process and service communication •Hystrix – reliability of calls and fault tolerance •Karyon and Governator – containers •Prana – support for non-JVM runtimes •Zuul – dynamic routing, monitoring, resiliency and security, used to handle front end requests •Fenzo – scheduler for Apache Mesos
  12. 12. SPRING CLOUD
  13. 13. Spring Cloud Facilitates the Cloud Native styles Common features required by all the components in a distributed system •Distributed/versioned configuration •Service registration and discovery •Routing •Service-to-service calls •Load balancing •Circuit Breakers •Global locks •Leadership election and cluster state •Distributed messaging
  14. 14. Spring Cloud Spring BootSpring Boot SpringSpring Spring Cloud Context Spring Cloud Context Spring Cloud CommonsSpring Cloud Commons Spring Cloud NetfixSpring Cloud Netfix Spring Cloud ConsulSpring Cloud ConsulSpring Cloud ConfigSpring Cloud Config Spring Cloud for Amazon Web Services Spring Cloud for Amazon Web Services Spring Cloud BusSpring Cloud Bus Spring Cloud for Cloud Foundry Spring Cloud for Cloud Foundry Spring Cloud ...Spring Cloud ...
  15. 15. Spring Boot Context •Parent of Main Application Context •Used to load properties from external sources •Out of the box loads properties form Config Server •Can be configured to do anything you want •Handling environment changes • Re-bind @ConfigurationProperties • Set log levels for logging.level.* • @RefreshScope EnvironmentEnvironment Main Applicatin Context Main Applicatin Context Bootstrap Context Bootstrap Context application.yml application- {profile}.yml application.yml application- {profile}.yml bootstrap.yml bootstrap- {profile}.yml bootstrap.yml bootstrap- {profile}.yml External properties (e.g. Config Server) External properties (e.g. Config Server) HigherprecedenceHigherprecedence
  16. 16. Spring Cloud Config Config Server •HTTP, resource-based API for external configuration •JSON/YML/properties resources •Git backend (default) •Integrates with Spring Security Config Client •Config-first bootstrap •Discovery-first bootstrap •Fail-fast option •Like reading local application*.yml family with extra dimention „label” /{application}/{profile}/{label} ${spring.application.name} ${spring.profiles.active} master spring.cloud.config.[name|env|label] /{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties
  17. 17. Spring Cloud Commons Common Abstractions •Service Discovery •Load Balancing •Circuit Breakers Implementations: •Spring Cloud Netflix •Spring Cloud Consule
  18. 18. Spring Cloud Netflix Enable common patterns with just annotations: •Discovery: Eureka •Circuit Breaker: Hystrix •Client Side Load Balancer: Ribbon •Declarative REST Client: Feign •Router and Filter: Zuul •External Configuration: Archaius
  19. 19. Discovery: Eureka Eureka Server •Run by @EnableEurekaServer •By default is also a client, so needs a peer •Optional standalone mode •Keep registration in memory Eureka Client •Enable by @EnableDiscoveryClient •Sending heartbeats to Eureka server •Optionally send health check status •Special virutal URL: http://users/... •Discovery clients: • Native EurekaClient • Spring Cloud DiscoveryClient • Feign client • Spring RestTemplate
  20. 20. Circuit Breaker: Hystrix • Proxy the beans enabling circuit breaker • Enabled by annotation on the method @HystrixCommand(fallbackMethod=„”) public Article getArticle(String id) { // call external system } • Fallback can be provided • Hystrix metrics stream: /hystrix.stream • Hystrix Dashboard • Turbine combining hystrix streams
  21. 21. Client side load balancer: Ribbon • Used by default in @FeignClient • Ribbon API can be used directly • Configuring by <client>.ribbon.listO fServers • Can get „listOfServers” from Eureka, if available
  22. 22. Feign Client • Declarative Web Service Client • Create interface and annotate it • Feign annotations, JAX-RS annotations, Spring MVC (added by Spring Cloud) @FeignClient(name = "articles-service") public interface ArticlesClient { @RequestMapping(value = "/articles/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public Article getArticle(@PathVariable("id") String id); } • In Spring Cloud uses Eureka, Ribbon and Hystrix
  23. 23. DEMO
  24. 24. Registry Server (Eureka) Registry Server (Eureka) Config Server Config Server News ServiceNews Service Articles ServiceArticles Service ClientClient GitGit YAML files get properties – default number of articles find Articles Service Get article content Give me top news! • Load balanced • Protected with Circuit Breaker 1 class 1 class 6 classes 4 classes Let’s see
  25. 25. QUESTIONS
  26. 26. Links Demo code: https://github.com/buczyn/spring-cloud-netflix-demo
  27. 27. Thank you Jacek Bukowski @: jacek.bukowski@globallogic.com P: +48 728 869 133

×