The Gathering Technical blog

The Gathering’s driftsløsninger – Del 2

31 Jan 2021, by from Systemstøtte

Heisann!
Selv om det ikke ble et TG21 i Vikingskipet i år, jobber vi i Systemstøtte videre med vår driftsløsning. For del 1 se The Gathering’s driftsløsninger

I denne lille posten tenker vi å skrive litt om hvordan vi gjør nettverket med utstyr fra Fortinet:
FortiGate 601E som brannmur
FortiSwitch 1048E som switcher
FortiAnalyzer VM

FortiGatene kjører i et Active/Passive cluster. Switchene satt opp med FortiLink. Dette gjør at vi kan styre hele nettverket fra et sted. Alt er selvfølgelig satt opp med IPv6 (og IPv4).

For å sikre redundans på switchene er de satt opp med MCLAG (Multi-Chassis Link Aggregation Group) og alle servere er koblet med minst 1 10Gbps link til hver switch (LACP). Internett fra Nexthop er koblet til begge switchene. Dette gjør at vi kan miste en FortiSwitch og en FortiGate uten at det merkes på tjenestene vi leverer. Alt har redundant strømforsyninger tilkoblet UPS og aggregat.

For å sikre at de mest kritiske løsningene vi har, har vi starter å leke med last balansere i FortiGate. Dette gjør at vi kan kjøre 2 eller flere servere som svarer på 1 IP adresse. Med helsesjekker blir servere som ikke svarer tatt ut av drift automatisk og tilbake når de responderer og er anset som friske.

Eksempelvis så kjører gathering.org med et slikt oppsett i dag. En “Virtual Server” som videresender trafikken til 2 servere. Dette gjør at vi i teorien kan miste en fysisk server uten at nettsiden går ned. Dessverre er vi ikke helt i mål med å få alle tjenester som kreves for nettsiden redundante. Vi snuser i tillegg på Kubernetes, men mer om det senere. De fleste tjenestene våre kjører som konteinere i Docker.

FortiAnalyzer

Vi bruker FortiAnalyzer for å følge med på trafikken som treffer nettverket vårt. Det er ikke veldig mye brukt, men alltid kult å kunne se hva som skjer ute på internett. Pluss veldig nyttig for feilsøking.

Har du spørsmål? Du finner flere av oss i #tech på TG sin Discord server.
Vi snakkes!

TG:Online Minecraft Server oppsett

19 Apr 2020, by from Event:CnA:Game

Hei igjen!

Dei fleste fekk vel med seg avlysinga av The Gathering 2020, som da opna eit prosjekt for å dempe TG-abstinensane frå både crew og deltakarar, nemleg TG:Online. TG:Online bestod då av litt konkurransar, mykje streaming, litt stemning på discord og ein tøff Minecraft server, som me skal fordjupe oss i her!

Det starta med at eg kom med eit forslag til den interne ide-gruppa til TG:Online den 17 mars, som lød slik:

Den stjerna skal eigentlig blinke gul og raud

Som da trigga ein del respons. Sjølv om forslaget mitt då var halvveis på kødd, viste det seg at samtlege crewmedlemmar var gira, og at Nextron, so gode som dei er, kunne stille opp med hardware til prosjektet. 12 dagar etter forslaget starta det første møtet der me drøfta korleis prosjektet skulle sjå ut, deretter hadde me to veker til det blei live, og slik blei det:

Hardware

Vi hadde alt ein bestilling på diverse serverar som blei bygd i forkant av avlysinga, som Nextron var gira på å låne vekk til TG:Online i staden for. Me fekk da 2(!) av desse specsa:

2x Intel Xeon Platinum 8280L – 28-Core 2.7Ghz Base 4Ghz Turbo
512GB RAM
2x 256GB M.2 SSD i RAID-1 (boot)
6x 480GB SATA SSD
2x10GbE SFP+

Det er gøy.

Men kor skal vi ha serveren? Vanligvis har me jo alle maskinene våre i vikingskipet, men ettersom den planen gjekk vestover måtte vi går til ein av KANDU sine samarbeidspartnere, nemleg colocation hos Nexthop!
Der har me og ein Fortigare brannmur som fort kan komme til nytte! Tidlegare har Ole Mathias posta bilete frå installasjonen av serverane

Software

I beskrivelsa av software til prosjektet snakkar me om alt av rein software som gjorde prosjektet mogleg, og startar kronologisk med det som er i botnen.

