Feldetektorn Theta

Ett väldigt centralt problem när man har datorer som pratar med varandra är att få dem att inse när någon av de andra har dött. Eller helt enkelt inte går att nå, eftersom någon del av internetlinan mellan egna datorn och den potentiellt döda datorn har gått sönder. Dessutom måste de förstå skillnaden på när de själva har fått en trasig uppkoppling, eller när någon annan har fått det.

En enkel lösning är då att alla datorer skickar små ”hur är läget”-paket till varandra. När de får svar, vet de att den de fått svar från fortfarande lever. Får de inget svar från en enstaka dator, är det förmodligen den som är trasig. Får de inga svar alls, är det de själva som har problem.

Det går ju enkelt att effektivisera det där, genom att istället bara skicka ”jag mår bra” till alla, med jämna mellanrum. Samma resultat, men med halva antalet nätverkspaket.

Sedan tar sommartiden slut, så det verkar som att man inte fått svar från någon annan på över en timme. Frågan i båda varianterna ovan är därmed hur länge man ska vänta. Ju kortare tid man väntar, desto snabbare upptäcker man problem, men desto oftare gissar man fel.

Om alla datorer skickar paket till alla andra med ungefär samma frekvens, kan man istället använda Theta-detektorn. Alla datorer har ju en lista med de andra datorer de kommunicerar med, och förutom deras IP-adress och vad man nu behöver, har man då även en räknare. Varje gång man får ett paket av någon, nollställer man den datorns räknare och räknar upp alla andras ett steg. Även datorer som kommunicerar lite mer sällan än de andra, kommer hålla sin räknare på en rimlig nivå. När en dator dör, kommer dess räknare istället öka och öka tills den slår i någon förbestämd gräns. Om det är 10 datorer som pratar med varandra, och någons räknare når 1000, när den i vanliga fall aldrig går över 100, mår den förmodligen inte så bra.

Om datorerna sitter i samma nät eller är utspridda över hela planeten, eller om någon dators klocka ändras lite, spelar nu ingen roll. En dator som kommunicerar mycket mer sällan än de andra, upptäcks med en gång ändå.

Problemet nu är vad ”i vanliga fall” betyder. En enkel lösning är att börja med 0, och sedan behålla typ 90% av det och lägga till 10% av varje nytt värde (eller 99 resp 1, det är bara en fråga om hur känslig man vill att den ska vara). Om värdena är någorlunda lika får man då till slut ett medelvärde som håller sig ganska stabilt. Tyvärr räcker det med några enstaka ovanligt höga värden för att skapa kaos.

Man får mer stabila värden från talseriens median, men att räkna ut den i en oändligt växande talserie är lite jobbigt. Då kan man använda Remedian istället (som jag använde i artikeln i april 2018). Den ger bara ett ungefärligt värde, men är lika effektiv på att filtrera bort undantag. Man får fortfarande vara lite noga när man väljer ”nu är datorn död”-gränsen, men det gör ju ingenting.

Sedan kan man låta bli att skicka flera ”jag mår bra”-paket i rad, utan vänta tills man fått ett sådan från andra sidan. Datorer som står nära varandra kommer då kunna skicka många sådana per tidsenhet, medan de som står längre bort (dvs högre ”ping”) pratar mer sällan. Då är det bara att jämföra medianerna för att de själva ska kunna upptäcka vilka av deras kompisar som står nära, och vilka som står längre bort.

Annonser

Doktorand

Strax före jul 2016 fick jag besked att jag blivit antagen som doktorand på MDH. Fokuset i början var på testning, men ganska snart gled det över till datakommunikation. Det var helt enkelt för många saker jag ville göra med produkten jag jobbat på sedan 2002, EMG. Mer specifikt är jag industridoktorand, vilket gör att fokuset ska vara på grejer som är bra för arbetsgivaren. Jag fick en idé om att analysera svarstiderna för de sms vi skickar till operatörerna, vilket resulterade i en publicerad artikel i april 2018. Den hann knappt bli klar innan verktyget jag skrev då kom till användning hos flera kunder.

