SlideShare a Scribd company logo
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

PPTX
Geen vertraging meer dankzij Hazelcast?
roelandvanbeek
 
PDF
Building scalable network applications with Netty
NLJUG
 
PDF
Effectief automatisch testen met cucumber hol bert jan schrijver and frans ...
NLJUG
 
PPTX
Retro gaming with lambdas stephen chin
NLJUG
 
PPTX
Integrity of data lucas jellema
NLJUG
 
PDF
Real-time user interfaces - sosm gewoon makkelijker - Allard Buijze
NLJUG
 
PPTX
The future of Web-Scale - Johan Tillema, Rene Boere & Chris Quach
NLJUG
 
PPTX
Speedy perception trumps speedy reception–smart asynchronous interactions - L...
NLJUG
 
Geen vertraging meer dankzij Hazelcast?
roelandvanbeek
 
Building scalable network applications with Netty
NLJUG
 
Effectief automatisch testen met cucumber hol bert jan schrijver and frans ...
NLJUG
 
Retro gaming with lambdas stephen chin
NLJUG
 
Integrity of data lucas jellema
NLJUG
 
Real-time user interfaces - sosm gewoon makkelijker - Allard Buijze
NLJUG
 
The future of Web-Scale - Johan Tillema, Rene Boere & Chris Quach
NLJUG
 
Speedy perception trumps speedy reception–smart asynchronous interactions - L...
NLJUG
 

More from NLJUG (20)

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

Designing Distributed Programs with a Raspberry Pi cluster