Top Banner
Architecting the Internet of Things @blimpyacht
115

MongoDB, Event Sourcing & Spark

Feb 11, 2017

Download

Software

Bryan Reinero
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: MongoDB, Event Sourcing & Spark

Architecting theInternet of Things@blimpyacht

Page 2: MongoDB, Event Sourcing & Spark
Page 3: MongoDB, Event Sourcing & Spark
Page 4: MongoDB, Event Sourcing & Spark
Page 5: MongoDB, Event Sourcing & Spark

5

Page 6: MongoDB, Event Sourcing & Spark

Event Sourcing

Page 7: MongoDB, Event Sourcing & Spark

Event SourcingTHE BEST, UBIQUITOUS PATTERN

YOU’VE NEVER HEARD OF

Page 8: MongoDB, Event Sourcing & Spark
Page 9: MongoDB, Event Sourcing & Spark

User: ABalance: 427

User: BBalance: 550

Page 10: MongoDB, Event Sourcing & Spark

User: ABalance: 427

User: BBalance: 550

Page 11: MongoDB, Event Sourcing & Spark

User: ABalance: 427

User: BBalance: 550

+5-5

Page 12: MongoDB, Event Sourcing & Spark

Event Sourcing

State

Page 13: MongoDB, Event Sourcing & Spark

+4-2+5+7-4+9-3-6+2+1+1-5 t(12) = 9

Event Sourcing

Page 14: MongoDB, Event Sourcing & Spark

+4-2+5+7-4+9-3-6+2+1+1-5

t(5) = 10

Event Sourcing

Page 15: MongoDB, Event Sourcing & Spark

+4-2+5+7-4+9-3-6+2+1+1-5

t(9) = 12

Event Sourcing

Page 16: MongoDB, Event Sourcing & Spark

+4-2+5+7-4+9-3-6+2+1+1-5

Event Sourcing

a = f ’(x)

Page 17: MongoDB, Event Sourcing & Spark

+4-2+5+7-4+9-3-6+2+1+1-5

Event Sourcing

+5-4+5

Page 18: MongoDB, Event Sourcing & Spark
Page 19: MongoDB, Event Sourcing & Spark

Res Gestae Divi Augusti

Page 20: MongoDB, Event Sourcing & Spark
Page 21: MongoDB, Event Sourcing & Spark
Page 22: MongoDB, Event Sourcing & Spark
Page 23: MongoDB, Event Sourcing & Spark
Page 24: MongoDB, Event Sourcing & Spark

2ndaryPrimary

Page 25: MongoDB, Event Sourcing & Spark

2ndaryPrimary

Page 26: MongoDB, Event Sourcing & Spark

2ndaryPrimary

Page 27: MongoDB, Event Sourcing & Spark

+4-2+5+7-4+9-3-6+2+1+1-5

Event Sourcing

Page 28: MongoDB, Event Sourcing & Spark

+4-2+5+7-4+9-3-6+2+1+1-5

t(4) = 14

Event Sourcing

t(8) = 10

t(12) = 9

Page 29: MongoDB, Event Sourcing & Spark

+4-2+5+7-4+9-3-6+2+1+1-5

t(4) = 14

Event Sourcing

t(8) = 10

t(12) = 9

t’(4) = -2

t’(8) = -17

t’(12) = -22

Page 30: MongoDB, Event Sourcing & Spark
Page 31: MongoDB, Event Sourcing & Spark

{ _id: {

ts: 1213084687000, taxi: "abboip" }, loc: {

geometry: [ -122.39488, 37.75134

] }, fare: 0, ts: ISODate("2008-06-10T07:58:07Z")}

Page 32: MongoDB, Event Sourcing & Spark
Page 33: MongoDB, Event Sourcing & Spark

{ _id: ObjectId("56a4215a46778b69e08ff8ff"), taxi: "abboip", start: ISODate("2008-05-17T14:51:10Z"), route: { type: "LineString", coordinates: [ [ -122.39724, 37.74977 ], [ -122.40619, 37.74896 ], [ -122.41335, 37.74831 ], [ -122.414, 37.75157 ], [ -122.41438, 37.75552 ]

] }, end: ISODate("2008-05-17T14:55:58Z")}

Page 34: MongoDB, Event Sourcing & Spark
Page 35: MongoDB, Event Sourcing & Spark

Data Modeling Domain EventsDomain Objects

Page 36: MongoDB, Event Sourcing & Spark
Page 37: MongoDB, Event Sourcing & Spark

Accounts Payable

Page 38: MongoDB, Event Sourcing & Spark

Accounts Payable

Accounts Receivable

Page 39: MongoDB, Event Sourcing & Spark

Accounts Payable

Accounts Receivable

Journal

Page 40: MongoDB, Event Sourcing & Spark

Accounts Payable

Accounts Receivable

Journal

Ledger

Page 41: MongoDB, Event Sourcing & Spark

Command QueryResponsibility