For i botnen starta me med Proxmox til kvar av serverane. Proxmox har blitt veldig populært inna TG sitt tech-miljø, og har opna for lett skalering, IPA, flytting av VM utan downtime med meir, so det var eit sjølvfølgje for oss!

Deretter kjem game sin favoritt, nemleg pterodactyl! Pterodactyl opnar da for veldig lett administering av docker containers av spel, deriblant forskjellige variantar av Minecraft serverar. Det har eit kult API, kjapp deployment muligheit for serverar, brukaradministrering av serverar, tilgang til filsystem og CLI til containerar, administrering av database og mykje meir!

Eksempel oppsett, her er alle “likesida” firkantane VM’ar, og dei avlange er Minecraft server instances i eigne docker containers

Deretter går me til det som er sjølve Minecraft serverane, og det har kanskje behov for ein liten forklaring.

“Vanleg” Minecraft køyrar java som dei fleste veit. Grunna det pluss Minecraft sin utvikling dei siste ti åra brukar Minecraft server instansen hovudsakleg kun ein CPU kjerne, som gjer da eit 56 core beist som me har litt ubrukeleg dersom me skulle berre hatt ein server instance. Difor gjor me som det fleire andre større serverar, nemleg å ha eit proxy oppsett. Det fungerar med at me har ein proxy, som bungeecord eller waterfall, som då i klienten sine auge ser ut som ein heilt vanleg Minecraft server. Om klienten prøvar å kople seg til proxyen, vil den då bli sendt til eit av serverane under proxyen. Proxyen lagar og ein bru for å kople seg mellom serverar, og kan bli konfigurert til å gjer mykje gøy!

Eksempel på proxy blokkdiagram, der waterfall er ein proxy server

Der har me valt å bruke waterfall som proxy server, som då er ein fork av bungeecord, og Tuinity som Minecraft server, som er ein fork av PaperMC, som er ein fork av Spigot. Phew. Me valgte da waterfall og tuinity rett og slett for at internettet sa dei skulle gi betre ytelse, noko som me tenkte me sårt trengte då CPU’en vår ikkje har like god single-core ytelse som dei fleste profesjonelle Minecraft serverar har. Med Tuinity arbeida me internt for å få best mogleg ytelse og optimalisering, og me var veldig bleeding edge med Tuinity verisjonen me køyrde i produksjon.

Litt anna som er verdt å nemne er at me konfigurerte ein close-to autodeploy av forskjellige Minecraft server instances, som gjer at dersom det hadde komt hundrevis, eller tusenvis av folk, kunne vi kjapt skalere opp anntalet survival, creative og lobby instances.

Plugins

Plugins på Minecraft er essensielle for å drive ein større server. Det kan ver plugins for å administrere moderering og banning på tvers av serverar, plugins for å stenge av spawn område, plugins for å lage portalar mellom server instances, osv osv. Naturligvis har me og behov for nokon plugins.

Plugins me brukte, der dei øverste er for server instances mens dei nedenfor er for proxy server

Me skal ikkje gå inn på alle plugins, ettersom der er mange småting som blei konfigurert. Men vi skal gå inn på det mest spennande!

LuckPerms er nok den viktigaste pluginen me hadde i sin heilheit, då det den gjorde var å passe på server rollar på tvers av instances. Dvs om man har moderator rolle på lobby, har man og moderator rolle på adventure server. Me hadde behov for ein felles database for den pluginen som alle serverane snakka til.

Ein anan plugin som krev database er CoreProtect, som loggar alt av aktivitet på kvar server, har rollback muligheit og mykje meir. Kontra LuckPerms krev den ein database per server, dog.

WorldGuard vart kun brukt på Minecraft Creative konkurranse server instancen, då der ikkje var behov for den andre plassar. WorldBorder blei brukt for å førehandsgenerere survival verdenane våre, som gjer me sparar mykje resursar på generering i produksjon.

Tall

Her kjem det som er gøy!

For vi rakk nemleg å bli ferdig med alt akkurat før tida, og hadde ein opplevelse som gjekk over forventningane når det kom til trøbbel!

Totalt var der 384 unike brukarar som besøkte serveren vår, med ein peak på 54 spelarar som var på serveren samstundes. TPS på alle instances var på 20 (det er perfekt) heile tida, utanom når folk lagde TPS-bombs med vilje. Men det blei kjapt rydda opp i.

