Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scaling with Spring & Cloud Foundry

Josh Long
October 10, 2014

Scaling with Spring & Cloud Foundry

this talk looks at how to scale applications. It looks at horizontal duplication, data partitioning and microservices, all set against the backdrop of Spring Integration, Spring AMQP, Spring Session, Spring Data, Spring MVC, Spring Cloud and the Netflix OSS stack.

Josh Long

October 10, 2014

More Decks by Josh Long

Other Decks in Technology


  1. S C A L I N G 
 W I

    T H Josh Long @starbuxman [email protected] github.com/joshlong (⻰龙之春) S P R I N G
  2. Spring Developer Advocate @Starbuxman Josh Long (⻰龙之春) @starbuxman [email protected] |

    Jean Claude van Damme! Java mascot Duke some thing’s I’ve authored...

    code will be open sourced. W H Y S C A L E ?
  4. Moore’s Law no longer works @Starbuxman § processing can’t scale

    up § concurrent, horizontal architectures are easier to scale § “process”-style concurrency is easy to scale still Moore's law is the observation that, over the history of computing hardware, the number of transistors in a dense integrated circuit doubles approximately every two years. The law is named after Gordon E. Moore, co-founder of the Intel Corporation, who described the trend in his 1965 paper.! ! http://en.wikipedia.org/wiki/Moore's_law
  5. systems are increasingly complex @Starbuxman § a complex system today

    has a lot of moving parts § security § multiple clients (iOS, Android, Windows Mobile, etc.) § multiple (business) domains § integration between systems § requires more people working on the same problem
  6. mobile More than 
 1.5 MILLION activations daily * @Starbuxman

    * http://www.androidcentral.com/larry-page-15-million-android-devices-activated-every-day
  7. social: a connected world in 60 seconds @Starbuxman 3125 photos

    uploaded 7630 messages sent 7610 searches 2MM videos viewed 2000 checkins 175k tweets 1090 visitors 700k messages sent * source: visual.ly/60-seconds-social-media
  8. the internet of things @Starbuxman “In five years, by 2018,

    Earth will be home to 7.6 billion people, says the United Nations. By contrast, some 25 billion devices will be connected by 2015, and 50 billion by 2020, says Cisco.”! ! http://www.businessinsider.com/what-you-need-to-know-about-the- internet-of-things-2013-3?op=1#ixzz3FxCafwWe § IPv6 gives us more addresses § devices are getting smaller, more ubiquitous § “devices” include homes appliances (refrigerators, washers, coffee machines, dryers), roads, air pollution monitors, (human) body monitors, etc

    code will be open sourced. X - A X I S H O R I Z O N TA L D U P L I C AT I O N
  10. no state and lots of gain @Starbuxman § obvious: no

    state means no sharing § no sharing means that applications can be scaled horizontally easily § requires very little: § HTTP load balancers are ubiquitous. § message queues (like RabbitMQ) make effective load balancers
  11. D E M O R A B B I T

    M Q P I N G P O N G
  12. http sessions? @Starbuxman § Spring Session § useful in a

    PaaS § useful when you need state § useful when you need durable, replicated state § pluggable: Redis out-of-the-box, but feel free to bring your own
  13. D E M O R E D I S -

    B A C K E D H T T P S E S S I O N S
  14. PAAS: 
 P L AT F O R M -

    A S - A - S E RV I C E
  15. why PaaS? @Starbuxman Imagine if architects had to be the

    janitor for every building they designed. This is how the development team felt prior to moving to Windows Azure. Duncan Mackenzie Nov 07, 2011 http://www.infoq.com/articles/Channel-9-Azure “ ”
  16. The Impact of the Cloud @Starbuxman § Spring Boot makes

    it dead simple to stand up services.
 (Where do they live? Who runs them?) § Things get Distributed REALLY quickly! CF provides a way to simplify ! ! § Manifests are are the ultimate installer. 
 (cf push an entire distributed system!) § Spring Cloud PaaS connectors simplify service-consumption > cf push hystrix.jar > cf push …
  17. D E M O S I M P L E

    S C A L I N G O N T H E C L O U D

    code will be open sourced. Z - A X I S D ATA PA RT I T I O N I N G
  19. Brewer’s Conjecture (CAP) @Starbuxman Many datastores provide some of the

    following three characteristics: ! ! § Consistency ! § Availability ! § Partitionability 
 ! clarification #1: in a system with no network partitions (such as a single- node RDBMS), then there's no need to sacrifice C & A.! 
 clarification #2: availability is a continuous value: 0-100%. there are many levels of consistency, and even partitions have nuances, including disagreement within the system about whether a partition exists.!
  20. S P R I N G D ATA 

    E P O S I TO R I E S
  21. How it Works in Rails @Starbuxman class Car < ActiveRecord

    end car = Car.new cars = car.find_cars_by_id(232) 
 # where did this method come from? # and then magic happens
  22. Using Spring Data Repositories @Starbuxman •Spring Data Neo4J @EnableNeo4jRepositories •Spring

    Data JPA @EnableJpaRepositories •Spring Data MongoDB @EnableMongoRepositories •Spring Data GemFire @EnableGemfireRepositories @Configuration @EnableTransactionManagement @ComponentScan @EnableJpaRepositories( basePackageClasses = BlogRepository.class) public class ServiceConfiguration { ! @Bean public DataSource dataSource(){ .. } @Bean public PlatformTransactionManager transactionManager(){ .. } }
  23. Custom Repository @Starbuxman Keyword Sample Resulting MongoDB Query * GreaterThan

    findByAgeGreaterThan(int age) {"age" : {"$gt" : age}} LessThan findByAgeLessThan(int age) {"age" : {"$lt" : age}} Between findByAgeBetween(int from, int to) {"age" : {"$gt" : from, "$lt" : to}} NotNull findByFirstnameNotNull() {”firstname" : {"$ne" : null}} Null findByFirstnameNull() {”firstname" : null} Like findByFirstnameLike(String name) "firstname" : firstname} (regex)
  24. who’s using MongoDB? @Starbuxman § Mailbox.app: https://tech.dropbox.com/2013/09/scaling-mongodb-at-mailbox/ § eHarmony: https://www.mongodb.com/presentations/big-dating-eharmony-0?

    _ga=1.259505294.567221685.1413121358 § Expedia: https://www.mongodb.com/presentations/building-expedia %E2%80%99s-travel-graph-using-mongodb? _ga=1.26276665.567221685.1413121358
  25. D E M O M O N G O D

    B G I S & 
  26. Spring Data Redis @Starbuxman § key/value store § data structures

    § sets § queues § lists § maps § CacheManager implementation § memcached client
  27. who’s using Redis? @Starbuxman § Twitter: http://www.infoq.com/presentations/Real-Time-Delivery-Twitter § Sina Weibo

    http://www.xdata.me/?p=353 § GitHub https://github.com/blog/530-how-we-made-github-fast § Snapchat https://twitter.com/robustcloud/status/448503100056535040 § Pinterest http://engineering.pinterest.com/post/55272557617/building-a-follower- model-from-scratch
  28. Spring Data Couchbase @Starbuxman § keyed document access § sort

    of like a mix of Redis and MongoDB § horizontally scalable ! @Configuration @EnableCouchbaseRepositories public class Application 
 extends AbstractCouchbaseConfiguration { ! @Override protected List<String> bootstrapHosts() { return Arrays.asList( “" ); } ! @Override protected String getBucketName() { return "default"; } ! @Override protected String getBucketPassword() { return ""; } ! }
  29. the evolution of search Pre-1999 WWW Indexing Atomic Data 1999

    - 2012 Google Invents PageRank Simple Connected Data 2012-? Google Launches the
 Knowledge Graph Rich Connected Data @Starbuxman
  30. What the Cypher Query Looks Like: @Starbuxman MATCH (person:Person)-[:IS_FRIEND_OF]->(friend), (friend)-[:LIKES]->(restaurant),

    (restaurant)-[:LOCATED_IN]->(loc:Location), (restaurant)-[:SERVES]->(type:Cuisine) ! WHERE person.name = 'Philip' AND loc.location='New York' AND type.cuisine='Sushi' ! RETURN restaurant.name * Cypher query language example http://maxdemarzi.com/?s=facebook
  31. D E M O N E O 4 J T

    W I T T E R
  32. stream processing, data ingestion & integration But How Do You

    Process Data Realtime? @metamarkets founder Michael E. Driscoll: @Starbuxman
  33. D E M O S P R I N G

    X D A N D P I V O TA L H D

    code will be open sourced. Y- A X I S B O U N D E D C O N T E X T S
  35. micro- vs. monolith… is not a new discussion @Starbuxman From:

    [email protected] (Ken Thompson) Subject: Re: LINUX is obsolete Date: 3 Feb 92 23:07:54 GMT Organization: Georgia Institute of Technology I would generally agree that microkernels are probably the wave of the future. However, it is in my opinion easier to implement a monolithic kernel. It is also easier for it to turn into a mess in a hurry as it is modified. Regards, Ken
  36. boardroom agility pushes tech agility @Starbuxman § boardroom agility manifest

    in technology: • 2-pizza box teams are a result of eschewing organizational norms ! § easier to scale (in development teams, and at runtime) ! § shorter iterations: • small services > 
 continuous integration > 
 shorter release cycles > 
 deployment automation
  37. problems with microservices @Starbuxman § hard to deploy (devops!) §

    hard to tease into separate deployable modules (Boot!) § lots of moving parts introduces complexity (PaaS & Spring Cloud!)
  38. harder to tease into separate microservices? …No. @Starbuxman import org.springframework.boot.SpringApplication;

    import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.web.bind.annotation.* ! // assumes org.springframework.boot:spring-boot-starter-web on CLASSPATH @Configuration @RestController @EnableAutoConfiguration public class GreetingsController { ! @RequestMapping("/hi/{name}") String hello(@PathVariable String name) { return "Hello, " + name + "!"; } ! public static void main(String[] args) { SpringApplication.run(GreetingsController.class, args); } }
  39. managing many processes with a PaaS @Starbuxman § services are

    explicit about what they bundle § services are attached resources (locally or remote, who cares) § configuration is external § scaling is easy § isolation is provided at the process level
  40. emergent patterns of microservices @Starbuxman § distributed / versioned configuration

    § service registration + discovery § client-side routing, service-to-service calls § load-balancing § minimizing failure cascades § proxies
  41. R E F R E S H - A B

    L E C O N F I G U R AT I O N
  42. S E RV I C E R E G I

    S T R AT I O N & D I S C O V E RY W I T H E U R E K A http://techblog.netflix.com/2012/09/eureka.html
  43. M A N A G I N G FA I

    L U R E S W I T H H Y S T R I X http://techblog.netflix.com/2012/11/hystrix.html
  44. D Y N A M I C R O U

    T I N G W I T H Z U U L http://techblog.netflix.com/2012/11/hystrix.html
  45. Bookmark.. @Starbuxman § The Netflix Techblog http://techblog.netflix.com § Fred Georges

    on Programmer Anarchy 
 http://www.infoq.com/news/2012/02/programmer-anarchy § Matt Stine’s CF + Microservices: a Mutualistic Symbiotic Relationship 
 http://www.youtube.com/watch?v=RGZefc92tZs § Martin Fowler’s article - http://martinfowler.com/articles/microservices.html
  46. Bookmark.. @Starbuxman § Former Netflix DevOps Guru Adrian Cockroft on

    DevOps + MS
 http://www.infoq.com/interviews/adrian-cockcroft-microservices-devops § Bootiful Applications with Spring Boot
 http://http://www.youtube.com/watch?v=eCos5VTtZoI § Chris Richardson’s http://microservices.io site and his 
 Decomposing Applications for Scalability talks § github.com/joshlong/scaling-software-talk