Designing Distributed Programs with a Raspberry Pi cluster

469 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
469
On SlideShare
0
From Embeds
0
Number of Embeds
72
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Designing Distributed Programs with a Raspberry Pi cluster

  1. 1. Designingdistributed programs with a Raspberry Pi Cluster Arjan Lamers © Copyright 2013. First8 slide 1
  2. 2. Introductie • Raspberry PI cluster – – – – – SnelgenoegvoorJava (JDK 7u40) Makkelijkdraagbaar Kleineexperimenten Testen van echtehardware problemen Langzaaaam…. © Copyright 2013. First8 slide 2
  3. 3. Introductie • Inzichtelijkmaken van gedistribueerdprogrammeren • Simpel, gedistribueerd en visueel • “Pigs in space”: – Willekeuriggrotekaart – Collision detection © Copyright 2013. First8 slide 3
  4. 4. Introduction • Hazelcast – Distributed implementation of Java Collection framework • LWJGL – Lightweight Java Game Library for drawing © Copyright 2013. First8 slide 4
  5. 5. Introduction © Copyright 2013. First8 slide 5
  6. 6. Agenda • • • • • Collision detection Partitionering Schaalbaarheid Beschikbaarheid Inzichten © Copyright 2013. First8 slide 6
  7. 7. Collision detection • In alle software toepassingenzijnermeerdereoplossingen met voor- en nadelen © Copyright 2013. First8 slide 7
  8. 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. 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
  10. 10. 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
  11. 11. Collision detection: keuzes •Groterekaarten of meerruimteschepen? • Data serialisatie? Keuze: Object based collision detection © Copyright 2013. First8 slide 11
  12. 12. Agenda • • • • • Collision detection Partitionering Schaalbaarheid Beschikbaarheid Inzichten © Copyright 2013. First8 slide 12
  13. 13. Meerdere servers Efficient gebruikmaken van: • • • CPU Geheugen Netwerk © Copyright 2013. First8 slide 13
  14. 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. 15. Hoe maak je iets gedistribueerd? • Verdeel de data © Copyright 2013. First8 slide 15
  16. 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
  17. 17. 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
  18. 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. 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. 20. Lokale tiles per server No detection across borders © Copyright 2013. First8 slide 20
  21. 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. 22. BASE: Basically Available, Soft state, Eventual consistency • CAP theorie: – Consistency – Availability – Partition tolerance • Overgangtussen tiles – Dubbelrenderen – Verdwijnendeschepen © Copyright 2013. First8 slide 22
  23. 23. Agenda • • • • • Collision detection Partitionering Schaalbaarheid Beschikbaarheid Inzichten © Copyright 2013. First8 slide 23
  24. 24. Hoe schaalbaar is het? • # Raspberry Pi’s < # Tiles – Nooit helemaal gelijk verdeeld © Copyright 2013. First8 slide 24
  25. 25. Amdahl’s law (1967) © Copyright 2013. First8 slide 25
  26. 26. Amdahl’s law © Copyright 2013. First8 slide 26
  27. 27. Amdahl’s law © Copyright 2013. First8 slide 27
  28. 28. Gustafson’s law (1988) © Copyright 2013. First8 slide 28
  29. 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
  30. 30. Agenda • • • • • Collision detection Partitionering Schaalbaarheid Availability Inzichten © Copyright 2013. First8 slide 30
  31. 31. Availability • Bestandtegen hardware storingen • Kopieer data naar backup servers – Bijvoorkeur in ander data centrum © Copyright 2013. First8 slide 31
  32. 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
  33. 33. High availability in Hazelcast: blauw en paarsfalen © Copyright 2013. First8 slide 33
  34. 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
  35. 35. Availability: split brain • Meerdere data centre’s © Copyright 2013. First8 slide 35
  36. 36. Availability: split brain Groen / paars / geelaanonzekant van de split © Copyright 2013. First8 slide 36
  37. 37. Availability • Split brain oplossen: – Kieseenwerkelijkheid of – Merge © Copyright 2013. First8 slide 37
  38. 38. Agenda • • • • • Collision detection Partitionering Schaalbaarheid Beschikbaarheid Inzichten © Copyright 2013. First8 slide 38
  39. 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
  40. 40. Inzichten • Ontwerpen van gedistribueerdeprogramma’s is lastig • Denkna over data partitionering • Maakstrategieenconfigureerbaar © Copyright 2013. First8 slide 40
  41. 41. Inzichten • Pi’s zijn prima omkleine tests meeuittevoeren • Pi’s zijnbijuitstekgeschiktvoortesten van verstoringen © Copyright 2013. First8 slide 41
  42. 42. Vragen? © Copyright 2013. First8 slide 42
  43. 43. Meer weten? • Komlangsbij de First8 stand • Download de software op: www.first8.nl © Copyright 2013. First8 slide 43

×