Me hadde og ein testdag for å sjekke kor mykje ein server instance taklar med alle pluginsa me planla å bruke, på software oppsettet me tenkte å bruke. Då fekk me nær 50 brukarar som spelte samstundes, med ein TPS på 20, og CPU core load på 30%.

Anntal spelarar per tid

Eg vil gi ein stor takk til Christian Relling og Ole Mathias Aarseth Heggem for å bruke insane med innsats på å løyse plugins og det tekniske rundt prosjektet, og eg vil og takke alle byggarane, moderatorane, og støttespelarane rundt prosjektet som gjor at barn og unge fekk game litt samla i påska i år også <3

Link til alle kartene

Tech:Online, vinnere og oppsummering

15 Apr 2020, by from Tech

Da var Tech:Online avholdt. Det hele startet som en litt søkt idé, men vi fikk nærmere 30 påmeldte, cirka 20 fullførte. Vi fikk rett og slett ikke tid til alle!

Hele greia gikk ut på et enkelt konsept: Du som deltaker skulle konfigurere to deltakersvitsjer og en distroswitch så en simulert deltaker/klient kom seg på nett. Dette gjorde deltakerne (vanskelig å holde hvilke deltakere vi snakker om fra hverandre nå) på ekte hardware, ved hjelp av en raspberry pi som hadde 4 konsollkabler, en til hver av svitsjene involvert. Den simulerte deltakeren – la oss kalle det klienten – var en annen raspberry pi med statisk IP-addresse og en skjerm som lyste rødt for offline og grønt for online.

Det så cirka slik ut.

Tech:Online, med tre av fire stasjoner “i mål”.

I forkant av konkurransen holdt jeg to forskjellige stream sessions/foredrag/kall-det-hva-du-vil, med litt forskjellig fokus.

Alt i alt er jeg mektig imponert over hvor dyktig deltakerne var. Vi ble lovet tre billetter vi kunne dele ut, og det ble ikke lett. For det første måtte vi bruke mye skjønn: Det å sammenligne hvem som var raskest var veldig vanskelig, både fordi vi ikke egentlig hadde noen “stoppeklokke”, og fordi de som var først ut fikk en del forsinkelser som var utenfor deres kontroll. Med det sagt så lå fullføringstiden på mellom 1:30 (en time og tretti minutter) og 5:00. Jeg er mektig imponert over begge to: Selv om ting var godt dokumentert, var det flere mindre avvik fra dokumentasjonen, og uansett er dette ikke noe folk er vant til. Og det å holde ut i fem timer, og på toppen av alt be om en runde til etterpå for å se om man har lært, det fortjener ros.

Hvilket bringer oss til…

Vinnere!

Det er kåret tre vinnere, jeg går ut med “display navn” jeg, siden vi aldri formelt spurte om samtykke til noe mer (tid, og alt det der). De er:

- CafSneak
- ent3r
- Total_Ecl1ps3

De har alle tre vunnet hver sin billett til TG21! Delvis var dette basert på at de har utmerket seg, og delvis ble det trukket.

Alle som har deltatt og fullført har uansett grunn til å være fornøyd, godt jobba!

Bak kulissene

I skrivende stund slipper jeg koden som gjorde det mulig. Dette er rett og slett selve symbolet på det jeg vil kalle “hacking” i ordets opprinnelige forstand.

Du finner det på https://github.com/gathering/tech-online .

Det er MYE rariteter der, og det er ganske usminket. Les README.rst og “don’t try this at home”. Men et par ting vi har lært:

  • Vi burde hatt mer tid til å ettergå kabling og dokumentasjon før arrangementet. Dette visste vi egentlig i forkant, men tid er en begrenset ressurs.
  • Dokumentasjonen skulle vært RST hele tiden. Den ble konvertert til html i en one-off jobb, som gjorde at terskelen for quick-fixes ble for høy.
  • Det å jobb med en ekstrem tidsfrist er faktisk gøy! Da kan du ta snarveier du ellers ikke ville vurdert.
  • Vi skulle hat booking av tidsfrister og signup klar mye tidligere. Vi forutså rett og slett ikke at det ble så mange påmeldte, og vi visste ikke hvor lang tid folk kom til å bruke.
  • Bling betyr noe! Både det at nettsiden ble stylet fint og at det visuelle var litt pynta på var viktig.
  • Det blir en neste gang, men vi vet ikke når eller hvor eller hvordan!

