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
Tweet

More Decks by Josh Long

Other Decks in Technology

Transcript

  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

    View full-size slide

  2. Spring Developer Advocate
    @Starbuxman
    Josh Long (⻰龙之春)
    @starbuxman [email protected]
    |
    Jean Claude
    van Damme! Java mascot Duke some thing’s I’ve authored...

    View full-size slide

  3. BUILDING ADAPTIVE APPLICATIONS IS HARD
    built on Cloud Foundry
    !
    code will be open sourced.
    W H Y S C A L E ?

    View full-size slide

  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

    View full-size slide

  5. data @Starbuxman
    44000%
    larger in 2020 than 2009
    data production is expected to be
    :

    View full-size slide

  6. 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

    View full-size slide

  7. mobile
    More than 

    1.5 MILLION
    activations
    daily *
    @Starbuxman
    * http://www.androidcentral.com/larry-page-15-million-android-devices-activated-every-day

    View full-size slide

  8. 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

    View full-size slide

  9. 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

    View full-size slide

  10. how to think about scale? @Starbuxman
    Chris Richardson (http://microservices.io/articles/scalecube.html) introduced me to this “scale cube” 

    from The Art of Scaling Software

    View full-size slide

  11. BUILDING ADAPTIVE APPLICATIONS IS HARD
    built on Cloud Foundry
    !
    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

    View full-size slide

  12. STATELESS APPS

    SCALE

    View full-size slide

  13. 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

    View full-size slide

  14. D E M O
    R A B B I T M Q P I N G P O N G

    View full-size slide

  15. WHAT IF I
    HAVE SOME STATE?

    View full-size slide

  16. 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

    View full-size slide

  17. 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

    View full-size slide

  18. PAAS: 

    P L AT F O R M - A S - A - S E RV I C E

    View full-size slide

  19. 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
    “ ”

    View full-size slide

  20. 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 …

    View full-size slide

  21. 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

    View full-size slide

  22. BUILDING ADAPTIVE APPLICATIONS IS HARD
    built on Cloud Foundry
    !
    code will be open sourced.
    Z - A X I S
    D ATA PA RT I T I O N I N G

    View full-size slide

  23. C A P & N O S Q L

    View full-size slide

  24. 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.!

    View full-size slide

  25. choose the best store for the job @Starbuxman

    View full-size slide

  26. NoSQL @Starbuxman

    View full-size slide

  27. S P R I N G D ATA 

    R E P O S I TO R I E S

    View full-size slide

  28. 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

    View full-size slide

  29. 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(){ .. }
    }

    View full-size slide

  30. 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)

    View full-size slide

  31. M O N G O D B

    View full-size slide

  32. Spring Data MongoDB @Starbuxman
    § GridFS integration
    § GIS integration
    § Document mapping

    View full-size slide

  33. 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

    View full-size slide

  34. D E M O
    M O N G O D B G I S & 

    FA C E B O O K P L A C E S

    View full-size slide

  35. Spring Data Redis @Starbuxman
    § key/value store
    § data structures
    § sets
    § queues
    § lists
    § maps
    § CacheManager implementation
    § memcached client

    View full-size slide

  36. 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

    View full-size slide

  37. C O U C H B A S E

    View full-size slide

  38. 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 bootstrapHosts() {
    return Arrays.asList( “127.0.0.1" );
    }
    !
    @Override
    protected String getBucketName() {
    return "default";
    }
    !
    @Override
    protected String getBucketPassword() {
    return "";
    }
    !
    }

    View full-size slide

  39. who’s using Couchbase? @Starbuxman
    § AOL: http://www.couchbase.com/ad_platforms
    § Playtika: http://www.couchbase.com/social-gaming

    View full-size slide

  40. complexity vs performance @Starbuxman

    View full-size slide

  41. who’s using Neo4j? @Starbuxman

    View full-size slide

  42. 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

    View full-size slide

  43. Recommenda)ons
    @Starbuxman

    View full-size slide

  44. Graph Search! @Starbuxman

    View full-size slide

  45. 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

    View full-size slide

  46. What the Search Looks Like: @Starbuxman

    View full-size slide

  47. D E M O
    N E O 4 J T W I T T E R

    View full-size slide

  48. spring for
    Surviving the Big Data
    Wild-West with

    Spring for Hadoop
    @Starbuxman

    View full-size slide

  49. S P R I N G X D

    View full-size slide

  50. stream processing, data ingestion & integration
    But How Do You Process Data Realtime?
    @metamarkets founder Michael E. Driscoll:
    @Starbuxman

    View full-size slide

  51. stream processing, data ingestion & integration @Starbuxman
    Introducing Spring XD
    sources
    sinks

    View full-size slide

  52. D E M O
    S P R I N G X D A N D P I V O TA L H D

    View full-size slide

  53. BUILDING ADAPTIVE APPLICATIONS IS HARD
    built on Cloud Foundry
    !
    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

    View full-size slide

  54. 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

    View full-size slide

  55. hold on a tick..
    …didn’t the monolith win?
    @Starbuxman

    View full-size slide

  56. so what’s so bad about a monolith? @Starbuxman
    (does your monolith drive you to drink?)

    View full-size slide

  57. 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

    View full-size slide

  58. the elegant microservice @Starbuxman

    View full-size slide

  59. 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!)

    View full-size slide

  60. W H Y B O O T

    View full-size slide

  61. 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);
    }
    }

    View full-size slide

  62. 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

    View full-size slide

  63. emergent patterns of microservices @Starbuxman
    § distributed / versioned configuration
    § service registration + discovery
    § client-side routing, service-to-service calls
    § load-balancing
    § minimizing failure cascades
    § proxies

    View full-size slide

  64. Standing on the Shoulders of
    Spring &
    @Starbuxman

    View full-size slide

  65. C O N F I G - S E RV E R

    View full-size slide

  66. R E F R E S H - A B L E
    C O N F I G U R AT I O N

    View full-size slide

  67. 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

    View full-size slide

  68. 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

    View full-size slide

  69. 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

    View full-size slide

  70. 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

    View full-size slide

  71. 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

    View full-size slide

  72. References
    spring.io/guides
    github.com/spring-cloud/
    github.com/spring-cloud-samples/
    github.com/joshlong/spring-doge
    github.com/joshlong/spring-doge-microservice
    docs.spring.io/spring-boot/
    !
    Questions?
    Josh Long
    @starbuxman
    [email protected]
    github.com/joshlong
    (⻰龙之春)

    View full-size slide