Segregation

Page 42: MongoDB, Event Sourcing & Spark

CQRS

Page 43: MongoDB, Event Sourcing & Spark

CRUD vs. CQRS

CRUD

Page 44: MongoDB, Event Sourcing & Spark

CRUD vs. CQRS

WRITE

READ

Page 45: MongoDB, Event Sourcing & Spark

CRUD vs. CQRS

Page 46: MongoDB, Event Sourcing & Spark

CRUD equals CQRS

Page 47: MongoDB, Event Sourcing & Spark

WRITE

READ

READ

CRUD vs. CQRS

Page 48: MongoDB, Event Sourcing & Spark

WRITE

READ

Variant Read Models: VIEWS

READREADREADREAD

Page 49: MongoDB, Event Sourcing & Spark

WRITE

READ

Primary

READ

CRUD vs. CQRS

Page 50: MongoDB, Event Sourcing & Spark

CRUD vs. CQRS

WRITE

READ

READ

Primary

2ndary

2ndary

Page 51: MongoDB, Event Sourcing & Spark

Where it Gets Tricky

Page 52: MongoDB, Event Sourcing & Spark

CRUD vs. CQRS

WRITE

READ

READ

Primary

2ndary

2ndary

Page 53: MongoDB, Event Sourcing & Spark

CRUD vs. CQRS

WRITE

READ

READ

Primary

2ndary

2ndary

Page 54: MongoDB, Event Sourcing & Spark

Consistent Replay+4-2+5+7-4+9-3-6+2+1+1-5

t(5) = 10 Exchange Rate Server

10 / 0.88 = 8.82€

Page 55: MongoDB, Event Sourcing & Spark

Consistent Replay+4-2+5+7-4+9-3-6+2+1+1-5

t(5) = 10 Exchange Rate Server

10 / 0.87 = 8.70€

Page 56: MongoDB, Event Sourcing & Spark

+4-2+5+7-4

+9-3-6+2+1+1-5

0.88 Exchange Rate Server

Consistent Replay

Page 57: MongoDB, Event Sourcing & Spark

Where it Gets Trickier Still

Page 58: MongoDB, Event Sourcing & Spark
Page 59: MongoDB, Event Sourcing & Spark
Page 60: MongoDB, Event Sourcing & Spark
Page 61: MongoDB, Event Sourcing & Spark
Page 62: MongoDB, Event Sourcing & Spark
Page 63: MongoDB, Event Sourcing & Spark

External Updates+4-2+5+7-4+9-3-6+2+1+1-5

Notification

Subscriber

Page 64: MongoDB, Event Sourcing & Spark
Page 65: MongoDB, Event Sourcing & Spark
Page 66: MongoDB, Event Sourcing & Spark

External Updates+4-2+5+7-4+9-3-6+2+1+1-5

Notification

Subscriber

Page 67: MongoDB, Event Sourcing & Spark

Gaining Insight

Page 68: MongoDB, Event Sourcing & Spark
Page 69: MongoDB, Event Sourcing & Spark
Page 70: MongoDB, Event Sourcing & Spark
Page 71: MongoDB, Event Sourcing & Spark
Page 72: MongoDB, Event Sourcing & Spark
Page 73: MongoDB, Event Sourcing & Spark

MongoDB + Spark

Page 74: MongoDB, Event Sourcing & Spark

Level Setting

Page 75: MongoDB, Event Sourcing & Spark
Page 76: MongoDB, Event Sourcing & Spark
Page 77: MongoDB, Event Sourcing & Spark
Page 78: MongoDB, Event Sourcing & Spark

TROUGH OF DISILLUSIONMENT

Page 79: MongoDB, Event Sourcing & Spark

Interactive ShellEasy (-er)Caching

Page 80: MongoDB, Event Sourcing & Spark

HDFS

Distributed Data

Page 81: MongoDB, Event Sourcing & Spark

HDFSYARN

Hive

Pig

Domain Specific Languages

MapReduce

Page 82: MongoDB, Event Sourcing & Spark

Spark Stand Alone

YARN

Mesos

HDFS

Distributed Resources

Page 83: MongoDB, Event Sourcing & Spark

YARN

SparkMesos

HDFS

Spark Stand Alone

Hadoop

Distributed Processing

Page 84: MongoDB, Event Sourcing & Spark

YARN

SparkMesos

Hive

Pig

HDFS

Hadoop

Spark Stand Alone

Domain Specific Languages

Page 85: MongoDB, Event Sourcing & Spark

YARN

SparkMesos

Hive

Pig

SparkSQL

Spark Shell

SparkStreaming

HDFS

Spark Stand Alone

Hadoop

Page 86: MongoDB, Event Sourcing & Spark

YARN

SparkMesos

Hive

Pig

SparkSQL

Spark Shell

SparkStreaming

HDFS

Spark Stand Alone

Hadoop

Page 87: MongoDB, Event Sourcing & Spark

YARN

