SlideShare a Scribd company logo
1 of 43
Designingdistributed programs
with a Raspberry Pi Cluster
Arjan Lamers

© Copyright 2013. First8

slide

1
Introductie
•

Raspberry PI cluster
–
–
–
–
–

SnelgenoegvoorJava (JDK 7u40)
Makkelijkdraagbaar
Kleineexperimenten
Testen van echtehardware problemen
Langzaaaam….

© Copyright 2013. First8

slide

2
Introductie

•

Inzichtelijkmaken van gedistribueerdprogrammeren

•

Simpel, gedistribueerd en visueel

•

“Pigs in space”:
– Willekeuriggrotekaart
– Collision detection

© Copyright 2013. First8

slide

3
Introduction
•

Hazelcast
– Distributed implementation of Java Collection framework

•

LWJGL
– Lightweight Java Game Library for drawing

© Copyright 2013. First8

slide

4
Introduction

© Copyright 2013. First8

slide

5
Agenda
•
•
•
•
•

Collision detection
Partitionering
Schaalbaarheid
Beschikbaarheid
Inzichten

© Copyright 2013. First8

slide

6
Collision detection
•

In alle software toepassingenzijnermeerdereoplossingen met voor- en nadelen

© Copyright 2013. First8

slide

7
Collision detection: map based

boolean[][] map = newboolean[MAP_WIDTH][MAP_HEIGHT];
publicvoiddetectCollisions(List<Ship> ships) {
for(Ship s: ships) {
if(s.collidesWith(map)) {
s.bounce();
}
s.updateMap(map);
}
}

© Copyright 2013. First8

slide

8
Collision detection: object based
publicvoiddetectCollisions(List<Ship> ships) {
for (inti=0; i<ships.size(); i++) {
for (intj=i+1; j<ships.size(); j++) {
Ship a =ships.get(i);
Ship b =ships.get(j);
if (a.collidesWith(b)) {
a.bounce();
b.bounce();
}
}
}
}

© Copyright 2013. First8

slide

9
Collision detection
Tijdcomplexiteit

Geheugencomplexiteit

Map based

T = O (ships)

M = O(map^2 + ships)

Object based

T = O (ships^2)

M = O(ships)

Tijd

Data
© Copyright 2013. First8

slide

10
Collision detection: keuzes
•Groterekaarten of meerruimteschepen?
• Data serialisatie?

Keuze: Object based collision detection

© Copyright 2013. First8

slide

11
Agenda
•
•
•
•
•

Collision detection
Partitionering
Schaalbaarheid
Beschikbaarheid
Inzichten

© Copyright 2013. First8

slide

12
Meerdere servers
Efficient gebruikmaken van:

•
•
•

CPU
Geheugen
Netwerk

© Copyright 2013. First8

slide

13
Hoe maak je iets gedistribueerd?
•

Kopieerallesnaaralle machines
– Meer machines betekentalleenmeer CPU
– Kaart&ruimteschepengelimiteerd tot 1 raspberry pi
– Veelnetwerkverkeer

© Copyright 2013. First8

slide

14
Hoe maak je iets gedistribueerd?
•

Verdeel de data

© Copyright 2013. First8

slide

15
Data verdelen
•

Verdeelschepen over servers
– Simpel
– Dichtbijzijndeschepenkunnen op andere server staan

•

Verdeelstukkenkaart (tiles) over servers
– Voeltnatuurlijker
– Lokale collision detection is triviaal

© Copyright 2013. First8

slide

16
Data verdelen

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

Tiles verdeeld over servers

© Copyright 2013. First8

slide

17
Hazelcast distributed maps
•

Distributed Maps verdelen op basis van de key

•

Onze tiles hebben een Integer als key

class Tile {
inttileId;
Collection<Ship>ships;
}
HazelcastInstance instance = Hazelcast.newHazelcastInstance();
Map<Integer,Tile> tiles = instance.getMap("tiles");

© Copyright 2013. First8

slide

18
Lokale tiles
•

Elke server heeft een eigen set lokale tiles