Tech:Online?

19 Mar 2020, by from Tech

Da ble TG avlyst i disse COVID-19-tider. Nok er sagt om det, men mye var alt satt i bevegelse. Mange arbeidsdager er lagt ned i det.

Og vi (TG-crewet) prøver å stable på bena et alternativt arrangement i hurten og sturten, TG:Online. Hva dette vil være vet vi ikke helt enda, men det er uansett klart at Tech sin rolle vil være svært begrenset når vi ikke lenger skal levere nettverk og internett til 5000 mennesker.

Så jeg begynte å lure litt på hva vi kan gjøre?

En av tankene jeg har hatt er at vi har en masse nettverksutstyr vi ikke får brukt til noe. Jeg hadde selv behov for å labbe, så tok med meg litt stash hjem og så hva jeg fikk til.

Stue-lab, med “kant”, “distro” og “core”.

Så jeg leker litt med tanken på om vi klarer å levere noe sånt for flere? Vi har jo et tredvetalls konsoll-kabler og masse skjermer og NUCer på lager.

Man kan labbe virtuelt, men det har bare ikke den samme “feelingen” som fysisk utstyr har.

Hva om vi setter opp noe ala riggen på bildet, smeller konsoll-kabler på alt og lager en slags “capture the flag”-konkurranse der folk får mulighet til å konfe utstyret så pc’er kommer på nett? For å gjøre det litt gøy smeller vi på noe skjermer som “pinger” internett og litt sånt, med et webcam man kan følge med på? Gudene vet, men det høres gøy ut å prøve.