SparkMesos

Hive

Pig

SparkSQL

Spark Shell

SparkStreaming

HDFS

Spark Stand Alone

Hadoop

Page 88: MongoDB, Event Sourcing & Spark

YARN

SparkMesos

Hive

Pig

SparkSQL

Spark Shell

SparkStreaming

Spark Stand Alone

Hadoop

Page 89: MongoDB, Event Sourcing & Spark

Stand AloneYARN

SparkMesos

Hive

Pig

SparkSQL

SparkShell

SparkStreaming

MapReduce

Page 90: MongoDB, Event Sourcing & Spark

Stand AloneYARN

SparkMesos

SparkSQL

SparkShell

SparkStreaming

Page 91: MongoDB, Event Sourcing & Spark

Stand AloneYARN

SparkMesos

SparkSQL

SparkShell

SparkStreaming

Page 92: MongoDB, Event Sourcing & Spark

executor

Worker Node

executor

Worker Node Master

Java Driver

Hadoop Connector

Driver Application

Page 93: MongoDB, Event Sourcing & Spark

Parallelization

Parellelize = x

Page 94: MongoDB, Event Sourcing & Spark

Transformations

Parellelize = x t(x) = x’ t(x’) = x’’

Page 95: MongoDB, Event Sourcing & Spark

Transformationsfilter( func )union( func )intersection( set )distinct( n )map( function )

Page 96: MongoDB, Event Sourcing & Spark

Action

f(x’’) = yParellelize = x t(x) = x’ t(x’) = x’’

Page 97: MongoDB, Event Sourcing & Spark

Actionscollect()count()first()take( n )reduce( function )

Page 98: MongoDB, Event Sourcing & Spark

Lineage

f(x’’) = yParellelize = x t(x) = x’ t(x’) = x’’

Page 99: MongoDB, Event Sourcing & Spark

Transform Transform ActionParallelize

Lineage

Page 100: MongoDB, Event Sourcing & Spark

Transform Transform ActionParallelize Transform Transform ActionParallelize Transform Transform ActionParallelize Transform Transform ActionParallelize Transform Transform ActionParallelize

Lineage

Page 101: MongoDB, Event Sourcing & Spark

Transform Transform ActionParallelize Transform Transform ActionParallelize Transform Transform ActionParallelize Transform Transform ActionParallelize Transform Transform ActionParallelize

Lineage

Page 102: MongoDB, Event Sourcing & Spark

Transform Transform ActionParallelize Transform Transform ActionParallelize Transform Transform ActionParallelize Transform Transform ActionParallelize Transform Transform ActionParallelize

Lineagehttp://www.blimpyacht.com/2016/02/03/a-visual-guide-to-the-spark-hadoop-ecosystem/

Page 103: MongoDB, Event Sourcing & Spark

https://github.com/mongodb/mongo-hadoop

Page 104: MongoDB, Event Sourcing & Spark

Spark ConfigurationConfiguration conf = new Configuration();conf.set(

"mongo.job.input.format", "com.mongodb.hadoop.MongoInputFormat”);conf.set(

"mongo.input.uri", "mongodb://localhost:27017/db.collection”);

Page 105: MongoDB, Event Sourcing & Spark

Spark ContextJavaPairRDD<Object, BSONObject> documents = context.newAPIHadoopRDD( conf,

MongoInputFormat.class,Object.class,BSONObject.class

);

Page 106: MongoDB, Event Sourcing & Spark

Spark Submit

/usr/local/spark-1.5.1/bin/spark-submit \ --class com.mongodb.spark.examples.DataframeExample \ --master local Examples-1.0-SNAPSHOT.jar

Page 107: MongoDB, Event Sourcing & Spark

Stand AloneYAR

N

SparkMesos

SparkSQL

SparkShell

SparkStreaming

Page 108: MongoDB, Event Sourcing & Spark

JavaRDD<Message> messages = documents.map (

new Function<Tuple2<Object, BSONObject>, Message>() {

public Message call(Tuple2<Object, BSONObject> tuple) { BSONObject header = (BSONObject)tuple._2.get("headers");

Message m = new Message(); m.setTo( (String) header.get("To") ); m.setX_From( (String) header.get("From") ); m.setMessage_ID( (String) header.get( "Message-ID" ) ); m.setBody( (String) tuple._2.get( "body" ) );

return m; } });

Page 109: MongoDB, Event Sourcing & Spark
Page 110: MongoDB, Event Sourcing & Spark
Page 111: MongoDB, Event Sourcing & Spark

THE FUTUREAND

BEYOND THE INFINITE

Page 112: MongoDB, Event Sourcing & Spark

Spark Connector

Page 113: MongoDB, Event Sourcing & Spark

Aggregation Filters$match | $project | $group

Page 114: MongoDB, Event Sourcing & Spark

Data Locality mongos

Page 115: MongoDB, Event Sourcing & Spark

THANKS!@blimpyacht