Inleiding
Afgelopen september hebben we weer flink wat oude servers in de verkoop gedaan. In de daarbij horende discussie werd er enthousiast op gereageerd, maar ook gezegd dat het tijd werd voor een update over de hardware die we nog wél hebben. Dat waren we met jullie eens; dit artikel is een vervolg op ons verhaal uit 2013. Hoewel er allerlei servers zijn vervangen, is de architectuur grotendeels gelijk gebleven. Daarom richten we ons vooral op de verschillen in software en hardware, en leggen we niet van alle software opnieuw uit waarom we die nog steeds gebruiken.
In totaal zitten we nu op 27 fysieke servers, twaalf pdu's, negen switches, drie loadbalancers en drie firewalls. Dat alles is nog steeds verspreid over twee locaties. De hoofdlocatie wordt gesponsord door True en is daardoor uiteraard voor ons het goedkoopst. Omdat de bandbreedte, de ruimte en het stroomverbruik voor ons gratis zijn, sturen we normaliter vijfennegentig procent van ons verkeer hierheen. De andere locatie krijgt vijf procent, om op die manier de caches 'warm' te houden en ons ervan te verzekeren dat alle hard- en software nog goed werken.
Toch zie je dit onderscheid in hoeveelheid verkeer bij bepaalde keuzes terugkomen. Als een van de twee locaties ergens 'meer' van heeft, dan is dat telkens de hoofdlocatie. Op die locatie hebben we bijvoorbeeld een redundante 10Gbit-verbinding, met bijpassende switches en firewalls. De uitwijklocatie moet het met 'slechts' 1Gbit doen. Meer over die netwerkhardware kun je lezen in onze recente .plan.
Met de bovenstaande lijst servers hebben we nog steeds vrijwel dezelfde structuur als in 2013. Het is nog steeds een 'uitgebreide' LAMP-stack, hoewel we op dit moment twee verschillend ingerichte webservers hebben en geen OpenSolaris meer gebruiken voor de opslag.
Webservers
Onze drie loadbalancers verdelen het verkeer over de diverse webservers, althans er zijn er op ieder moment steeds maar twee actief, omdat we in onze hoofdlocatie twee loadbalancers in active-passive-modus hebben staan. De loadbalancers zorgen er bovendien voor dat het verkeer via gslb over de twee locaties wordt verdeeld. De standaardverdeling daarbij is 95/5 procent, maar dat wordt automatisch op honderd procent ingesteld als een van de locaties niet meer werkt.
Een groot verschil ten op zichte van de webservers van 2013 is dat we nu twee typen webservers gebruiken. Het eerste type is verantwoordelijk voor de 'statische content', zoals onze javascript, css en (dynamisch gegenereerde) afbeeldingen. Het tweede type is verantwoordelijk voor de 'application'. Daarmee doet dit het leeuwendeel van de php-verwerking en genereert dit type dus de uiteindelijke html.
Hoewel deze opsplitsing verschillende voordelen biedt, vormde één specifiek soort downtime de aanleiding hiertoe. Af en toe was onze nfs-server even niet bereikbaar, waarna in rap tempo alle 'workers' van Apache bezet raakten omdat ze wachtten op een reactie van de nfs-server. Zelfs als de daadwerkelijke onbereikbaarheid van de nfs-server maar enkele seconden duurde, kon dit grote gevolgen hebben voor Apache. Vaak moesten we Apache herstarten en de disk remounten om het probleem op te lossen. Soms moesten we zelfs de server opnieuw starten.
Dit probleem verdwijnt natuurlijk niet door webservers in twee typen op te splitsen, maar daarmee bereiken we wel dat alléén de plaatjes en andere statische content op een dergelijk moment onbereikbaar zijn. Overigens is intussen ook de nfs-configuratie aangepast, waardoor het in de praktijk niet meer voorkomt.

Statische-contentserver
De splitsing gaf ook ruimte om zaken specifiek voor hun doel te optimalizeren. Zo hebben de statische-contentservers een grotere in-memory Varnish-cache (15 versus 5GB) en zijn de 'application'-servers juist voorzien van onze Java Engine, die we ook gelijk wat meer geheugen hebben gegeven. Verder gaan we nog bekijken of het eerste type server een andere http-daemon moet krijgen. Apache werkt erg goed en biedt krachtige functionaliteit, maar voor statische content zijn er efficiëntere webservers beschikbaar, zoals nginx en lighttpd.

