Slide 1

Slide 1 text

S C A L I N G 
 W I T H Josh Long @starbuxman jlong@pivotal.io github.com/joshlong (⻰龙之春) S P R I N G

Slide 2

Slide 2 text

Spring Developer Advocate @Starbuxman Josh Long (⻰龙之春) @starbuxman jlong@pivotal.io | Jean Claude van Damme! Java mascot Duke some thing’s I’ve authored...

Slide 3

Slide 3 text

@Starbuxman

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

STATELESS APPS
 SCALE

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

WHAT IF I HAVE SOME STATE?

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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 …

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

C A P & N O S Q L

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

choose the best store for the job @Starbuxman

Slide 27

Slide 27 text

NoSQL @Starbuxman

Slide 28

Slide 28 text

S P R I N G D ATA 
 R E P O S I TO R I E S

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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)

Slide 32

Slide 32 text

M O N G O D B

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

R E D I S

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

C O U C H B A S E

Slide 40

Slide 40 text

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 ""; } ! }

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

N E O 4 J

Slide 43

Slide 43 text

complexity vs performance @Starbuxman

Slide 44

Slide 44 text

who’s using Neo4j? @Starbuxman

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

Recommenda)ons @Starbuxman

Slide 47

Slide 47 text

Graph Search! @Starbuxman

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

What the Search Looks Like: @Starbuxman

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

H A D O O P

Slide 52

Slide 52 text

spring for Surviving the Big Data Wild-West with
 Spring for Hadoop @Starbuxman

Slide 53

Slide 53 text

S P R I N G X D

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

micro- vs. monolith… is not a new discussion @Starbuxman From: kt4@prism.gatech.EDU (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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

the elegant microservice @Starbuxman

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

W H Y B O O T

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

Standing on the Shoulders of Spring & @Starbuxman

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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 jlong@pivotal.io github.com/joshlong (⻰龙之春)