Nu är jag inne på tredje året (av fem), nu med ett allt avsmalnande fokus på geo-replikering. Att köra ett program på en dator är enkelt, men om programmet eller datorn kraschar står trafiken stilla. Det är dåligt. Alltså vill man köra programmet på flera datorer. Problemet då är att de måste samarbeta, vilket inte alltid är så lätt. Om de dessutom står på skilda ställen, t.ex. i serverhallar i olika länder så man inte blir så sårbar om en enstaka internetlina dör, blir det sju resor värre. Som tur var är ”det här är ett problem” en acceptabel artikelkategori. Det hela blev en artikel som publicerades i juli 2018. Att lösa allting där lär hålla mig sysselsatt ett tag till.

Rent allmänt måste en sådan här artikel innehålla en rejäl sektion med referenser till diskussioner om liknande problem och potentiella lösningar som avfärdats av en eller annan anledning. Den processen tar helt galet lång tid, så att jobba som doktorand eller kanske forskare i allmänhet är ju långt ifrån det mest tidseffektiva sättet att lösa uppgifter på. Å andra sidan börjar jag nu hitta folk som funderar på just liknande problem, och även om vi inte kan använda varandras lösningar rakt av så kommer alla en liten bit framåt.

Dessutom gör det att jag alltmer inser vikten av att lösa rätt problem. Istället för att fråga om EMG ska använda MySQL, MongoDB eller Cassandra, blev frågan varför replikering av data är så långsamt. Det blev nyckeln till nästa artikel, som inte har hunnit få en websida än. Än så länge kan den av peer review-folket få allting mellan ”men det här är ju bara korkat och bisarrt, please go away” till ”Best Paper!”.

Visst, jag har nog aldrig skrivit så lite kod som de senaste två åren. En del tid har gått åt till diverse kurser, en del till skrivande av ett par artiklar, men mesta tiden har jag nog ägnat åt att läsa forskningsrapporter. Sedan läst de artiklar de refererar till, och de artiklar som de själva blir refererade av. Framåt i tiden, bakåt i tiden. Det ena sidospåret efter det andra, dag ut och dag in i flera månader. Och plötsligt har jag nu faktiskt kommit en bit på vägen för att lösa det där problemet med geo-replikering som har diskuterats i över 10 år utan någon större framgång. Det är ganska ballt.

En av handledarna på MDH sa att hennes tid som doktorand var det roligaste hon gjort, och att hon knappt förstod varför inte alla gjorde det. Jag är lite benägen att hålla med, i alla fall om man har ett ämne eller ett område som man verkligen vill få koll på. Dels att få en bra bild över var gränsen för mänsklighetens sammanlagda vetande ligger (i ett förvisso vansinnigt smalt området), och hjälpa till att putta gränsen en liten bit framåt. Under en liten, liten stund, är man därmed den personen på hela planeten som vet lite, lite mer om någonting jättespecifikt än alla andra. Sedan blir man ju omkörd cirka en nanosekund senare, men ändå.

Tre år kvar.

Tillbaka

Vartefter åren gick med en egen server, uppstod ett problem. Jag kunde inte på något vettigt sätt uppgradera Linux-installationen. Det hade nämligen inneburit en uppgradering av Ruby On Rails som RSS/Ping körde i, och eftersom jag inte följde med i Rails-uppgraderingarna blev den operationen bara allt större. Hade jag gjort samma sak idag hade jag lagt appen och databasen i varsin Docker-container, och så hade jag kunnat uppdatera en sak i taget.

Nåja. Databasen gav i alla fall upp nyss, och därmed även både RSS/Ping, egen-hostade bloggen osv. Så kan det gå.

Det börjar dyka upp lite saker som jag vill skriva om, men som är för mycket för Twitter, för litet för en forskningsartikel, och Facebook är för inlåst. Så, hej igen WordPress, how ya doing?