2x 'application'-server
Voor meer informatie over al die software kun je onze vorige versie doorlezen. Aan de inrichting is verder weinig veranderd.
Onderdeel |
2013 |
2015 Application |
2015 Statische content |
Hoofdlocatie |
3x IBM x3550 M3 |
3x IBM x3550 M5 |
2x IBM x3250 M5
|
Uitwijklocatie |
3x IBM x3550 M3 |
1x IBM x3550 M5 |
IBM x3250 M5 + x3250 M4
|
Cpu |
2x Xeon X5675 (3,06GHz 6C) |
2x Xeon E5-2640 v3 (2,6GHz 8C) |
M5: Xeon E3-1271 v3 (3,6GHz 4C) M4: Core i3-3220 (3,3GHz 4C) |
Geheugen |
6 x 4GB (24GB) |
8 x 8GB (64GB) |
4 x 8GB (32GB) |
Disk |
146GB 10K SAS |
500GB SATA |
M5: 250GB SATA M4: 64GB SSD |
Apache |
*.tweakers.net *.tweakimg.net |
*.tweakers.net (behalve static.tweakers.net) |
static.tweakers.net *.tweakimg.net |
Varnish |
5GB |
5GB |
15GB |
Tomcat |
8GB |
10GB |
n.v.t. |
ActiveMQ |
2GB |
2GB |
2GB |
Ten opzichte van 2013 hebben de nieuwe application-webservers veel meer ram gekregen. De 24GB was wat aan de krappe kant voor de combinatie van Varnish, Apache, Tomcat en ActiveMQ. Met die 64GB hebben ze voorlopig nog behoorlijk wat geheugen vrij. De statische-contentservers hebben met 32GB ook meer geheugen gekregen dan de oude servers, maar doordat de Varnish daarvan meer geheugen toegekend heeft gekregen, is die extra ruimte onmiddellijk alweer in gebruik genomen.
Hoewel er per application-webserver nu vier cpu-cores extra zijn, lijken ze aan de hand van de specificaties per cpu-core iets langzamer. In werkelijkheid valt dat reuze mee, omdat de E5-2640 v3 drie generaties nieuwer is dan de X5675 en daardoor meer werk per clock tick kan doen. Zodra turboboost actief is, loopt het verschil in kloksnelheid ook nog eens terug, de E5-2640 haalt maximaal 3,4GHz op een of twee cores en de X5675 3,46GHz.
/i/2000813709.png?f=imagenormal)
De statische-contentservers zijn overigens nog wel een stuk sneller met singlecore-prestaties. De Xeon E3-1271 v3's hebben tenslotte min of meer dezelfde cpu-architectuur, maar hebben een minimale kloksnelheid van 3,4GHz en kunnen dat met turboboost verhogen tot maximaal 4GHz.
De redundantie van de servers is met de genoemde splitsing ook anders ingericht en dat was meteen onze eerste serieuze afwijking van het originele plan om de locaties te spiegelen. Op de hoofdlocatie hebben we volledige redundantie voor de application-webservers, omdat zij vijfennegentig procent van het verkeer moeten verwerken. Als we ook voor de andere vijf procent drie van die dikke servers hadden moeten plaatsen, hadden we flink moeten inleveren op de capaciteit per server om binnen ons budget te blijven. Servers plaatsen die vervolgens weinig werk krijgen, vonden we een te groot offer.
Volgens onze schattingen kan één dergelijke application-webserver op een normale dag al het verkeer aan, daarom hebben we er in de uitwijklocatie ook maar een geplaatst. Uiteraard zal die ene overgebleven server het bij uitval van de hoofdlocatie wel gelijk behoorlijk druk krijgen. Om dat effect te minimaliseren zijn de loadbalancers geconfigureerd om bij hoge load ook de statische-contentservers in te zetten voor het tweakers.net-domein. Uiteindelijk zijn daardoor in de hoofdlocatie nu maximaal vijf webservers beschikbaar en in de uitwijklocatie, net als voorheen, maximaal drie.
Video en virtualisatie
Ons videoplatform draait ook al enkele jaren lokaal op software van StreamOne. Sterker nog, dat was een van de redenen voor de upgrade naar 10Gbit. We draaien ondertussen met drie streamingservers, waarvan er een in de uitwijklocatie is geplaatst.
In 2013 hadden we nog dedicated servers voor het transcoden van video's, maar door de aanschaf van nieuwe vm-hosts was de rekenkracht daarvan voldoende toegenomen. Kortom, die extra servers waren overbodig geworden.
Onderdeel |
Streaming 2013 |
Streaming 2015 |
Server |
2x Dell R210 |
3x IBM x3250 m4 |
CPU |
Core i3 530 (2,93GHz 2C) |
Core i3 3220 (3,3GHz 2C) |
Geheugen |
2x 4GB (8GB) |
4x 8GB (32GB) |
Disks |
1x 160GB SATA |
64GB MLC SSD + 900GB 10k SAS |
De nieuwe streamingservers hebben veel meer geheugen, waardoor de diskcache van Linux een groter aantal video's kan vasthouden. In eerste instantie gingen we ervan uit dat de 64GB-ssd's genoeg capaciteit zouden hebben voor het 'lokaal' cachen van videobestanden. Helaas zijn die bestanden zo groot en worden er zoveel verschillende bekeken, dat het cache-algoritme niet genoeg had aan die 64GB-ssd's. Onze pas uit gebruik genomen NoSQL- en searchservers waren voorzien van 900GB-sasdisks en die hebben we daaruit verhuisd naar de nieuwe streamingservers.

