Top Banner
Unless otherwise indicated, these slides are © 2016 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Using Docker, Neo4j, and Spring Cloud for Developing Microservices Kenny Bastani , Spring Developer Advocate, Pivotal @ kennybastani
57

Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Jan 23, 2017

Download

Technology

Docker, Inc.
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: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Unless otherwise indicated, these slides are © 2016 Pivotal Software, Inc. and licensed under aCreative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/

Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Kenny Bastani, Spring Developer Advocate, Pivotal @kennybastani

Page 2: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Speaker Intro - Kenny Bastani

2

Page 3: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Ranking Twitter ProfilesUsing PageRank

3 https://github.com/kbastani/spring-boot-graph-processing-example

Page 4: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

PageRank algorithm

4

Page 5: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

PageRank algorithm

5

Page 6: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example6

Page 7: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example7

Page 8: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example8

Page 9: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Tools we’ll be using

! Spring Boot

! Neo4j

! Apache Spark

! Docker

! RabbitMQ

9

Page 10: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Containerize all the things!

10

Page 11: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example11

Page 12: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example12

Page 13: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example13

Page 14: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example14

Page 15: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Connecting Neo4j and Apache Spark…to submit PageRank jobs

15 https://github.com/kbastani/spring-boot-graph-processing-example

Page 16: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Request new Apache Spark job

16

Algorithm TypeRelationship Type

Page 17: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Export Neo4j graph to HDFS

17

New Job Request

HDFS Path: /../../graph.csv

Job Type: pagerank

Page 18: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Encoding a graph as an edge list

18

edge list

G B

H B

I B

K B

E B

F B

J B

D B

G E

H E

I E

K E …

Page 19: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Import edge list to Apache Spark

19

Process Job Request

HDFS Path: /../../graph.csv

Job Type: pagerank

graph.csv

0 1

1 2

2 3

0 3

2 1 …

Page 20: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Apply results back to Neo4j

20

Completed Job

HDFS Path: /../../results.csv

Job Type: pagerank

results.csv

0 .56

1 .42

2 .14

3 .25 …

Page 21: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Graph processing platform

21

Algorithm TypeRelationship Type

Page 22: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

docker-compose.yml

! Demo

22

Page 23: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Building Microservices

23 https://github.com/kbastani/spring-boot-graph-processing-example

Page 24: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Building Microservices

24

Page 25: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

25 https://github.com/kbastani/spring-boot-graph-processing-example

Building Microservices

Page 26: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

26

Creating Spring Data Neo4j Repositories

https://github.com/kbastani/spring-boot-graph-processing-example

Page 27: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

What our application needs

! Repositories

• User repository (to manage and import users)

• Follows repository (to manage and import following relationships)

• Custom Cypher queries mapped to repository methods

! Domain model

• User — (our node entity)

• Follows — (our relationship entity)

! REST API

• Expose the resources of the domain as a REST API

27

Page 28: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Creating Spring Data Neo4j Repositories

28 https://github.com/kbastani/spring-boot-graph-processing-example

Page 29: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Creating Spring Data Neo4j Repositories

29 https://github.com/kbastani/spring-boot-graph-processing-example

Page 30: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Creating Spring Data Neo4j Repositories

30 https://github.com/kbastani/spring-boot-graph-processing-example

Page 31: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Creating Spring Data Neo4j Repositories

31 https://github.com/kbastani/spring-boot-graph-processing-example

Page 32: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Creating Spring Data Neo4j Repositories

32 https://github.com/kbastani/spring-boot-graph-processing-example

Page 33: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Creating Spring Data Neo4j Repositories

33 https://github.com/kbastani/spring-boot-graph-processing-example

Page 34: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Exposing repository APIs using Spring Data REST

34 https://github.com/kbastani/spring-boot-graph-processing-example

Page 35: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Exposing repository APIs using Spring Data REST

35 https://github.com/kbastani/spring-boot-graph-processing-example

Page 36: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Exposing repository APIs using Spring Data REST

36 https://github.com/kbastani/spring-boot-graph-processing-example

Page 37: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Connecting to the Twitter API

37 https://github.com/kbastani/spring-boot-graph-processing-example

Page 38: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

38 https://github.com/kbastani/spring-boot-graph-processing-example

Connecting to the Twitter API

Page 39: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Connecting to the Twitter API

39 https://github.com/kbastani/spring-boot-graph-processing-example

Page 40: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Connecting to the Twitter API

40 https://github.com/kbastani/spring-boot-graph-processing-example

We can override these properties as environment variables at runtime

Page 41: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

41 https://github.com/kbastani/spring-boot-graph-processing-example

Connecting to the Twitter API

Page 42: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

42 https://github.com/kbastani/spring-boot-graph-processing-example

Connecting to the Twitter API

Page 43: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Scheduling new PageRank jobs

43 https://github.com/kbastani/spring-boot-graph-processing-example

Page 44: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Scheduling PageRank jobs from Neo4j

44

Page 45: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Scheduling new PageRank jobs

45 https://github.com/kbastani/spring-boot-graph-processing-example

Page 46: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Ranking Dashboard

46 https://github.com/kbastani/spring-boot-graph-processing-example

Page 47: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

47 https://github.com/kbastani/spring-boot-graph-processing-example

Page 48: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Ranking dashboard

48 https://github.com/kbastani/spring-boot-graph-processing-example

Page 49: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

49 https://github.com/kbastani/spring-boot-graph-processing-example

Ranking dashboard

Page 50: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Adding static web content

50 https://github.com/kbastani/spring-boot-graph-processing-example

Page 51: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Ranking dashboard

51 https://github.com/kbastani/spring-boot-graph-processing-example

Page 52: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Ranking dashboard

52

Page 53: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Add seed profiles

53

Page 54: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Choose 3 seed profiles

54

Page 55: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

Creating Spring Data Neo4j Repositories

55 https://github.com/kbastani/spring-boot-graph-processing-example

Page 56: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example

Discover new users and update rankings

56

Page 57: Using Docker, Neo4j, and Spring Cloud for Developing Microservices

https://github.com/kbastani/spring-boot-graph-processing-example57

Learn More. Stay Connected.

! Twitter: @kennybastani

! Spring: spring.io/team/kbastani

! Blog: kennybastani.com

! GitHub: github.com/kbastani

Twitter: twitter.com/springcentral

YouTube: spring.io/video

LinkedIn: spring.io/linkedin

Google Plus: spring.io/gplus