Designing Distributed Programs with a Raspberry Pi cluster
Upcoming SlideShare
Loading in...5
×
 

Designing Distributed Programs with a Raspberry Pi cluster

on

  • 259 views

 

Statistics

Views

Total Views
259
Views on SlideShare
226
Embed Views
33

Actions

Likes
0
Downloads
6
Comments
0

1 Embed 33

http://www.nljug.org 33

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Designing Distributed Programs with a Raspberry Pi cluster Designing Distributed Programs with a Raspberry Pi cluster Presentation Transcript

  • 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