Vm-server (boven) en videoserver (onder)
Virtuele-machinehosts
We hebben ook een aantal servers nodig als host voor de virtuele machines die we hebben. Voor de meeste taken gebruiken we bare metal, maar er is een aantal services die te klein zijn om een eigen server te krijgen. Onder andere de eerder genoemde transcoding-back-end van het videoplatform, de irc-servers en mailfilters zijn gevirtualiseerd.
In vergelijking met 2013 zijn we van twee naar drie servers gegaan. Twee daarvan hangen in de hoofdlocatie en de derde in de back-uplocatie. De hardware is niet significant veranderd. De nieuwe cpu's hebben iets meer kernen en zijn uiteraard twee generaties nieuwer. Verder hebben we de diskruimte uitgebreid om, waar nuttig, vm-images lokaal te kunnen hosten, in plaats van gedwongen te zijn alles van onze nas te laden. De hypervisor is nog steeds KVM boven op Ubuntu LTS.
Onderdeel |
Virtual machine hosts 2013 |
Virtual machine hosts 2015 |
Server |
2x Dell R410 |
3x IBM x3550 M4 |
Cpu |
2x Xeon E5630 (2,53GHz, 4C) |
2x Xeon E5-2630 v2 (2,6GHz, 6C) |
Geheugen |
64GB DDR3-1066 |
64GB DDR3-1866 |
Disks |
1x 250GB |
2x 1TB 7,2k |
Database en filestorage
Voor de opslag van bestanden en gegevens hebben we allerlei servers in gebruik. Sinds het vorige verhaal zijn de desbetreffende servers allemaal vervangen. We gebruiken nog wel dezelfde typen databases.
MySQL
In de onderstaande tabel lijkt het alsof we een server hebben doorgeschoven van master 2013 naar slave 2015. In werkelijkheid hebben we een paar maanden na het vorige artikel een tweede x3550 M4 aangeschaft en vervangen we rond de publicatiedatum van dit artikel de 'master 2013' (eigenlijk al 2012) door een 'master 2015' 
Een andere wijziging is dat we zijn overgestapt van MySQL naar Percona Server. Dat is een MySQL-distributie die zich wat meer richt op prestaties en wat eerder nieuwe servertechnieken bevat. Enkele voorbeelden zijn betere I/O- en cpu-schaling, en zaken als NUMA-ondersteuning.
Onderdeel |
Master 2013 |
Slave 2013 |
Master 2015* |
Slave 2015 |
Server |
IBM x3550 M4 |
Dell R710 |
HP DL360 |
IBM x3550 M4 |
CPU |
2x E5-2643 (3,3GHz 4C) |
2x X5660 (2,8GHz 6C) |
2x E5-2643 v3 (3,4GHz 6C) |
2x E5-2643 (3,3GHz 4C) |
Geheugen |
16x 16GB (256GB) |
12x 4GB (48GB) |
16x 16GB (256GB) |
16x 16GB (256GB) |
OS-disks |
2x 250GB SATA |
2x 300GB 10k SAS |
2x 80GB MLC SSD |
2x 500GB SATA |
Datadisks |
6x 256GB MLC SSD |
6x 50GB SLC SSD |
6x 240GB MLC SSD |
6x 240GB MLC SSD |
* Deze nieuwe databaseserver is in bestelling op het moment van schrijven
Zoals je hierboven kunt zien, zijn de configuratie en opslageisen sinds 2013 nauwelijks gestegen. De servers hebben nog steeds ruim 600GB netto-opslagruimte via hun raid 10-configuraties. Op het moment van schrijven gebruikt de masterdatabase daar zo'n 300GB van. Ook het ram is met 256GB nog steeds ruim voldoende om onze belasting aan te kunnen. Uiteraard is dit nieuwe geheugen wel sneller. De nieuwe reepjes zijn ddr4-2133MHz, waar de oude nog ddr3-1600 waren.