HazelcastInstance instance = Hazelcast.newHazelcastInstance();
IMap<Integer,Tile> tiles = instance.getMap("tiles");
for(;;) {
Set<Integer> localKeySet = tiles.localKeySet();
for (int tileId : localKeySet) {
handleTile(tileId);
}
}

© Copyright 2013. First8

slide

19
Lokale tiles per server

No detection across borders
© Copyright 2013. First8

slide

20
Randgevallen
•

Collision detection op de randen van tiles
– Lokalekopie van externe tile:

Map<Integer, Tile>tiles = hzInstance.getMap(“tiles”);
Tile tile = tiles.get(externalTileId);
– Of aan de andere server overlaten:

FutureTask task = newDistributedTask (
newCollisionDetect(ships, externalTileId),

externalTileId);

ExecutorServiceexecutorService = hzInstance.getExecutorService();
executorService.execute(task);

© Copyright 2013. First8

slide

21
BASE: Basically Available, Soft state, Eventual consistency
•

CAP theorie:
– Consistency
– Availability
– Partition tolerance

•

Overgangtussen tiles
– Dubbelrenderen
– Verdwijnendeschepen

© Copyright 2013. First8

slide

22
Agenda
•
•
•
•
•

Collision detection
Partitionering
Schaalbaarheid
Beschikbaarheid
Inzichten

© Copyright 2013. First8

slide

23
Hoe schaalbaar is het?
•

# Raspberry Pi’s < # Tiles
– Nooit helemaal gelijk verdeeld

© Copyright 2013. First8

slide

24
Amdahl’s law (1967)

© Copyright 2013. First8

slide

25
Amdahl’s law

© Copyright 2013. First8

slide

26
Amdahl’s law

© Copyright 2013. First8

slide

27
Gustafson’s law (1988)

© Copyright 2013. First8

slide

28
Hoe schaalbaar is het?
•

Moeilijkevraag.

•

Meer data ->efficientergebruik
– Of andersom: meer pi’s alleenzinnigalsergenoeg data is

•

In plaats van complexiteit: (iso) efficiency

•

Wijzigenverhoudingen ->andere bottlenecks

© Copyright 2013. First8

slide

29
Agenda
•
•
•
•
•

Collision detection
Partitionering
Schaalbaarheid
Availability
Inzichten

© Copyright 2013. First8

slide

30
Availability
•

Bestandtegen hardware storingen

•

Kopieer data naar backup servers
– Bijvoorkeur in ander data centrum

© Copyright 2013. First8

slide

31
High availability in Hazelcast

Config config = new Config();
MapConfig tilesMapConfig = config.getMapConfig("tiles");
tilesMapConfig.setAsyncBackupCount(1);
tilesMapConfig.setBackupCount(0);

HazelcastInstance i= Hazelcast.newHazelcastInstance(config);
Map<Integer,Tile>tiles = i.getMap("tiles");

© Copyright 2013. First8

slide

32
High availability in Hazelcast: blauw en paarsfalen

© Copyright 2013. First8

slide

33
Availability
•

Test scenario’s zo dicht mogelijk bij de waarheid
– Een server die connecties weigert != Een server die niet antwoord

•

Echte hardware werkt het beste

© Copyright 2013. First8

slide

34
Availability: split brain
•

Meerdere data centre’s

© Copyright 2013. First8

slide

35
Availability: split brain
Groen / paars / geelaanonzekant van de split

© Copyright 2013. First8

slide

36
Availability
•

Split brain oplossen:
– Kieseenwerkelijkheid
of
– Merge

© Copyright 2013. First8

slide

37
Agenda
•
•
•
•
•

Collision detection
Partitionering
Schaalbaarheid
Beschikbaarheid
Inzichten

© Copyright 2013. First8

slide

38
Inzichten
•

Profile!

•

Te veelvariabelen:
– Grotere tiles
• Minderruimteschepen/ pixel
– Minder botsingen

• Minder tile verhuizingen

– Kaartverdelen in meer tiles
• Gelijkmatigereverdeling
• Minder CPU per tile beschikbaar

© Copyright 2013. First8

slide

39
Inzichten
•

