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

Distribuerede systemer, CBS, 1. oktober 2015

Kasper Tidemann
September 29, 2015

Distribuerede systemer, CBS, 1. oktober 2015

Slides til forelæsningen om skalering i distribuerede systemer på CBS d. 1. oktober 2015 kl. 08:00.

Kasper Tidemann

September 29, 2015
Tweet

More Decks by Kasper Tidemann

Other Decks in Education

Transcript

  1. Hvordan lærer man bedst alt det her? Jeg har fået

    et par spørgsmål siden sidst. Hvad synes I?
  2. Det handler om et sprogs runtime og API. Nogle sprog

    er gode til det ene, nogle sprog er gode til det andet.
  3. + +

  4. vs.

  5. Det nævnes blandt andet i RFC 3903. Den drejer sig

    om Session Initiation Protocol, der blandt andet bruges til messaging.
  6. Det bliver ofte kaldt noget andet, fx real-time. Eller pub-sub

    - men det er mere moderne at sige real-time.
  7. En enhed kan abonnere på en kanal. Når der sker

    noget på kanalen, så får alle abonnenter besked. * → /chat/cbs /chat/cbs → * Bemærk at nogle implementationer kalder det kanaler (Faye), andre rum (Socket.io).
  8. 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!’); }); });
  9. Lad os se lidt nærmere på Socket.io. Det er en

    meget populær publish-subscribe-implementation.
  10. Når beskeder sendes til alle, så er det flooding. Eller

    når der broadcastes til alle på en kanal, med andre ord.
  11. 2. Skalering foregår typisk via 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.
  12. Socket 1 Socket 2 – Er du der? – Ja,

    hvad med dig? Husk også keepalive-funktionen i TCP-protokollen - regn dog ikke med den.
  13. Ofte er publish-subscribe et lag oven på noget andet, der

    sørger for persistering. Fx når man chatter som på facebook. Det er nice-to-have.
  14. 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.
  15. 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. Atomicitet? Det sørger for at noget enten sker helt eller slet ikke.
  16. 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 Receiver (Consumer/Worker) Ovenstående er forsimplet - det bør wrappes i begin/rescue.
  17. vs. Publish- subscribe Real-time Sporadisk Forbinder klienter Ingen ambition om

    konsistens Message queues Kronologisk Struktureret Forbinder servere Konsistent afvikling
  18. Tilgang til eksterne ressourcer Fortolkning af ressourcer fra eksterne kilder,

    fx en FTP-server. ftp://top-secret-data.nsa.gov/ http://www.google.com/ smb://192.168.1.194/fællesdrev
  19. Kernen (Kernel) Ovenstående er forsimplet - det bør wrappes i

    begin/rescue. Applikationer Kernen CPU RAM Enheder
  20. Kernen (Kernel, fortsat) Kernen taler også med USB-porte, keyboard og

    alt muligt andet. Kernen er en slags koordinater, 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.
  21. 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.
  22. Opstart af en computer Med udgangspunkt i x86-arkitekturen. 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
  23. Processer fork() er et systemkald til kernen. 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.
  24. Hvis en proces er en kopi af en anden proces,

    så må der jo være en til at starte med?
  25. Tråde 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.
  26. Multithreading 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
  27. Virtualisering Det er egentlig en lidt kluntet forklaring. 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.
  28. Forskellige tilgange 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. Forskellige måder at løse det samme problem på.
  29. +