More Related Content
PDF
Building scalable network applications with NettyNLJUG
PDF
Effectief automatisch testen met cucumber hol bert jan schrijver and frans ...NLJUG
PPTX
Retro gaming with lambdas stephen chinNLJUG
PPTX
Integrity of data lucas jellemaNLJUG
PDF
Real-time user interfaces - sosm gewoon makkelijker - Allard BuijzeNLJUG
PPTX
The future of Web-Scale - Johan Tillema, Rene Boere & Chris QuachNLJUG
PPTX
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 SchrijverNLJUG
PPTX
Using Docker to Develop, Test and Run Maven Projects - Wouter DanesNLJUG
PPTX
Kill the mutants and test your tests - Roy van RijnNLJUG
PPTX
The end of traditional enterprise IT - ING's journey to the next generation I...NLJUG
PDF
Performance van Java 8 en verder - Jeroen BorgersNLJUG
PDF
Introduction to Reactive with Play and Akka - Markus JuraNLJUG
PPTX
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...NLJUG
PDF
Workshop angular dart presentatie - AtosNLJUG
PDF
Workshop spring boot presentatie - AtosNLJUG
PDF
Cultivating the jenkins job jungle with groovy - Patrick van DisselNLJUG
PDF
Rethink your architecture - Marten DeinumNLJUG
PPTX
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopperNLJUG
PDF
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...NLJUG
PDF
Apache Wicket: 10 jaar en verder - Martijn DashorstNLJUG
PDF
Opening - Bert ErtmanNLJUG
PDF
Returning the right results - Jettro CoenradieNLJUG
PDF
Reactive programming met Java 8 en Java EE 7 - Martijn BlankestijnNLJUG
PDF
Event-sourced architectures with Akka - Sander MakNLJUG
PPTX
Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen e...NLJUG
PPTX
Setting up a mini big data architecture, just for you! - Bas GeerdinkNLJUG
Designing Distributed Programs with a Raspberry Pi cluster
- 8. 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
- 9. 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
- 14. Hoe maak je iets gedistribueerd?
•
Kopieerallesnaaralle machines
– Meer machines betekentalleenmeer CPU
– Kaart&ruimteschepengelimiteerd tot 1 raspberry pi
– Veelnetwerkverkeer
© Copyright 2013. First8
slide
14
- 15. Hoe maak je iets gedistribueerd?
•
Verdeel de data
© Copyright 2013. First8
slide
15
- 16. 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
- 18. 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
- 19. 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
- 20. Lokale tiles per server
No detection across borders
© Copyright 2013. First8
slide
20
- 21. 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
- 22. BASE: Basically Available, Soft state, Eventual consistency
•
CAP theorie:
– Consistency
– Availability
– Partition tolerance
•
Overgangtussen tiles
– Dubbelrenderen
– Verdwijnendeschepen
© Copyright 2013. First8
slide
22
- 24. Hoe schaalbaar is het?
•
# Raspberry Pi’s < # Tiles
– Nooit helemaal gelijk verdeeld
© Copyright 2013. First8
slide
24
- 29. 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
- 32. 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
- 34. 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
- 39. 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
- 41. Inzichten
•
Pi’s zijn prima omkleine tests meeuittevoeren
•
Pi’s zijnbijuitstekgeschiktvoortesten van verstoringen
© Copyright 2013. First8
slide
41