Gebouwd om opnieuw te bouwen
Hoe we het bouwen en draaien
Alles wat we draaien staat in Europa, op een mix van beheerde clouddiensten en gehuurde servers die we zelf beheren, en elke server is vastgelegd in code. Geen enkele server is ooit met de hand ingericht. Zou het hele platform morgen verdwijnen, dan is het opnieuw op te bouwen uit de repository en een back-up - want dat is precies wat we deden toen we van datacenter wisselden.
- Elke server vastgelegd in code. Nul met de hand ingericht.
- Back-ups meerdere keren per uur, versleuteld, bij een tweede aanbieder.
- Mislukte releases draaien zichzelf terug in ongeveer één seconde.
- Opnieuw opgebouwd in een ander datacenter, uit code en een back-up.
- Servers praten onderling over privénetwerken, niet over het open internet.
Infrastructuur die je vanaf nul kunt herbouwen
Alles draait in Europa op gehuurde infrastructuur: beheerde clouddiensten waar een aanbieder het werk het beste doet, en gehuurde servers die we zelf beheren. Elke server, elke firewallregel en elke dienst is vastgelegd in code en staat onder versiebeheer. Er wordt niets in elkaar geklikt in een controlepaneel, en niets bestaat alleen in iemands hoofd.
De servers staan achter een load balancer, dus capaciteit erbij betekent er een starten - niet iets herbouwen. Er schaalt niets uit zichzelf: dat is een bewuste keuze. Het houdt een jong project goedkoop om te draaien, en laat ruimte op de dag dat het dat niet meer is.
Die bewering is op de harde manier getest. Het hele platform is tussen datacenters verhuisd door elke server te vernietigen en opnieuw op te bouwen uit de repository, met een database-upgrade in hetzelfde tijdvak. Het kwam terug uit code en een geverifieerde back-up.
Code
Elke server en instelling, onder versiebeheer
Terraform
Bouwt de servers, het netwerk en de firewall
Ansible
Richt elke server in: webserver, database, updates
Wat er online draait
Bezoekers
Load balancer
Verdeelt het verkeer
Privénetwerk
Webservers
Database
Routing en workers
Routeplanning en achtergrondtaken
Versleutelde back-ups
Bij een tweede aanbieder
Releases die zichzelf terugdraaien
Een nieuwe versie wordt in een eigen map gebouwd terwijl de huidige gewoon verkeer blijft afhandelen. Zodra hij klaar is, schakelt één verwijzing direct om. Daarna wordt de nieuwe release gecontroleerd, en faalt die, dan klapt de verwijzing meteen terug naar de vorige versie - zonder dat er iemand gebeld hoeft te worden.
Terugdraaien is geen herbouw. Het is diezelfde omschakeling van één seconde, op elk moment beschikbaar.
Jouw data, meerdere keren per uur gekopieerd
Alles wordt meerdere keren per uur geback-upt. Hoe vaak precies hangt af van hoe goed die data terug te halen is: wat het platform in het ergste geval zelf opnieuw kan opbouwen, kan een langer gat hebben dan iets wat iemand één keer heeft ingevoerd en nooit meer zou invoeren. Alles wordt versleuteld voordat het de server verlaat en opgeslagen bij een tweede, onafhankelijke aanbieder - zodat een slechte dag bij één bedrijf niet zowel het platform als de back-ups meeneemt.
Terugzetten is één commando, en dat is echt uitgevoerd, niet alleen opgeschreven.
Luisteren naar de stilte
Iedereen kan alarm slaan op een server die in de fik staat. De lastigere storing is de back-up die stilletjes stopt met draaien. Elke back-uptaak hier moet zich melden bij de start en bij het einde, en een gemiste melding slaat uit zichzelf alarm.
Daarnaast rapporteert elke server zijn eigen gezondheid, worden applicatiefouten verzameld op het moment dat ze optreden, en worden pakketten van derden doorlopend gescand op bekende kwetsbaarheden en supply chain-compromissen.
Een gevonden kwetsbaarheid blijft niet wachten tot iemand hem opmerkt: beveiligingsupdates worden automatisch toegepast. Scannen vertelt je dát er iets mis is - dit lost het op, ook op een zondagochtend. Die dekking is gekocht, niet aangenomen: het patchen loopt door voor het volledige pakket aan open source software dat een server gebruikt, en niet alleen voor de kleine kern die het standaard krijgt. Er valt dus niets stilletjes uit ondersteuning terwijl het nog draait.
Inloggegevens die niemand per ongeluk kan lezen
Productiegegevens zijn versleuteld opgeslagen en staan nooit in leesbare vorm. Infrastructuursleutels en applicatiesleutels liggen op gescheiden plekken, zodat het ene systeem niet bij de geheimen van het andere kan. En niets wat een inloggegeven aanraakt kan het in een logbestand zetten.
Privacy by design, niet in de kleine lettertjes
De goedkoopste data om te beschermen is de data die je nooit hebt verzameld. De eerste vraag bij een ontwerp is hier dus niet hoe we iets beveiligen, maar of we het überhaupt moeten vastleggen. Die keuze valt vroeg, want vroeg is het enige moment waarop hij goedkoop is: hij bepaalt wat een product mag zijn - een kaart van plekken, niet van personen - en hij zit in het ontwerp, niet in een instelling die later uit kan.
Waar iets wél herkend moet worden, gebeurt dat zonder de persoon te bewaren, en niet langer dan de taak nodig heeft. Bezoekersstatistieken draaien op een server die we zelf beheren, zonder cookies, zodat er geen derde partij meekijkt met jouw bezoekers. Alles staat in Europa.
Voor werk van klanten geldt dezelfde standaard, en je kunt hem op je eigen site loslaten: de AVG Privacy Check laat zien wat een pagina werkelijk laadt en wie er meekijkt met je bezoekers.
Kort gezegd
- Hosting
- Beheerde cloud en gehuurde servers in Europa, load balanced, alles vastgelegd in code.
- Uitrollen
- Directe omschakeling met automatisch terugdraaien.
- Back-ups
- Versleuteld, meerdere keren per uur, bij een andere aanbieder.
- Monitoring
- Gezondheid per server, foutregistratie en een dodemansknop op elke back-up.
- Beveiliging
- Privénetwerken, versleutelde inloggegevens, automatische beveiligingsupdates.
- Privacy
- Geen persoonsgegevens waar het niet hoeft, statistieken zonder cookies, alles in Europa.
Wil je deze standaard op je eigen project?