Slide 1

Slide 1 text

Velkommen til min undervisning. Distribuerede systemer på CBS, september 2016, DS-bogens kapitel 6 og 7

Slide 2

Slide 2 text

Kasper Tidemann. Det er mit navn.

Slide 3

Slide 3 text

Det er mit selskab, hvorfra min verden går.

Slide 4

Slide 4 text

Jeg er softwareudvikler. 00010101100101010010 01110001010010100010 11010101000001010011 00001001100101001001 00010101110101010110 10100101000010111100

Slide 5

Slide 5 text

Jeg arbejder blandt andet for facebook.

Slide 6

Slide 6 text

Hvorfor står jeg her? Der er tre ting, som jeg gerne vil lære jer.

Slide 7

Slide 7 text

I skal blive gode til faget. Håndværk, håndværk, håndværk.

Slide 8

Slide 8 text

I skal blive gode til at tale. Det er det bedste råd, som jeg kan give jer.

Slide 9

Slide 9 text

I skal forfølge jeres drømme. Fundamentet for at blive et bedre menneske.

Slide 10

Slide 10 text

[email protected]. Skriv til mig, hvis I har brug for hjælp.

Slide 11

Slide 11 text

Hvad er distribuerede systemer? Et fag på CBS, ja, men hvad går det egentlig ud på?

Slide 12

Slide 12 text

Når to eller flere computere opfører sig som en. Det er den praktiske definition.

Slide 13

Slide 13 text

Når der er flere versioner af sandheden, som to eller flere computere skal blive enige om. Det er den filosofiske definition.

Slide 14

Slide 14 text

Et eksempel fra bankverdenen.

Slide 15

Slide 15 text

Når Nets går ned, så bliver køen i Netto lang.

Slide 16

Slide 16 text

Hvordan går det med bogen?

Slide 17

Slide 17 text

Indirekte kommunikation. Kapitel 6 i DS-bogen.

Slide 18

Slide 18 text

Et eksempel på direkte kommunikation.

Slide 19

Slide 19 text

Et andet eksempel på direkte kommunikation.

Slide 20

Slide 20 text

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.

Slide 21

Slide 21 text

Når to enheder taler med hinanden gennem en tredje, fx en server.

Slide 22

Slide 22 text

Når man skriver sammen på facebook, så er facebook mellemled.

Slide 23

Slide 23 text

Indirekte kommunikation foregår altid mellem mindst to parter, der taler sammen via et mellemled. Husk det til eksamen.

Slide 24

Slide 24 text

Hvorfor ikke bare kommunikere direkte? Det kunne der jo være flere gode grunde til…

Slide 25

Slide 25 text

Værsgo at hilse på publish-subscribe. En metode til at abonnere på og distribuere data.

Slide 26

Slide 26 text

Det nævnes blandt andet i RFC 3903. Den omhandler Session Initiation Protocol, der blandt andet bruges til beskedudveksling.

Slide 27

Slide 27 text

RFC er en forkortelse af Request for Comment - hele Internettet er bygget op omkring det.

Slide 28

Slide 28 text

I kender publish-subscribe fra stort set alt. Publish-subscribe nævnes sjældent, men anvendelsen er hyppig.

Slide 29

Slide 29 text

Det bliver brugt i en masse populære services.

Slide 30

Slide 30 text

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.

Slide 31

Slide 31 text

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 ! *

Slide 32

Slide 32 text

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.

Slide 33

Slide 33 text

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.

Slide 34

Slide 34 text

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.

Slide 35

Slide 35 text

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!’); }); });

Slide 36

Slide 36 text

Lad os se nærmere på Socket.io. Det er en meget populær publish-subscribe-implementation.

Slide 37

Slide 37 text

Her sendes den samme besked til alle abonnenter. socket.on(‘message’, function(message) { socket.broadcast.emit(‘message’, { username: ‘Kasper’, message: ‘Hello!’ }); });

Slide 38

Slide 38 text

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.

Slide 39

Slide 39 text

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!’ }); });

Slide 40

Slide 40 text

Prøv selv på http://chat.socket.io. Live-chat midt i undervisningen - wow!

Slide 41

Slide 41 text

Pause.

Slide 42

Slide 42 text

Er der nogen udfordringer forbundet med publish-subscribe? … det virker jo meget smart, det hele.

Slide 43

Slide 43 text

… 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.

Slide 44

Slide 44 text

Lad os tale lidt om heartbeating. Det lyder som noget dating-halløj. Er det sådan noget med Tinder?

Slide 45

Slide 45 text

Husk også keepalive-funktionen i TCP-protokollen - regn dog ikke med den. Socket 1 Socket 2 – Er du der? – Ja, hvad med dig?

Slide 46