Ontwerpen van gedistribueerdeprogramma’s is lastig

•

Denkna over data partitionering

•

Maakstrategieenconfigureerbaar

© Copyright 2013. First8

slide

40
Inzichten

•

Pi’s zijn prima omkleine tests meeuittevoeren

•

Pi’s zijnbijuitstekgeschiktvoortesten van verstoringen

© Copyright 2013. First8

slide

41
Vragen?

© Copyright 2013. First8

slide

42
Meer weten?
•

Komlangsbij de First8 stand

•

Download de software op: www.first8.nl

© Copyright 2013. First8

slide

43

More Related Content

More from NLJUG

Decoding the airspace above you with Java and $7 hardware - Bert Jan Schrijver
Decoding the airspace above you with Java and $7 hardware - Bert Jan SchrijverDecoding the airspace above you with Java and $7 hardware - Bert Jan Schrijver
Decoding the airspace above you with Java and $7 hardware - Bert Jan SchrijverNLJUG
 
Using Docker to Develop, Test and Run Maven Projects - Wouter Danes
Using Docker to Develop, Test and Run Maven Projects - Wouter DanesUsing Docker to Develop, Test and Run Maven Projects - Wouter Danes
Using Docker to Develop, Test and Run Maven Projects - Wouter DanesNLJUG
 
Kill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van RijnKill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van RijnNLJUG
 
The end of traditional enterprise IT - ING's journey to the next generation I...
The end of traditional enterprise IT - ING's journey to the next generation I...The end of traditional enterprise IT - ING's journey to the next generation I...
The end of traditional enterprise IT - ING's journey to the next generation I...NLJUG
 
Performance van Java 8 en verder - Jeroen Borgers
Performance van Java 8 en verder - Jeroen BorgersPerformance van Java 8 en verder - Jeroen Borgers
Performance van Java 8 en verder - Jeroen BorgersNLJUG
 
Introduction to Reactive with Play and Akka - Markus Jura
Introduction to Reactive with Play and Akka - Markus JuraIntroduction to Reactive with Play and Akka - Markus Jura
Introduction to Reactive with Play and Akka - Markus JuraNLJUG
 
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...NLJUG
 
Workshop angular dart presentatie - Atos
Workshop angular dart presentatie - AtosWorkshop angular dart presentatie - Atos
Workshop angular dart presentatie - AtosNLJUG
 
Workshop spring boot presentatie - Atos
Workshop spring boot presentatie - AtosWorkshop spring boot presentatie - Atos
Workshop spring boot presentatie - AtosNLJUG
 
Cultivating the jenkins job jungle with groovy - Patrick van Dissel
Cultivating the jenkins job jungle with groovy - Patrick van DisselCultivating the jenkins job jungle with groovy - Patrick van Dissel
Cultivating the jenkins job jungle with groovy - Patrick van DisselNLJUG
 
Rethink your architecture - Marten Deinum
Rethink your architecture - Marten DeinumRethink your architecture - Marten Deinum
Rethink your architecture - Marten DeinumNLJUG
 
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopper
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopperEvolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopper
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopperNLJUG
 
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...NLJUG
 
Apache Wicket: 10 jaar en verder - Martijn Dashorst
Apache Wicket: 10 jaar en verder - Martijn DashorstApache Wicket: 10 jaar en verder - Martijn Dashorst
Apache Wicket: 10 jaar en verder - Martijn DashorstNLJUG
 
Opening - Bert Ertman
Opening - Bert ErtmanOpening - Bert Ertman
Opening - Bert ErtmanNLJUG
 
Returning the right results - Jettro Coenradie
Returning the right results - Jettro CoenradieReturning the right results - Jettro Coenradie
Returning the right results - Jettro CoenradieNLJUG
 
Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Reactive programming met Java 8 en Java EE 7 - Martijn BlankestijnReactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Reactive programming met Java 8 en Java EE 7 - Martijn BlankestijnNLJUG
 
