Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Distribuerede systemer på CBS, 19. september 2016 - skaberbarhed

Kasper Tidemann
September 18, 2016

Distribuerede systemer på CBS, 19. september 2016 - skaberbarhed

Slides til undervisningen i distribuerede systemer på CBS d. 19. september 2016 omhandlende skalerbarhed.

Kasper Tidemann

September 18, 2016
Tweet

More Decks by Kasper Tidemann

Other Decks in Education

Transcript

  1. I skal blive gode til at tale. Det er det

    bedste råd, som jeg kan give jer.
  2. Når der er flere versioner af sandheden, som to eller

    flere computere skal blive enige om. Det er den filosofiske definition.
  3. Hvad sker der inde i et kabel? Et lille tillægsspørgsmål

    omkring volt, høje og lave værdier og synkronisering mellem enheder.
  4. Indirekte kommunikation foregår altid mellem mindst to parter, der taler

    sammen via et mellemled. Husk det til eksamen.
  5. Det nævnes blandt andet i RFC 3903. Den omhandler Session

    Initiation Protocol, der blandt andet bruges til beskedudveksling.
  6. RFC er en forkortelse af Request for Comment - hele

    Internettet er bygget op omkring det.
  7. Det bliver ofte kaldt noget andet, fx real time eller

    instant. Eller pub-sub, men det er mere moderne og Web 4.0-agtigt at sige real time.
  8. Bemærk at nogle implementationer omtaler det kanaler, andre rum (rooms).

    En enhed kan abonnere på en kanal. Når der sker noget på kanalen, så får alle abonnenter besked. * ! /chat/cbs /chat/cbs ! *
  9. Det fungerer ofte via WebSockets eller long-polling. Eller pub-sub, men

    det er mere moderne og Web 4.0-agtigt at sige real time.
  10. HTTP er en protokol, som er baseret på request-response. Man

    skal spørge om noget før man får noget retur. Ligesom når I går ind på Google.
  11. WebSockets er en protokol, hvor en server kan sende data

    til en klient uden at klienten har spurgt først. WebSockets er det nye og smarte.
  12. Tre eksempler fra den virkelige verden. faye.getClient().publish(‘chat’, { username: ‘Kasper’,

    message: ‘Hello!’ }); socket.on(‘chat’, function(message) { socket.broadcast.emit(‘message’, { username: ‘Kasper’, message: ‘Hello!’ }); }); sock.on(‘connection’, function(c) { c.on(‘message’, function(message) { c.write(‘Hello!’); }); });
  13. Lad os se nærmere på Socket.io. Det er en meget

    populær publish-subscribe-implementation.
  14. Her sendes den samme besked til alle abonnenter. socket.on(‘message’, function(message)

    { socket.broadcast.emit(‘message’, { username: ‘Kasper’, message: ‘Hello!’ }); });
  15. Når beskeder sendes til alle, så er der tale om

    flooding. Et koncept, der kan være både godt og skidt alt efter omstændighederne.
  16. Her sendes beskeden kun til én abonnent med et givent

    id. socket.on(‘message’, function(message) { socket.broadcast.to(id).emit(‘message’, { username: ‘Kasper’, message: ‘Hello!’ }); });
  17. … med andre ord: ja, der er udfordringer. 2. Skalering

    foregår typisk via en database, fx Redis, som ofte skal clusteres. 3. Heartbeating kan udgøre en væsentlig mængde trafik og kræve flere ressourcer end selve beskederne, der bliver sendt frem og tilbage. 1. Publish-subscribe kræver ofte en vis mængde systemressourcer. 4. Publish-subscribe er ofte implementeret via WebSockets, men mange firewalls tillader ikke protokollen.
  18. Lad os tale lidt om heartbeating. Det lyder som noget

    dating-halløj. Er det sådan noget med Tinder?
  19. Husk også keepalive-funktionen i TCP-protokollen - regn dog ikke med

    den. Socket 1 Socket 2 – Er du der? – Ja, hvad med dig?
  20. Som regel bruger man ikke kun publish-subscribe, men også HTTP-requests

    og så fremdeles. Det gælder fx facebook-chatten, der både understøtter det ene og det andet.
  21. Dermed er publish-subscribe et eksempel på noget, der kan hjælpe

    med at skalere. Skalering er nøglen i de fleste distribuerede systemer.
  22. Vi skal lige tale om det, der kan ske, når

    man skifter fra P2P og til indirekte kommunikation.
  23. Microsoft ødelagde Skype. Skype was the first peer-to-peer IP telephony

    network. The network contains three types of entities: supernodes, ordinary nodes, and the login server. Previously, any client with good bandwidth, no restrictions due to firewall or NAT, and adequate processing power could become a supernode. In 2012, Microsoft altered the design of the network, and brought all supernodes under their control as hosted servers in data centres.
  24. Det er et eksempel på scaling-gone-wrong. Det handler om at

    bruge den rette teknologi i den rette sammenhæng. Hvem ved, måske de ændrer det igen en dag?
  25. Det bringer os videre til at tale om message queues.

    Et segway, som de kalder det ovre på den anden side af Atlanten.
  26. Atomicitet? Det dækker over at noget enten sker til fulde

    eller slet ikke sker. Den kan sørge for at modtage beskeder og sende dem videre til behandling både en-efter-en og parallelt for bedre udnyttelse af ressourcer på tværs af netværk. En message queue skaber løs kobling mellem applikationer. Den skaber asynkronitet og sikrer atomicitet.
  27. Ovenstående kunne være koden til en receiver. connection = Bunny.new()

    connection.start channel = connection.create_channel queue = channel.queue(‘køen til Nexus’) queue.subscribe(:block => true) do puts “Okay, jeg henter øl!” end
  28. Den ene versus den anden. vs. Publish- subscribe Real-time Sporadisk

    Forbinder klienter Ingen ambition om konsistens Message queues Kronologisk Struktureret Forbinder servere Konsistent afvikling
  29. Nu skal vi tale om operativsystemer. Sagt på en anden

    måde: vi bevæger os nu til kapital 7 i DS-bogen.
  30. Plan 9 var Rob Pikes drøm om et operativsystem, hvor

    alle ressourcer var distribuerede.
  31. På min computer har jeg adgang til en række ressourcer

    til venstre i Finder. ftp://top-secret-data.nsa.gov/ http://www.google.com/ smb://192.168.1.2/fællesdrev
  32. Et operativsystem har en kerne, som er det sted, hvor

    det hele foregår. Eller på engelsk: kernel.
  33. Kernen taler med applikationerne for at give dem adgang til

    CPU, RAM og enheder. Applikationer Kernen CPU RAM Enheder
  34. Kernen taler også med USB-porte, keyboardet og alt muligt andet.

    Kernen er en slags koordinator, der sørger for at programmer kan få adgang til processoren, at der kan gemmes data i hukommelsen og så videre. Kernen sørger fx for virtuel adressering af hukommelse, så programmer ikke behøver kende til og tage hensyn til hinanden under afvikling.
  35. Fra Apples Kernel Programming Guide under afsnittet Keep Out. You

    must be exceptionally careful to ensure that your code does not cause the system to crash, does not provide any unauthorized user access to someone else’s files or memory, does not introduce remote or local root exploits, and does not cause inadvertent data loss or corruption. Kernel programming is a black art that should be avoided if at all possible.
  36. Det er det her der sker, når man starter en

    computer med x86-arkitektur. Ved opstart bliver kernen indlæst i hukommelsen af en boot loader. Så starter den og indtræder i protected mode, hvor den kan bruge virtuel adressering mv. BIOS MBR Boot loader Kernen starter real address mode
  37. Forking er grundlæggende for den måde som operativsystemer fungerer på.

    En proces er en instans af noget, der bliver afviklet. En proces har en mængde ressourcer til rådighed og har mulighed for at afvikle tråde og andre processer. Bemærk: når en proces starter en anden proces, så bliver den proces gaflet. Den nedarver sin forælders omgivelser, men får tildelt en separat plads i hukommelsen.
  38. Her har jeg startet Skype via en terminal og har

    dermed forket terminal-processen.
  39. Det er nødvendigt at bruge hukommelse når en fork muterer.

    Copy-on-Write sørger for at fork() ikke bruger hukommelse før det er nødvendigt.
  40. Og ja, det er der også. Men hov. Hvis en

    proces er en kopi af en anden proces, så må der jo være en til at starte med?
  41. Ikke det ene uden det andet. Man kan ikke nævne

    processer uden også at nævne tråde.
  42. Basalt set, i hvert fald. En tråd er et redskab,

    som en proces kan bruge til at afvikle en instruktion. En tråd deler hukommelsesområde med sin proces og er afhængig af selvsamme. En proces har altid som minimum én tråd. En tråd kan fx indeholder en instruktion om at dividere to tal, som kernen så kan udføre - resultatet kommer derefter tilbage i processen.
  43. Forskellen på multithreading med en og flere processer. Kernen Tråd

    4 Tråd 3 Tråd 2 Tråd 1 Kernen Tråd 2 Tråd 1 Kernen Tråd 3 Tråd 2 Tråd 1
  44. Det hedder også et PID, process id. Man bruger ofte

    en semafor til at låse en proces, så et program ikke kan startes flere gange.
  45. På den måde kan man fx spare udgifter til servere,

    fordi flere systemer kan køre på én server. Virtualisering er en form for distribuering af et system, der giver mulighed for afvikling af enten delvist afhængige eller uafhængige miljøer. Udnyttelsen af ressourcer på en computer - altså CPU, RAM og så videre - er ofte ikke effektiv over tid, hvorfor det giver mening at virtualisere på den ene eller anden facon.
  46. Det er det nye sort. Bare vent. Der findes noget,

    der hedder distribueret schedulering.
  47. Metoderne til afvikling af noget, der er scheduleret. First-In-First-Out er

    den mest simple form for scheduling, hvor instruktioner afvikles i den rækkefølge, som de modtages i. Shortest-Remaining-Time afvikler instruktioner, der tager kortest tid, først. Det kan resultere i starvation af længerevarende processer. Round-Robin giver alle instruktioner en del af den samlede CPU- tid. Hvis en instruktion ikke når at blive færdig indenfor tidsrammen, så går turen videre til den næste.
  48. I skal sgu lige have en af mange røverhistorier. En

    lille historie fra San Francisco.