Oude Master-database (2013). De Slave ziet er net zo uit.
De cpu's zijn volgens hetzelfde principe uitgezocht als voorheen; gegarandeerd goede singlecore-prestaties vinden we hier belangrijker dan veel cores. Voor ongeveer hetzelfde geld koop je namelijk de E5-2670 v3 met 12x 2,3GHz. Vergeleken met de vorige servers krijgt de nieuwe overigens alsnog vier extra cores. Wat de variatie in OS-disks betreft, hebben we bij de nieuwste drie servers domweg gevraagd om 'de goedkoopste disks, liefst ssd', die de specifieke leverancier op dat moment aanbood. Snelle(re) disks zijn niet nodig; ze hebben nauwelijks invloed op de starttijd, omdat die wordt gedomineerd door de tijd die het bios nodig heeft voor allerlei tests. Voor de andere schrijf- en leesacties van het besturingssysteem volstaat vrijwel elke harde schijf.
De nieuwe master is ook gelijk van een andere hardwareleverancier. Ons moederbedrijf koopt al jaren alle servers bij HP, dus we hebben gekeken of we konden meeprofiteren van de schaalgrootte daarvan. Dat bleek het geval, dus de keus voor een andere leverancier was snel gemaakt 
NoSQL en Search
De NoSQL- en search-servers hebben we halverwege 2015 vervangen door vier nieuwe servers. We hebben de onderlinge verschillen opgeheven, omdat die weinig meerwaarde boden. De verschillen met de oude modellen zijn vrij groot.
Er is veel minder opslagcapaciteit, maar alles staat nu wel op ssd's. De reden hiervoor is dat we niet zoveel ruimte nodig hadden. Door over te stappen op Lucene ging de benodigde schijfruimte voor onze zoekdatabase voor het forum van tientallen gigabytes naar 'slechts' 14GB. Voor MongoDB gold iets soortgelijks, ook daar was de benodigde capaciteit veel kleiner dan de 900GB. Omdat er relatief weinig zoekopdrachten tegelijk worden uitgevoerd, hebben we dit keer cpu's gekozen met wat minder cores, die per core wel sneller zijn. Het verschil in kloksnelheid wordt uiteraard ook hier versterkt door de drie generaties die ertussen zitten.
Onderdeel |
NoSQL 2013 |
Search 2013 |
NoSQL 2015 |
Search 2015 |
Server |
2x IBM x3550 M3 |
2x IBM x3550 M3 |
2x IBM x3550 M5 |
2x IBM x3550 M5 |
CPU |
2x E5645 (2,4GHz 6C) |
2x E5645 (2,4GHz 6C) |
2x E5-2623 v3 (3GHz 4C) |
2x E5-2623 v3 (3GHz 4C) |
Geheugen |
12x 4GB (48GB) |
12x 4GB (48GB) |
4x 16GB (64GB) |
4x 16GB (64GB) |
OS-disks |
|
2x 146GB 10k SAS |
|
|
Datadisks |
2x 900GB 10k SAS |
2x 900GB 10k SAS |
2x 120GB MLC SSD |
2x 120GB MLC SSD |
SSD-accelerator |
1x 50GB SLC |
2x 50GB SLC |
|
|

Search-server, NoSQL-server ziet er hetzelfde uit
Opslag
De opslagoplossing heeft de grootste verandering doorgemaakt. We hebben de server met OpenSolaris vervangen door twee Oracle ZFS-appliances. Deze zijn een stuk eenvoudiger te beheren en boden zelfs een wat ruimere featureset dan onze oude oplossing. Hoewel de hardware wellicht nauwelijks een vooruitgang lijkt, zijn ze ruim snel genoeg voor onze toepassingen. We hebben hiermee overigens niet alleen onze nfs-opslag vervangen, maar ook onze Dell MD3200i iscsi-opslag. De vm-images stonden voorheen op de iscsi-opslag en nu, afhankelijk van de vraag of ze gedeeld moeten kunnen worden, op de lokale disks van de vm-hosts of op de nieuwe nas.