Event-sourced architectures with Akka - Sander Mak
Event-sourced architectures with Akka - Sander MakEvent-sourced architectures with Akka - Sander Mak
Event-sourced architectures with Akka - Sander MakNLJUG
 
Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen e...
Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen e...Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen e...
Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen e...NLJUG
 
Setting up a mini big data architecture, just for you! - Bas Geerdink
Setting up a mini big data architecture, just for you! - Bas GeerdinkSetting up a mini big data architecture, just for you! - Bas Geerdink
Setting up a mini big data architecture, just for you! - Bas GeerdinkNLJUG
 

More from NLJUG (20)

Decoding the airspace above you with Java and $7 hardware - Bert Jan Schrijver
Decoding the airspace above you with Java and $7 hardware - Bert Jan SchrijverDecoding the airspace above you with Java and $7 hardware - Bert Jan Schrijver
Decoding the airspace above you with Java and $7 hardware - Bert Jan Schrijver
 
Using Docker to Develop, Test and Run Maven Projects - Wouter Danes
Using Docker to Develop, Test and Run Maven Projects - Wouter DanesUsing Docker to Develop, Test and Run Maven Projects - Wouter Danes
Using Docker to Develop, Test and Run Maven Projects - Wouter Danes
 
Kill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van RijnKill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van Rijn
 
The end of traditional enterprise IT - ING's journey to the next generation I...
The end of traditional enterprise IT - ING's journey to the next generation I...The end of traditional enterprise IT - ING's journey to the next generation I...
The end of traditional enterprise IT - ING's journey to the next generation I...
 
Performance van Java 8 en verder - Jeroen Borgers
Performance van Java 8 en verder - Jeroen BorgersPerformance van Java 8 en verder - Jeroen Borgers
Performance van Java 8 en verder - Jeroen Borgers
 
Introduction to Reactive with Play and Akka - Markus Jura
Introduction to Reactive with Play and Akka - Markus JuraIntroduction to Reactive with Play and Akka - Markus Jura
Introduction to Reactive with Play and Akka - Markus Jura
 
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...
 
Workshop angular dart presentatie - Atos
Workshop angular dart presentatie - AtosWorkshop angular dart presentatie - Atos
Workshop angular dart presentatie - Atos
 
Workshop spring boot presentatie - Atos
Workshop spring boot presentatie - AtosWorkshop spring boot presentatie - Atos
Workshop spring boot presentatie - Atos
 
Cultivating the jenkins job jungle with groovy - Patrick van Dissel
Cultivating the jenkins job jungle with groovy - Patrick van DisselCultivating the jenkins job jungle with groovy - Patrick van Dissel
Cultivating the jenkins job jungle with groovy - Patrick van Dissel
 
Rethink your architecture - Marten Deinum
Rethink your architecture - Marten DeinumRethink your architecture - Marten Deinum
Rethink your architecture - Marten Deinum
 
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopper
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopperEvolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopper
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopper
 
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...
 
Apache Wicket: 10 jaar en verder - Martijn Dashorst
Apache Wicket: 10 jaar en verder - Martijn DashorstApache Wicket: 10 jaar en verder - Martijn Dashorst
Apache Wicket: 10 jaar en verder - Martijn Dashorst
 
Opening - Bert Ertman
Opening - Bert ErtmanOpening - Bert Ertman
Opening - Bert Ertman
 
Returning the right results - Jettro Coenradie
Returning the right results - Jettro CoenradieReturning the right results - Jettro Coenradie
Returning the right results - Jettro Coenradie
 
Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Reactive programming met Java 8 en Java EE 7 - Martijn BlankestijnReactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
 
Event-sourced architectures with Akka - Sander Mak
Event-sourced architectures with Akka - Sander MakEvent-sourced architectures with Akka - Sander Mak
Event-sourced architectures with Akka - Sander Mak
 
Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen e...
Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen e...Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen e...
Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen e...
 
Setting up a mini big data architecture, just for you! - Bas Geerdink
Setting up a mini big data architecture, just for you! - Bas GeerdinkSetting up a mini big data architecture, just for you! - Bas Geerdink
Setting up a mini big data architecture, just for you! - Bas Geerdink
 

Designing Distributed Programs with a Raspberry Pi cluster