The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

77
SCALING WITH Josh Long @starbuxman [email protected] github.com/joshlong (之春) SPRING

description

JAX London presentation 2014

Transcript of The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

Page 1: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 2: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

Spring Developer Advocate

@Starbuxman

Josh Long (⻰龙之春)

@starbuxman [email protected]|

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

Page 3: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

@Starbuxman

Page 4: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

BUILDING ADAPTIVE APPLICATIONS IS HARD

built on Cloud Foundry

code will be open sourced.

W H Y S C A L E ?

Page 5: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 6: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

data@Starbuxman

44000%larger in 2020 than 2009

data production is expected to be

:

Page 7: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 8: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

mobile

More than 1.5 MILLION activations daily *

@Starbuxman

* http://www.androidcentral.com/larry-page-15-million-android-devices-activated-every-day

Page 9: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 10: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 11: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 12: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

BUILDING ADAPTIVE APPLICATIONS IS HARD

built on Cloud Foundry

code will be open sourced.

X-AXIS H O R I Z O N TA L D U P L I C AT I O N

Page 13: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

STATELESS APPSSCALE

Page 14: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 15: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

DEMO R A B B I T M Q P I N G P O N G

Page 16: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

WHAT IF I HAVE SOME STATE?

Page 17: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 18: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

DEMO R E D I S - B A C K E D H T T P S E S S I O N S

Page 19: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 20: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

“ ”

Page 21: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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 …

Page 22: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 23: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

BUILDING ADAPTIVE APPLICATIONS IS HARD

built on Cloud Foundry

code will be open sourced.

Z - A X I S D ATA PA R T I T I O N I N G

Page 24: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

CAP & N O S Q L

Page 25: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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.

Page 26: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

choose the best store for the job@Starbuxman

Page 27: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

NoSQL@Starbuxman

Page 28: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 29: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

How it Works in Rails@Starbuxman

class Car < ActiveRecordend

car = Car.new cars = car.find_cars_by_id(232) # where did this method come from?

# and then magic happens

Page 30: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 31: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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)

Page 32: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

M O N G O D B

Page 33: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

Spring Data MongoDB@Starbuxman

§ GridFS integration

§ GIS integration

§ Document mapping

Page 34: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 35: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

DEMO M O N G O D B G I S & FA C E B O O K P L A C E S

Page 36: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

R E D I S

Page 37: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

Spring Data Redis@Starbuxman

§ key/value store

§ data structures § sets

§ queues

§ lists

§ maps

§ CacheManager implementation

§ memcached client

Page 38: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 39: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

C O U C H B A S E

Page 40: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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( “127.0.0.1" ); }

@Override protected String getBucketName() { return "default"; }

@Override protected String getBucketPassword() { return ""; }

}

Page 41: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

who’s using Couchbase?@Starbuxman

§ AOL: http://www.couchbase.com/ad_platforms

§ Playtika: http://www.couchbase.com/social-gaming

Page 42: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

N E O 4 J

Page 43: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

complexity vs performance@Starbuxman

Page 44: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

who’s using Neo4j?@Starbuxman

Page 45: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

the evolution of searchPre-1999

WWW Indexing

Atomic Data

1999 - 2012 Google Invents

PageRank

Simple Connected Data

2012-? Google Launches the

Knowledge Graph

Rich Connected Data

@Starbuxman

Page 46: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

Recommenda)ons@Starbuxman

Page 47: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

Graph Search! @Starbuxman

Page 48: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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 examplehttp://maxdemarzi.com/?s=facebook

Page 49: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

What the Search Looks Like:@Starbuxman

Page 50: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

DEMO N E O 4 J T W I T T E R

Page 51: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

H A D O O P

Page 52: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

spring for

Surviving the Big Data Wild-West with Spring for Hadoop

@Starbuxman

Page 53: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

S P R I N G X D

Page 54: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

stream processing, data ingestion & integration

But How Do You Process Data Realtime?@metamarkets founder Michael E. Driscoll:

@Starbuxman

Page 55: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

stream processing, data ingestion & integration@Starbuxman

Introducing Spring XD

sour

ces

sink

s

Page 56: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 57: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

see spring xd + hawq video

Page 58: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 59: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 60: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

hold on a tick..

…didn’t the monolith win?

@Starbuxman

Page 61: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

so what’s so bad about a monolith?@Starbuxman

(does your monolith drive you to drink?)

Page 62: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 63: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

the elegant microservice@Starbuxman

Page 64: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 65: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

W H Y B O O T

Page 66: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 67: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 68: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

emergent patterns of microservices@Starbuxman

§ distributed / versioned configuration

§ service registration + discovery

§ client-side routing, service-to-service calls

§ load-balancing

§ minimizing failure cascades

§ proxies

Page 69: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

Standing on the Shoulders of Spring &

@Starbuxman

Page 70: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 71: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 72: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

S E R V I C E R E G I S T R AT I O N & D I S C O V E R Y W I T H E U R E K A

http://techblog.netflix.com/2012/09/eureka.html

Page 73: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 74: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 75: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

Page 76: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

Bookmark..@Starbuxman

§ Former Netflix DevOps Guru Adrian Cockroft on DevOps + MShttp://www.infoq.com/interviews/adrian-cockcroft-microservices-devops

§ Bootiful Applications with Spring Boothttp://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

Page 77: The Economies of Scaling Software - Josh Long and Abdelmonaim Remani

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

(⻰龙之春)