Back-upserver (boven) en storage-appliance (onder)
Onderdeel |
NAS 2013 |
SAN 2013 |
Backup 2013 |
NAS 2015 |
Backup 2015 |
Server |
Sun x4270 met OpenSolaris |
Dell MD3200i |
Dell R510 met Nexenta Core |
2x Oracle ZFS 7120 |
IBM x3630 M4 |
CPU |
2x E5520 (2,26GHz 4C) |
2x iSCSI controller |
2x E5620 (2,4GHz 4C) |
1x E5620 (2,4GHz 4C) |
2x E5-2407 (2,2GHz 4C) |
Geheugen |
6x 4GB (24GB) |
2GB/controller |
6x 4GB (24GB) |
64GB |
4x 16GB (64GB) |
OS-disks |
2x 146GB 10k SAS |
|
2x 146GB 10k SAS |
|
2x 64GB SSD |
Datadisks |
10x 500GB SATA |
12x 1TB SAS |
12x 2TB SATA |
11x 3TB SATA |
12x 4TB SATA |
SSD-accelerator |
2x 80GB (read) 2x 32GB (write)
|
|
|
73GB (write) |
|
De back-upserver is vervangen door een met meer opslagcapaciteit, maar minder krachtige cpu's. Snelle cpu's waren niet meer nodig, omdat onder andere de 'replicatie' vanaf ZFS niet meer op deze machine hoefde te gebeuren. Binnen ons budget gaven we daarom liever wat meer uit aan extra opslagcapaciteit dan aan extra rekenkracht. De huidige cpu's zijn nog altijd ruim voldoende voor het verzamelen (en maken) van back-ups van onze databases en de nas. Verder verzamelt en bewaart deze server de logs van diverse servers, waaronder de 'access logs' van onze webservers.
Overige servers
Naast alle servers uit de pagina's hiervoor hebben we nog allerlei hardware voor taken waar je als bezoeker niet direct mee te maken hebt. Toch zijn ze vaak van cruciaal belang, waardoor we ook hiervoor meestal bare metal servers gebruiken.
Taak |
Mail |
Management |
Development |
Jaar |
2013 |
2015 |
2013 |
2015 |
2013 |
2015 |
Server |
Dell R610 |
IBM x3550 M4 |
2x Dell R310 |
2x IBM x3550 M4 |
IBM x3550 M3 |
IBM x3550 M5 |
CPU |
2x X5570 (2,93GHz 4C) |
2x E5-2620 v2 (2,1GHz 6C) |
Xeon X3440 (2,53GHz 4C) |
1x E5-2420 v2 (2,2GHz 6C) |
2x E5654 (2,4GHz 6C) |
2x E5-2630 v3 (2,4GHz 8C) |
Geheugen |
6x4GB (24GB) |
2x16GB (32GB) |
2x2GB (4GB) |
4x 8GB (32GB) |
18x8GB (144GB) |
8x 16GB (128GB) |
OS-disks |
2x 300GB 10k SAS |
2x 64GB MLC SSD |
2x 160GB SATA |
1x 1TB SATA |
|
|
Data-disks |
4x 50GB SLC SSD |
2x 240GB MLC SSD |
|
|
6x 900GB 10k SAS
2x 50GB SLC SSD
|
4x 1TB MLC SSD |
Mailserver
De mailserver verstuurt bij ons de uitgaande mail, zoals registratiemailtjes, mails voor notificaties en de dagelijkse nieuwsbrief. Daarnaast verzorgt hij de imapboxen voor @tweakers.net-accounts.
De vorige mailserver was eigenlijk een noodoplossing. We hadden aangenomen dat dit werk ook prima door een virtual machine gedaan moest kunnen worden. In werkelijkheid werd de toegang tot de mailboxen, door alle I/O, uiteindelijk behoorlijk traag, zeker op het moment waarop de dagelijkse nieuwsbrieven werden verzonden. Daarom hebben we destijds onze voormalige searchserver ingezet als mailserver, om toch weer bare metal te hebben en (vooral) toegang te krijgen tot snelle (ssd-)storage. In de vervangronde erna hebben we weer gekozen voor bare metal. De nieuwe server hoefde uiteraard niet van hetzelfde databasekaliber te zijn als de oude; we hebben daarom eenvoudigere cpu's en 'normale' ssd's uitgezocht. De nieuwe ssd's hebben uiteraard wel veel meer capaciteit 
Managementservers
Onze twee managementservers verzorgen alle interne coördinatie, zoals dhcp, dns, puppet, ntp, monitoring en nog veel meer. De oude servers hadden daarvoor te weinig geheugen en de opslagruimte bleek ook aan de krappe kant te zijn. Met de nieuwe modellen hebben we dat gecorrigeerd.

Managementserver
Developmentserver
Om te controleren of aanpassingen in de code van Tweakers goed werken, hebben we zogeheten test- en acceptatieomgevingen nodig. Het liefst doe je dat met een kopie van je productieomgeving, maar om daarvoor nou vijftien of meer extra servers en bijpassende infrastructuur aan te schaffen, vonden we wat te veel van het goede…
We hebben het veel goedkoper opgelost door één dedicated server te plaatsen en die met virtual machines en docker-instances uiteindelijk dezelfde scheiding van verantwoordelijkheden te laten simuleren. Dat leidt uiteraard tot wat verschil in de prestatiekarakteristieken. De productieomgeving is echter op vrijwel alle vlakken (veel) sneller, waardoor eventuele verschillen na een 'release' hooguit voordelig uitvallen. Om een voorbeeld te geven, migratiescripts om gegevens in de database aan te passen zijn op de productiedatabase vaak dertig tot vijftig procent sneller dan op deze server.

Ontwikkelserver
Naast deze acceptatieomgeving hebben we in ons kantoor nog enkele servers hangen waarmee we diverse ontwikkel- en testomgevingen in leven houden. Dit zijn veelal afgeschreven servers, die hiermee een tweede leven krijgen. Zo zal de MySQL Master 2013 van de vorige pagina zijn leven waarschijnlijk nog enkele jaren voortzetten als database voor onze ontwikkelomgeving.
Toekomstplannen
Normaal gesproken komt er op dit soort artikelen veel feedback. Jullie overladen ons met vragen, tips en eigen ervaringen. Die feedback is voor zowel ons als de medetweakers interessant en we steken er ook nog wat van op. De feedback dwingt ons om na te denken over onze huidige oplossingen, geeft inzichten in hoe we die beter kunnen inzetten en opent onze ogen voor alternatieven.
Helaas kunnen we er in de praktijk niet altijd wat mee. De besproken hardware en software zijn over het algemeen al daadwerkelijk in gebruik. 'Even' iets anders kopen of installeren is op zijn minst onpraktisch en soms te kostbaar. Dat is natuurlijk extra jammer als blijkt dat jullie alternatieve oplossingen noemen die beter en/of goedkoper zijn. Dat soort tips krijgen we liever vóórdat we een keuze maken 
We gaan binnenkort ook hardware en software vervangen. Voor die zaken komt de feedback dan natuurlijk juist nu op het goede moment. Daarom geven we jullie een vooruitblik op wat we in 2016 van plan zijn.
Loadbalancers
Het eerste project wordt het plaatsen van nieuwe loadbalancers. Op dit moment gebruiken we daarvoor drie adc's in een active-passive paar op de primaire locatie en een enkele op de uitwijklocatie.