Slide 46 text

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.

Slide 47

Slide 47 text

Dermed er publish-subscribe et eksempel på noget, der kan hjælpe med at skalere. Skalering er nøglen i de fleste distribuerede systemer.

Slide 48

Slide 48 text

Vi skal lige tale om det, der kan ske, når man skifter fra P2P og til indirekte kommunikation.

Slide 49

Slide 49 text

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.

Slide 50

Slide 50 text

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?

Slide 51

Slide 51 text

Det bringer os videre til at tale om message queues. Et segway, som de kalder det ovre på den anden side af Atlanten.

Slide 52

Slide 52 text

Generelt set er det smart at kunne parkere noget et sted. … til senere brug.

Slide 53

Slide 53 text

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.

Slide 54

Slide 54 text

Et billede af en typisk beskedkø. Sender Producer Message queue Receiver Consumer Worker

Slide 55

Slide 55 text

Det kan fx være RabbitMQ, ZeroMQ eller Resque.

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

Nu skal vi tale om operativsystemer. Sagt på en anden måde: vi bevæger os nu til kapital 7 i DS-bogen.

Slide 59

Slide 59 text

Hvad er et operativsystem? Kom gerne med et par eksempler.

Slide 60

Slide 60 text

Netværksbaserede og fuldt ud distribuerede - sidstnævnte er en pipe dream.

Slide 61

Slide 61 text

Plan 9 var Rob Pikes drøm om et operativsystem, hvor alle ressourcer var distribuerede.

Slide 62

Slide 62 text

Hvad er der i øvrigt med den mand og jordegern?

Slide 63

Slide 63 text

Et netværksbaseret operativsystem består af applikationer, selve systemet og hardwaren. Applikationer Operativsystem Hardware

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

Hvad består et operativsystem af? Altså udover Word og PowerPoint og alt for mange e-mails.

Slide 66

Slide 66 text

Et operativsystem har en kerne, som er det sted, hvor det hele foregår. Eller på engelsk: kernel.

Slide 67

Slide 67 text

Kernen taler med applikationerne for at give dem adgang til CPU, RAM og enheder. Applikationer Kernen CPU RAM Enheder

Slide 68

Slide 68 text

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.

Slide 69

Slide 69 text

Her ses kernen i Mac OS X 10.11.6.

Slide 70

Slide 70 text

Her ligger kernen i Mac OS X El Capitan. Slet den ikke!

Slide 71

Slide 71 text

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.

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

Hexley fra Mac OS X og Beastie fra FreeBSD.

Slide 74

Slide 74 text

Hallo, hvad sker der for treforken!? Det virker da ret djævleagtigt og satanisk!

Slide 75

Slide 75 text

fork() er et systemkald til at kopiere processer. Eller som GitHub siger: fork you!

Slide 76

Slide 76 text

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.

Slide 77

Slide 77 text

Her har jeg startet Skype via en terminal og har dermed forket terminal-processen.

Slide 78

Slide 78 text

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.

Slide 79

Slide 79 text

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?

Slide 80

Slide 80 text

Se hvad der står i htop - der står launchd. Launch daemon.

Slide 81

Slide 81 text

Pause.

Slide 82

Slide 82 text

Ikke det ene uden det andet. Man kan ikke nævne processer uden også at nævne tråde.

Slide 83

Slide 83 text

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.

Slide 84

Slide 84 text

Visuelt set. Proces Tråd Kernen

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

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.

Slide 87

Slide 87 text

Ligesom i et TV-køkken! Nu kører det. Demonstration.

Slide 88

Slide 88 text

Et koncept, der er blevet meget populært de senere år. Virtualisering.

Slide 89

Slide 89 text

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.

Slide 90

Slide 90 text

Seriøst, de pjækker hele tiden. De fleste servere laver ikke dagens gode gerning.

Slide 91

Slide 91 text

uptime fortæller om belastningen det sidste minut, de sidste 5 minutter og de sidste 15.

Slide 92

Slide 92 text

I kender måske nogle af ovenstående virksomheder og teknologier.

Slide 93

Slide 93 text

Det er det nye sort. Bare vent. Der findes noget, der hedder distribueret schedulering.

Slide 94

Slide 94 text

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.

Slide 95

Slide 95 text

I skal sgu lige have en af mange røverhistorier. En lille historie fra San Francisco.

Slide 96

Slide 96 text

twitter sparede 32% på deres serverbudget. +

Slide 97

Slide 97 text

Netflix og Amazon var bedste venner lige indtil Netflix fik regningen.

Slide 98

Slide 98 text

For en god ordens skyld. Opsummering.

Slide 99

Slide 99 text

Jeg glæder mig til at se jer næste gang. Tak for i dag!