Aner ikke om det lar seg gjøre, men i mellomtiden labber jeg videre. Bli gjerne med i diskusjonen på TG sin Discord (#tech-kanalen) om dette er interessant!

The Gathering’s driftsløsninger

06 Mar 2020, by from Systemstøtte

Hvordan drifter vi egentlig gathering.org, Wannabe og alle de andre tjenestene som TG bruker?

Tenkte å blogge litt om hva vi i KANDU:Systemstøtte har drevet med den siste tiden.

Systemstøtte er i dag både en del av KANDU og et TG crew. Skillet her er for tiden litt uklart. Men det gir jo mening at de som utvikler og drifter crew systemet til TG, starter litt før de fleste andre, og tjenester som Jira trenger kjærlighet med (u)jevne mellomrom. Det innlegget her skal ikke handle om strukturen i arbeidsgruppa, men greit å være klar over at det gjøres mye også utenom The Gathering.

Vi har en stund jobbet med å fornye avtalene rundt hosting av servere, og fikk rett etter nyttår i havn en avtale med Nexthop AS for colocation. Spesifikt 20 rack units i et topp moderne datasenter i nærheten av Oslo.
For en organisasjon med frivillige gjør tilgang 24 timer i døgnet ting mye lettere.

Colocation?

Colocation eller colo som det ofte kalles, er kort fortalt tilgang på datahall til å plassere servere og/eller nettverksutstyr. Leverandøren av datasenteret tar for seg drift av strøm, kjøling og annen infrastruktur. Vi fått tilgang på et «halv-rack» (20U).

1U er 4,44 cm i høyden, og standard 19 inch rack er på 48,2 cm i bredden. En vanlig server er fra 1U til 4U, spesielt om du har mye disker kan den være enda større. Les mer om colocation på nexthop.no

Nettverk

Vi har også jobbet med vår partner Fortinet for å bygge en nettverksløsning til å bruke i det nye racket. Sammen med Fortinet har vi kommet frem til en løsning som vi er veldig fornøyd med.

(Med andre ord, det bør holde en stund fremover)

Under konfigurering av utstyret

Internett er levert av Nexthop over 2 redudante gigabit linker. Vi har fått et /26 nettverk med IPv4 og en /48 med IPv6. Vi kommer også tilbake med en ny bloggpost når vi hatt litt mer tid med utstyret.

Servere

Via samarbeidsavtalen vi har med Nextron på The Gathering, har vi gjennom årene fått litt servere. Målet er å flytte alt over til racket vi har hos Nexthop og vi er allerede godt i gang. Basefarm har også hjulpet oss med servere, litt utstyr og møtelokale.

Vi har mange spennende planer for driftsmiljøet fremover, og detaljene der vil helt garantert komme i en ny bloggpost etterhvert. Per nå er miljøet hos Nexthop tenkt til alt fra produksjonsmiljøer med Gathering.org og Wannabe til testing av nye løsninger og for å mette behov for hosting som crewet har før og etter selve arrangementet.

Merk at vi fremdeles kommer til å ha servere i skipet under The Gathering, dette er bare for tjenester som må kjøre utenfor TG.

Edit: TG20:Online

Utstyr på vei…

05 Mar 2020, by from Tech:Net

Fikk akkurat mail fra Juniper-kontakten vår om at ting er pakket og klart. Forventet levering om et par uker.

I år blir det 4 kolli, av 596kg.

Kos. Akkurat nok til å ta i sekken.

En av fire kolli, pakket og klart.

Påsken nærmer seg!

01 Apr 2019, by from Tech:Net

Oppdatering fra Tech om The Gathering 2019 designet

The Gathering 2019 rykker stadig nærmere, og det er på tide at Tech:Net skriver kort om årets nettverks design og hvilket utstyr vi skal bruke. Det blir ikke veldig spennende for dere som leste om fjoråret, da vi utstyrsmessig, stort sett kommer til å gjøre nøyaktig det samme i år som i fjor, men les gjerne igjennom for å friske opp minnene dine!

TG19 i korte trekk:
– Det blir Juniper switcher og rutere i kjerne og til deltagere.
– Det blir Fortinet brannmur og wifi.
– Det blir Telenor for Internett.
– Det blir Nextron for servere.

TG-19-design

Kjernenett

Helt siden TG15 har kjernenettet (backbonet) vært basert på 2x 40 Gbit Ethernet. Utstyr, og plasseringen av dette har vært litt ulik fra år til år, men i år blir det likt som i fjor.

Kjerneringen vår blir bestående av tre rutere:
– r1.tele (2x QFX5100 i VC): Grenseruter mot Telenor og aksess for infrastruktur servere. Står plassert i telematikkrommet i Vikingskipet hvor fiber kommer inn.
– r1.stand (4x QFX5100 i VC): Ruter for game-, event- og infrastruktur -servere samt wireless kontroller. Står (på utstilling) i Tech:Net sin stand i sponsorgata.
– r1.noc (1x MX480): Ruter for alle deltagere. Står plassert ved glassburet hvor NOC sitter.

Core og distribusjon til deltagere

I år, som i fjor blir det en sammenfallet kjerne (collapsed core) bestående av en Juniper MX480 og 9 distribusjonsswitcher med 3x Juniper EX3300 satt opp i vritual-chassis. MX480en blir plasser ved NOCen, og fra den har vi 2x 10 Gbit Ethernet på hvert sitt fiberpar ned til alle distro switchene på gulvet.

MX480en har vlanene for samtlige bordswitcher og gjør videresending av DHCP pakkene til DHCP serverene våre.

Vi har valgt å gå for denne modellen da vi over tid har lært at Juniper sine EX3300 switcher ikke er kraftige nok til å håndtere lag3 og DHCP videresending med de kravene vi stiller. Det har vært fler tilfeller i tidligere år hvor vi har opplevd problemer med disse switchene. MX480en har mye kraftigere hardware, og takler nettverk som er mye større enn hva vi produserer på TG. Vi kunne klart oss med lillebroren MX240, men disse har Juniper lite av på demolager, så er lettere å få tak i MX480er.

Aksess

Som tidligere år vil aksess til deltagere (og crew) gjøres via Juniper EX2200 switcher med 48 porter. På alle deltakerbordene blir disse levert med 3x 1 Gbit Ethernet. På disse switchene kjører diverse first-hop-secuirty policier slik at vi kan forhindre angrep på infrastrukturen vår, og forhindre nedetid for andre deltagere ved feil som oppstår grunnet feilkofingurasjon hos brukerene. Eksempelvis så forhindrer vi at deltagere kan kjøre egen DHCP server og skape uregelmessigheter i nettverket.

Leveranser til crew og misc støttefunksjoner under TG

Tradisjonelt har dette blitt gjennomført ved å utplassere enkeltstående rutere rundt om kring i kriker og kroker i Vikingskipet som kjørte OSFP ruting. Nytt av TG17 var at alle disse ruterne ble en logisk enhet ved bruk av en teknologi kalt Virutal Chassis. Da oppfører alle boksene seg som om de er en, men har mange linjekort. Det gjør at vi kun trenger å forholde oss til konfigurasjon på et sted.

Nytt av årets TG blir at vi utvider denne logiske boksen med et ekstra “linjekort” da vi på TG i fjor opplevde å gå tom for porter på det linjekortet som står plassert ved NOCen.

Denne ringen vil i år bestå av 2x EX4600 (24p), 4x EX4300 (24p) og det nye ekstra linjekoret EX4300 (48p). De to EX4600ene blir satt opp som master og backup routing engine da har litt kraftigere CPUer enn EX4300ene og følgelig håndterer bedre hendelser, og trafikk som trenger prosseseringskraft. Eksempelvis videresending av DHCP pakker, eller håndtering av brudd på forbindelser mellom switchene.
Denne boksen (ringen) blir satt opp med 1x 40 Gbit Ethernet mellom hvert linjekort.

På linjekortene i ringen kobler vi opp tilsvarende distrubisjonsswitcher som brukes på gulvet (EX3300). Disse fungerer som distribusjonswitcher til støttecrewene som kobler seg til i EX2200er som plasseres i nærheten av crewene.

Vi mottok utstyret vi låner fra Juniper forrige uke, og helgen som var møttes en gjeng fra Tech:Net i Oslo for å pakke ut. Noen nøkkelenheter ble oppgradert til Junos 18.1 (mer om hvorfor kommer nok i en egen post senere!), og fikk basic config.

EXene og QFXene vi låner kom i denne fine kassen:
VanVault

Og her har vi ringen, klargjort med basic config og stående i VC. Klar for å spres ut i skipet. Hvis noen lurer, EX4300ene til høyre i bildet har sine 40 Gbit Ethernet porter i baken!
Ringen

For å kunne spre boksen r1.ring utover hele vikingskipet er vi avhenig av god fiberinfrastrutkur i skipet. Det ble lagt ned en enorm insatts i dette for noen år siden, og hvis du ønsker å lese om det og se bilder kan du se her:

TG og KANDU Open Sourcer wannabe og gathering.org-koden!

01 Apr 2019, by from Systemstøtte

Over en årrekke har Wannabe, “crew-systemet” til The Gathering, utviklet seg til å bli et ganske sindig system for å ta i mot søknader til crew, generere dataunderlag til ID-kort, holde oversikt over hvem som skal rydde når, matallergier, og en hel skog av andre funksjoner som brukes for å avvikle The Gathering hvert eneste år.

Og i nesten like mange år har folk ønsket å bruke Wannabe til andre arrangementer enn TG. Dette er noe vi har lyttet til og i en lengre tid har det vært planlagt å slippe Wannabe som Open Source slik at du selv kan ta det i bruk – og bidra tilbake.

Hovedgrunnen til at det ikke har skjedd er den vanlige: Det krever at vi går litt over koden og sjekker at det ikke er noe åpenbart idiotisk der på sikkerhetsfronten, og så må vi faktisk gjøre litt praktisk planlegging av hvordan ting skal organiseres. Ikke mye, men litt.

I hvert fall siden jeg arvet “hovedansvaret” for wannabe i slutten av 2016, og Core:Systems ble “Rebootet”, har det ligget i kortene at Wannabe sin kildekode skulle slippes.

Så hvor er den?

Vel, teknisk sett ligger den på github, men fordi det er TG om et par uker har vi bestemt oss for at den rette tiden å slippe koden ikke er akkurat nå, siden eventuelle “katastrofalt dumme bugs” vil få så store konsekvenser. Derfor annonserer vi heller at koden vil bli sluppet offentlig litt etter TG, og den datoen er satt og godkjent som: 1. Juni 2019.

I samme slengen vil vi også legge ved koden som ligger bak gathering.org, da det ikke er noen grunn til at dette skal være lukket.

Så nå har dere noe å se fram til!

Om dere har noen spørsmål, ta gjerne kontakt på discord! (å finne discord’en vår er overlatt til leseren som en ferdighetsprøve).

Intro: Webservere og slikt

16 Mar 2019, by from Systemstøtte

Om du fulgte med veldig nøye på ettermiddagen søndag 3. mars så la du kanskje merke til at www.gathering.org var utilgjengelig i en liten stund. Perioden med nedetid var varslet i god tid i forveien (ca 30 minutter) slik at alle i crewet visste hva som foregikk (her kommer altså forklaringen så alle i crewet vet hva vi gjorde).

Historien begynner med at noen små og store nerder satt samlet på Frivillighetshuset i Kolstadgata 1 i Oslo. KANDU:Systemstøtte hadde hatt møte dagen før og vi hadde blitt enige om at vi måtte gjøre noe med hvordan www.gathering.org fungerte. Før vi begynte bestod nettsiden av en server med en salig blanding av Apache, Varnish, WordPress, og vår egenutviklede Node.JS baserte web API. Konfigurasjonen var så komplisert at var lett å gjøre feil som kunne være vanskelige å nøste opp i. Vi bestemte oss derfor å bygge alt opp på nytt igjen. Dette er forklaringen på hva vi endte opp med, og en intro til hvordan det fungerer.

HTTP og HTTPS

Når du åpner en nettside med alle moderne nettlesere så benytter du en protokoll som heter Hypertext Transfer Protocol (eller bare HTTP). Protokollen håndterer å hente og sende informasjon til nettsider på en standardisert måte. Du har sikkert lagt merke til at foran de fleste linker så står det noe lignende http://example.com. Dette er en instruks for nettleseren om å prøve å nå example.com over http protokollen.

Det eneste problemet med protokollen er at alt du sender over den er fullt leselig for alle som lytter. Noen glupe hoder fant ut at om du legger til en S på slutten av HTTP så får du HTTPS, og “S”en står for “Secure”. Når nettleseren prøver å nå serveren så blir de enige om en felles krypteringsnøkkel slik at de kan kommunisere med hverandre uten at andre kan se hva som blir sendt. Metoden heter Diffie-Hellman key exchange (DH) og du kan lese mer om den her.

Før vi bygget om stacken vår så var det Apache som hadde ansvaret for å ta imot HTTPS tilkoplinger, men det var lett å lage redirect looper mellom Apache og Varnish (hvor nettleseren din blir sendt frem og tilbake mellom Apache og Varnish i all evighet) så vi valgte en annen metode. Vi installerte Hitch på serveren og konfigurerte den til å bruke et SSL/TLS sertifikat fra Let’s Encrypt. Hitch gjør ingenting annet enn å ta imot tilkoblingen, dekryptere den og sende forespørselen videre til neste ledd i prosessen.

Caching og reverse proxy

Nå som Hitch tar imot HTTPS så trenger vi å route forespørslene til riktig sted. Til det installerer vi Varnish. Varnish er egentlig en webcache, men programvaren har mange kraftige funksjoner som gjør det praktisk å bruke den som en proxy også.

Siden www.gathering.org består av to forskjellige biter i bakgrunnen trenger vi å proxye (videresende) alle forespørsler for https://www.gathering.org/api til WordPress, mens resten går til en Node.JS basert applikasjon på https://www.gathering.org/tg19. Fordelen med en reverse proxy her er at du som bruker av nettsiden bare trenger å forholde deg til en webadresse, mens webserveren som tar deg imot kan benytte mange tjenester i bakgrunnen uten at du legger merke til det.

Men hva er en cache? En cache er et mellomlager mellom deg og nettsiden som gjør responsen fra nettsiden raskere. Når du kobler til en webside så må webserveren generere en versjon av nettsiden for deg. Dette kan være en tung oppgave og kan ofte være treg. Det cachen gjør er å ta vare på en kopi av nettsiden, så når neste person spør om samme nettside så svarer Varnish bare med den mellomlagrede kopien istedenfor å la webserveren generere en helt ny en. Dette fungerer bare en liten stund, for etterhvert så endrer jo innholdet på nettsiden seg når det blir publisert nye artikler og slikt, så Varnish kan bare mellomlagre sider i maksimalt noen minutter. Kanskje bare så lite som noen sekunder hvis innholdet endrer seg fort. I www.gathering.org sitt tilfelle så lagrer vi dataen ganske lenge for vi har satt det opp slik at dersom noe innhold endrer seg så sendes det en beskjed til Varnish om å slette den mellomlagrede kopien.

Hva skjer etterpå?

Nå som forespørselen er kommet gjennom Hitch og Varnish så ender den enten opp direkte i vår Node.JS applikasjon eller så treffer den Apache som leverer WordPress siden. Totalt sett så ser arkitekturen vår slik ut.

Webserver arkitektur for www.gathering.org

Hvordan vi bruker WordPress og vår egenlagde frontend kommer vi nok tilbake til i en senere bloggpost (og kanskje kan du få tatt en titt på koden?).

About

TG - Technical Blog is the unofficial rambling place for The Gathering.