Van boven naar beneden: 10Gbit-switch, firewall en loadbalancer
Er komt veel kijken bij de selectie van loadbalancers, omdat er allerlei functies bestaan die interessant kunnen zijn. We beschrijven hieronder de zaken waar we naar kijken, om zo ook een kijkje in de keuken te geven. Het is overigens een lastig proces door de vele variabelen 
Mogelijke varianten
De eerste keuze zit in het type platform. Er kan ruwweg gekozen worden tussen een hardware-appliance, een virtuele appliance en losse, zelf gekozen software.
- Hardware-adc's
- Virtuele adc's
- Losse software
Hardware-adc's hebben als voordeel dat de apparatuur en software van dezelfde leverancier komen en daardoor goed op elkaar zijn ingespeeld. De software integreert bovendien alle functies in een centrale beheer- en gebruikservaring, en er wordt ondersteuning op het geheel van hard- en software geboden.
Als nadeel is er onder andere de prijs. In verhouding tot wat je uitgeeft, zijn de hardwarecomponenten meestal niet erg snel en zelfs redundante voedingen zijn niet standaard. Een ander nadeel is dat ondersteuning op een gegeven moment zal worden stilgelegd. Als je dan toch nieuwe functionaliteit of ondersteuning wil, zal er een nieuwe investering moeten volgen. Ook als de soft- of hardware in principe nog voldoet.
Er zijn ook allerlei 'virtuele' adc's verkrijgbaar. Deze variant heeft natuurlijk ook voordelen. De hardware kunnen we zelf inkopen en op maat maken. Ook kunnen we dan de hardware en software onafhankelijk van elkaar vervangen of upgraden. Door toch een totaalpakket te nemen, blijven de voordelen van de software bestaan (geïntegreerd, gui, e.a.)
De nadelen omvatten onder andere de prijs. De prijs van virtuele adc's is meestal gerelateerd aan de benodigde bandbreedte en komt soms dicht in de buurt van die van de hardwareversies. Verder introduceer je met virtuele machines extra (kans op) latency in een toepassing waarin je dat niet wil.
Naast totaalpakketten kunnen we een eigen Linux-installatie voorzien van software die soortgelijke functionaliteit biedt. De voordelen hiervan zijn onder andere dat dit de goedkoopste oplossing zal zijn. De software is vaak zelfs gratis. Ook kun je zelf kiezen aan welke functionaliteit je speciale aandacht besteedt en of je bijvoorbeeld een bepaalde functie, zoals caching, naar een dedicated server verhuist.
Nadelen zijn er ook; We moeten zelf alles met elkaar combineren en verbinden. Het is lastiger te achterhalen waar het fout gaat. Ook zullen de eventuele gui's minder compleet en/of informatief zijn.
We hebben nog geen keuze gemaakt uit de drie opties en horen graag jullie mening hierover. We hebben uiteraard nog wel wat eisen en wensen daarbij, waar we ook rekening mee moeten houden.
- Eisen en wensen
- Must have
- Should have
- Nice to have
Er is een aantal functies die we nodig vinden in een loadbalancer. Verder zijn er functies die niet strikt noodzakelijk zijn, danwel leuk zijn om erbij te krijgen. We werken daarom zelf met drie losse lijstjes, voor de selectie van nieuwe loadbalancers.
Als je die lijstjes interessant vindt, kun je ze in de tabjes hiernaast bekijken.
Robuuste en transparante werking (always on)
- Als een webserver uitvalt of weer terugkomt, moet dat automatisch herkend worden en op de achtergrond gebeuren. Ook voor andere (eenvoudige) configuratiewijzigingen mag er geen noemenswaardige downtime zijn.
- Multipool/last resort
- Zoals je kunt lezen bij de webservers hebben we op dit moment twee pools van servers. Als geen enkele server van de eerste pool nog reageert, wordt de tweede ingezet. En als ook dat niet meer lukt, word je door onze loadbalancers geredirect naar error.tweakers.net. Dan krijg je in ieder geval een bevestiging dat het aan ons ligt in plaats van aan jouw verbinding

