Door Anoniem: Door Anoniem:Een hoge uptime is een mindset van de jaren 90 .
Vooral omdat het beheerteam dan steeds banger wordt om noodzakelijke dingen te doen - wat komt de server wel goed terug - mensen installeren dingen , patches, services worden handmatig gestart (of gestopt) of herstart - en hopelijk wordt alles in de startup goed gezet dat het ook bij een reboot werkt.
Het maakt nogal uit of je systeem dat testen faciliteert. Heb je een systeem waar je dingen met de hand kan doen én je stukken van de opstartroutine handmatig kan doorlopen, dan is het niet heel lastig om wijzigingen aan te brengen die met hoge zekerheid ook bij de volgende reboot correct zullen worden uitgevoerd. (*BSDs met hun rc.conf en bijbehorende shellscripts.)
Dat zijn allemaal deeltesten - een gehele test kost je een reboot. Een deeltest geeft je (ook) ook een gedeeltelijke storing meestal (herstart van een service ) .
Daarnaast zijn er de afhankelijkheden die de rest van het server landschap heeft op de server die eventueel in storing gaat.
Ook daar kunnen dingen langzaam insluipen.
Of je serverpark. Je wil je testen niet op productieservers doen, en een buildbox om zelf patches toe te passen of custom packages te klussen is ook erg handig.
Ook bij de grotere namen waar ik gewerkt hebt was ontwikkel en test een 'representatief schaalmodel' van productie.
Er is dan _nooit_ sprake van een blinde rsync van test naar productie , maar wat 'kleine wijzigingen'. Andere NIC , ander subnet, host of domein (domain.prod, domain.test ). Minimaal, niet relevant voor een functionele test, maar het betekent dat je bij omzetten naar productie 'wat moet aanpassen'.
Of iets echt werkt - zeker redundantie en disaster recovery weet je uiteindelijk pas als je dat een keer test.
En als iemand praat over jaren uptimes - dan hoor ik dus 'jaren niet getest' . Of testen alleen maar in het testlab gedaan - heel goed, dat moet je eerst doen. Maar niet voldoende.
De voortgang op alle vlakken naar een snelle startup - van journaled filesystems naar parallele initialisaties is daardoor gedreven.
Met als prijs een vrijwel complete onbeheersbaarheid door een zekere software-suite. (*kuch* poettering z'n rotzooi *kuch*)
Tsja , in een IT carriere moet je eens in de zoveel jaar eens _echt_ iets nieuws gaan leren.
Fantastisch dat je van 1980 tot 2010 kon voortkabbelen met grosso modo hetzelfde, maar soms gaat de wereld even in een stroomversnelling.
[..]
Overigens heb ik nog veel snellere startups gezien dan wat tegenwoordig voor "noodzakelijk" wordt gehouden, op veel minder snelle hardware. RISCOS direct uit ROM is daar een voorbeeld. Crasht weleens, maar herstart binnen een paar seconden, en dat op hardware waarbij de megahertzen nog in de lage tientallen lopen.
Mijn C64 met 0.9 Mhz wint het daar nog van. sub-seconde boot. Ja en.
Ringkern geheugen was non-volatile . Nice.
Met de stap naar virtualisatie volgt dat de "hardware" configuratie lang niet zo stabiel meer is als in de tijd van bare metal servers - allerlei voorheen statische devices zijn hot-pluggable geworden. disk-controllers, NICs, en zelfs CPUs .
Dat is ook niet nieuw. Alleen heette hardware die dat soort fratsen had vroeger "mainframe". En had het beter voorelkaar dan "servers" die eigenlijk nog steeds aannemen dat er altijd iemand voor het apparaat zit om op een knopje "ja schiet nu op doe nu maar" te drukken of te klikken.
Huh ? De reden dat 'hot-plug' zo normaal is, is dat je dat een VM management console doet - maar het guest OS moet omgaan met het feit dat z'n "platform" andere specs krijgt . Je hoeft echt niet voor een server te staan om een VM meer of minder resources te geven.
Dat is waarom systemd zo snel en breed de startup wereld heeft overgenomen .
Daar zit vooral een groot stuk politieke druk achter, red hat vs. oracle die druk bezig is red hat hun lunch te jatten.
Dat is een heel rare theorie voor een bijna totale overstap die alle distro's van enige betekenis gedaan hebben
Het _landschap_ van grootschalig Unix beheer is veranderd, en iedere distro die daarin relevant wil blijven moet iets leveren waarin snelle boottijden en beter dependency beheer van services tijdens opstarten geregeld is.
Dat is ook wel duidelijk als je tussen de regels doorleest: De executie van die code is werkelijk om te huilen. Dat kan zoveel beter. Sterker nog, er bestonden betere en robuustere alternatieven geschreven door mensen die wel "met de community" samenwerkten en zich niet gedroegen als arrogante huilebalken. Dus waarom deze prutsers hun code overal binnen wisten te wurmen? Politiek gekonkel. Binnen een wereldje van techneuten die helemaal geen zin hebben in politiek gekonkel en er dus ook helemaal niet op bedacht zijn als ze wel ineens aan alle kanten gemanipuleerd worden.
Zo'n beetje alle klaagzangen die ik tegenkwam lazen als hobby admins en mensen die 'ambachtelijk' beheren op kleine schaal .
En van alle spelers die werkelijk Unix systemen op heel grote schaal gebruiken kwamen de klachten niet . Noch een alternatief systeem . Waar ze wel degelijk de developers hebben om waar nodig hun eigen wensen te laten implementeren.
Dan ben ik heel snel klaar met samenzweringenstheorieen en zielige techneuten die niet zouden kunnen manipuleren .
Alle distro's die in het segment van grootschalig en geautomatiseerd Linux gebruik spelen zaten met hetzelfde probleem - en kozen allemaal voor systemd . Dan is er toch echt iets wat de alternatieven _niet_ boden, en dat is een oplossing voor het probleem.
En ik heb me gerealiseerd dat het verkeerd is om _bang_ te zijn voor een reboot , en daarop zijn we structureel failovers gaan plannen - met reboots. En roulerend over het beheerteam.
Verstandig, maar ik hoop dat het niet het enige is wat je gedaan hebt, want:
Als je praat over uptimes van jaren , dan heb je mensen in je team die gewoon nog nooit een reboot/outage van die server hebben meegemaakt. Maar wel meelopen in een on-call rooster . Dat is geen gezonde situatie.
Alleen maar productie en geen speeltuin voor (aankomend) beheerders is ook niet goed.
In het pierenbadje moet je leren, maar ooit moet je in het diepe.
Je bouwt je systemen zo goed mogelijk, je bouwt redundantie waar haalbaar/mogelijk/gewenst, en je doet maintenance en failover testen horen daarbij - ook op productie. Dat is uiteindelijk waar je dingen redundant voor hebt - omdat een component uit moet kunnen vallen.
Of, als de keus gemaakt dat ze niet redundant hoeven, waarom je soms een (geplande) outage moet accepteren vanwege maintenance.
Een deel van de 'redundantie' is vaardigheid en zelfvertrouwen bij alle personen die de lul kunnen zijn als het onverwacht nodig is.
En daarbij stap je dus af van de ultra-hoge uptimes op individuele systemen als doel en 'bragging rights' .
Wat gepionierd is door Google ooit - bouw je _dienst_ op de mogelijkheid dat hardware - servers, racks, datacenters - kan uitvallen - en zonder dat de _dienst_ daar fataal last van heeft. Dat was een enorme omzwaai van de mainframe (en high end server) mindset van extreem betrouwbare (en extreem dure) single points of failure zoals een centraal mainframe .
Dat kon ook alleen maar gezien de structuur van zowel de dienst, zoekresultaten en als je hier geen antwoord krijgt vraag je het toch ergens anders, als de "connectionless"-heid (tcp niet, http wel) van webaanvragen. Maar dat gaat lang niet altijd op en je programmas zo bouwen dat de "state" automatisch wordt bijgehouden is niet eenvoudig. Tenzij je bouwt op iets dat dat wel biedt. AS/400 is hier een voorbeeld van.
Dat is een beetje te simpel antwoord - onderliggend aan search is een waanzinnig grote database - die dus ook verspreid en ultra-high available is. Als _dienst_ . Niet als individuele server, rack of DC.
En op dat storage concept is 'gmail' gebouwd. Ook erg gedistribueerd.
Pre-google (en legacy) denkt men nog steeds in "database, redundante server, database replicatie naar tweede datacenter op enkele tientallen kilometers afstand ' e.d.
Als je zegt 'state' zeg je feitelijk meteen 'beperkt schaalbaar en moeilijk redundant te maken' . Dat is inderdaad precies waarom de klassieke oplossingen een schaalplafond hebben.
Het vergt inderdaad wel een andere manier van denken aan de programmeurskant - en dat is wat google destijds zo bijzonder maakte - vergeleken met ooit Alta Vista.
Uptime was een beetje een fad, en een van de eerste keren dat ik daar wat perspectief op zag was toen iemand vloekend en tierend mijn reguliere irc-hangout binnenkwam. Stroom was uitgevallen, uptime van echt heel veel jaren (10+?) foetsie. Dat was een VAX, zo'n hele grote. Zelfs de beste Unix kon daar niet aan tippen. VMS met hun clustering had ook hele hoge uptimes. Dat maakt de Unix wereld, zeker de vrije Unix-achtigen, met hun streven naar zoveel mogelijk dagen uptime lief, maar toch een beetje amateuristisch.
Je kan het tegenwoordig nog steeds wel, inclusief updates. Er zijn live-patching truuks voor de linux kernel bijvoorbeeld. Maar eigenlijk is dat een beetje hopeloos. Het probleem zit hem erin dat eigenlijk alle enigszins gebruikelijke OSen nog steeds monolithisch zijn (inclusief macos, ja). Met een (echte) microkernel kun je bijna alles live updaten behalve de microkernel zelf en wellicht de driver van je rootdisk, en dat zonder allerlei extra code in je kernel om het mogelijk te maken. Heb je clustering en procesmigratie dan kun je zelfs de microkernel vervangen. Het probleem is alleen dat die techniek wel bekend is, maar overwegend niet in productie buiten een paar niche-toepassingen. Wat dat betreft is de state of the art nog steeds opgekalefaterde desktop uit de '90s.
Je lijkt het concept nog niet te snappen - het gaat NIET (meer) om hoge uptimes of rete ingewikkelde software truken om een bepaald draaiend systeem eeuwig draaiend te houden.
Dat systeem draait met een _reden_ . Om DNS queries te beantwoorden. Of om via IMAPS mail aan te bieden. Of om betalingen mee te verrichten. Of om F1 races mee te streamen. *Dat* is wat door moet draaien - die DNS antwoorden, of de mogelijkheid om de mail te blijven ophalen, of de betalingen te doen,of die films te kijken.
De state of the art is niet om dat door de dezelfde bak ijzer in het hetzelfde rack in hetzelfde datacenter te laten doen, maar te zorgen _dat_ het 'altijd' _ergens_ gedaan wordt als erom gevraagd wordt. En dus de koppeling tussen de beschikbaarheid van de dienst aan de beschikbaarheid van een individuele server weg te halen.
Als je om de een of andere reden gebonden bent om dat met heroische inspanning door diezelfde bak te laten doen terwijl daar van alles live op gepatched moet kunnen worden - dat is steeds meer een (legacy) niche - misschien nog een vrij grote niche (ik geloof dat mn Oracle er veel op inzet) , maar m.i. conceptueel achterhaald.