- Automatische fail-over/fail-back
- In onze hoofdlocatie willen we (minimaal) twee adc's plaatsen. Deze hoeven niet per se in active-active-modus te draaien, maar moeten wel automatisch elkaars werk kunnen ovenemen.
- 10Gbit-aansluitingen
- We hebben een redundante 10Gbit-verbinding en 10Gbit-switches, dus het is wel zo handig als we de adc's daar direct op aan kunnen sluiten. In de praktijk komt het gros van het verkeer via de videostreaming, waardoor de adc's niet per se ook die 10Gbit hoeven te kunnen verwerken.
- Global server load balancing
- Hiermee zorgen we ervoor dat jullie automatisch naar de uitwijklocatie worden gestuurd. Het werkt door dns-responses voor 'tweakers.net', afhankelijk van de belasting, te beantwoorden met een van twee ip's.
Ssl-offload
- Op dit moment gebruiken we Varnish voor caching van data. Varnish werkt goed, maar kan niet overweg met ssl. We kunnen uiteraard Varnish vervangen of een extra proxy voor Varnish zetten, maar ssl-termination op de adc zou dit ook oplossen.
- Http/2
- De browserondersteuning voor http/2 is al behoorlijk ver. Daarom is het ook handig als de adc dat al ondersteunt of in ieder geval bij de makers in beeld is.
- Ipv4 naar ipv6/ipv6 naar ipv4
- Op dit moment is onze ipv6-implementatie nog niet compleet. Het kan daarom nuttig zijn als een adc het inkomende ipv6-verkeer kan omzetten in ipv4.
- Scripting/api
- Soms wil je meer dan de standaardfunctionaliteit en dan is een ingebouwde scriptingtaal en/of api erg nuttig.
- Support/documentatie
- Zonder documentatie kom je nergens en als het dan nog niet lukt, is iemand anders kunnen vragen hoe iets moet ook wel handig.
- 'Layer 7'-loadbalancing
- Soms is het handig om aan de hand van de inhoud van requests keuzes te maken. Het inspecteren van requests wordt meestal L7-loadbalancing genoemd.
Direct server return
- Voor video-streaming is het handig als de loadbalancer een server uitkiest en als daarna de streaming-server zélf reageert op de request, in plaats van het naar de loadbalancer terug te sturen. Daarvoor is dsr bedoeld.
Caching
- We gebruiken Varnish voor 'reverse proxy'-caching. Als de adc dat beter kan of meer functionaliteit erbij biedt, kan dat interessant zijn om in te zetten.
- Web application firewall
- Voor de beveiliging kunnen waf-functies nuttig zijn. We zijn er overigens op dit moment nog niet van overtuigd dat dat gaat werken op Tweakers, al is het alleen maar omdat je voorbeeldscripts wil kunnen plaatsen in een programmeertopic

Het kan natuurlijk zijn dat we in de bovenstaande lijsten nog dingen vergeten zijn of aannemen dat het standaard op adc-platforms zit; denk aan tcp-multiplexing en syn-flood-bescherming. Dan horen we dat graag van jullie in de reacties onder dit artikel. Uiteraard horen we in elk geval graag jullie ervaringen, tips en feedback, ook als je denkt dat we genoeg zouden moeten hebben aan een oplossing die niet aan alle bovenstaande wensen en eisen voldoet 
Centrale opslag
Na onze loadbalancers is de centrale opslag aan de beurt. Zoals beschreven gebruiken we nu twee ZFS-storage-appliances. Ze werken goed, maar hebben bij ons geen automatische fail-over. Verder is er een complete analyse van de data nodig, nadat er handmatig wordt overgeschakeld. Dat is niet vaak nodig, maar betekent wel dat het urenlang in de gaten moet worden gehouden.
Naast ZFS-oplossingen zijn er allerlei object storage- en private cloud-toepassingen, zoals Ceph en GlusterFS. Dan gaat het ons vooral om de redundantie en automatische fail-over, niet om de 'oneindige' capaciteit. We verwachten dat de gebruikte capaciteit voorlopig onder de 30TB blijft. Onze huidige 2U back-upserver biedt dat al.
Ook hiervoor kijken we naar allerlei aspecten.
- Eisen en wensen
- Must have
- Should have
- Nice to have
Net als bij de loadbalancers zijn er allerlei functies die we per se willen of waarvan we verwachten dat ze nuttig zijn. Ook die hebben we in losse tabjes gestopt, voor als je ze interessant vindt

- Betrouwbaar
- Een opslagplatform moet natuurlijk betrouwbaar zijn, bestanden moeten daadwerkelijk op permante opslag staan als het filesystem dat beweert. Overigens mogen thumbnails wel 'wegrotten', zolang ze dan maar als geheel worden verwijderd.
- Ondersteuning voor veel (kleine) files
- We hebben veel kleine bestanden, vooral (thumbnails van) afbeeldingen. Met veel bedoelen we een paar miljoen; we zijn geen Google of Facebook
Als we een directory met dergelijke bestanden verwijderen, moet het platform dat natuurlijk ook aankunnen.
- Ondersteuning voor grote files en vm-images
- We bewaren ook grote files zoals video's en vm-images. Video's worden alleen geschreven en niet meer aangepast, maar bij vm-images worden juist kleine stukjes van de bestanden veranderd.
- Replicatie/redundantie
- Er moet een vorm van replicatie en redundantie beschikbaar zijn, idealiter met automatische fail-over waar we niets van merken.
- Back-ups
- Het moet mogelijk zijn om back-ups van delen van het filesystem te maken. Liefst is het ook mogelijk om incrementele back-ups te maken, bijvoorbeeld door het verschil tussen twee snapshots op te vragen.
- Posix/nfs
- Een migratie van Posix (via nfs) naar 'iets anders', bijvoorbeeld object storage, zal tijd kosten en voor sommige bestanden, zoals cli-scripts, niet zomaar kunnen. Daarom is ondersteuning voor Posix handig. Dat mag eventueel ook met een losse nfs-server, maar we hebben dat het liefst net zo betrouwbaar en redundant als de rest.
- Snapshots
- Met de hoeveelheid bestanden die we hebben, is het lastig om (vaak) back-ups te maken, snapshots kunnen helpen om fouten te herstellen. We willen er het liefst een paar per dag, week en maand hebben. Idealiter kan het aanmaken en verwijderen van snapshots automatisch worden gedaan.
- Always on/uitbreidbaar
- Hardware gaat zo nu en dan stuk en software krijgt updates. Beide willen we liefst zonder merkbare gevolgen kunnen vervangen. Ook is het handig als de capaciteit gaandeweg uitgebreid kan worden, mocht onze schatting toch niet kloppen.
- Geolocatie
- We slaan bestanden op twee locaties op. Idealiter houdt het platform daar rekening mee, liefst zo dat servers op locatie A ook vooral met de nodes van locatie A communiceren.
- Prestaties
- Door caching op webservers wordt het bestandssystem relatief weinig gebruikt, maar voor alle cache misses willen we wel een snelle reactie. Ook moet het uploaden of wijzigen van bestanden niet te lang duren.
- Deduplication
- Bij afbeeldingen en andere bestanden komen duplicaten voor. Deduplicatie kan daarom helpen om ruimte te besparen.
- Compressie
- Hoewel we vooral afbeeldingen en video's plaatsen, kan het ons toch wat ruimte besparen als we, voor delen van het systeem, kunnen aangeven dat de bestanden gecomprimeerd mogen worden.
Multi-level storage/ssd-caching
- We hebben bestanden die vaak worden opgevraagd en bestanden die nauwelijks worden opgevraagd. Hoewel die eerste al in Varnish zullen worden gecached, kan het toch nuttig zijn om (automatisch) de meestgebruikte typen bestanden op ssd's te plaatsen.
- Support
- We vinden het niet erg om zelf een server in te richten, maar bij dit soort complexe toepassingen zijn goede documentatie en de mogelijkheid tot ondersteuning wel prettige bijkomstigheden.
Bovenstaande eisen en wensen zijn afgeleid van wat we nu met ZFS doen en sterk beïnvloed door wat Ceph zoal kan. Dat lijkt goed te voldoen aan de meeste van de eisen en wensen, en doet zelfs nog een gooi naar de nice to haves. Als de eisen en wensen onrealistisch zijn, horen we het graag. Verder lezen we natuurlijk ook hierover graag jullie ervaringen, tips en feedback onder dit artikel.
Webservers en reverse proxy
We zijn behoorlijk tevreden over onze caching reverse proxy Varnish en onze webserver Apache, maar er zijn diverse alternatieven te vinden. We weten uiteraard van het bestaan van veel ervan, maar we kunnen ze niet zo makkelijk 'even' in productie uitproberen. We maken dankbaar gebruik van allerlei krachtige functionaliteit in Varnish en Apache; dat zouden we dan moeten omzetten of soms zelfs moeten verplaatsen naar onze php-code.
Het is niet allemaal perfect. Zo kan Varnish niet overweg met https en dat biedt ook weinig hoop voor http/2.0-ondersteuning. Daarnaast krijgen we bij Apache de stabielste werking via de proces-based workers, maar dat schaalt niet goed.
Om dat soort redenen zijn we erg benieuwd naar praktijkervaringen met die mogelijke vervangers. De bekendste is waarschijnlijk Nginx. In benchmarks die we een tijd geleden deden, bleek die niet sneller te zijn. Apache+mod_php was sneller dan Nginx+php-fpm en doordat Varnish de statische content toch al voor zijn rekening neemt, is de winst van Nginx daarbij beperkt.
We horen natuurlijk graag of dat intussen beter is geworden of dat er andere, (nog) betere alternatieven bestaan.
Conclusie
In dit artikel hebben we een nieuw overzicht gegeven van de hardware die Tweakers gebruikt. De architectuur, waaronder de gebruikte software, is niet echt veranderd. Er zijn vast allerlei dingen nog niet duidelijk of niet in voldoende detail benoemd. We verwachten uiteraard dat jullie dat in de reacties kenbaar maken, zodat wij nog meer kunnen uitleggen 
Op deze laatste pagina hebben we beschreven waar we het komende jaar mee aan de slag gaan. Mocht je hierover wat willen weten of juist kunnen delen, dan horen we dat heel graag. We proberen de beste keuze te maken, maar de mogelijkheden zijn legio en het is lastig om overal een goed beeld van te krijgen. Jullie ideeën, tips en praktijkervaringen zullen ons, én de medetweakers, erg van nut zijn.