• 11 december 2012
  • Leestijd: 3 minuten

De nieuwe server architectuur van Moneybird

We groeien vlot, daar zijn we erg blij mee. Sinds vorige week draait Moneybird daarom op een compleet nieuwe server architectuur bij onze hostingprovider True (opent in nieuw tabblad). Met deze nieuwe architectuur is Moneybird nog beter voorbereid op de toekomst en kunnen we weer flink doorgroeien en eenvoudig uitbreiden.

Omdat we ondertussen Ă©Ă©n van de grotere Ruby on Rails (opent in nieuw tabblad) applicaties in Nederland draaien, geven we graag een kijkje in de keuken van onze nieuwe server opstelling.

Bare metal servers #

Voor veel bedrijven is virtuele hosting de meest logische oplossing. Met succesverhalen van veel startups die op Amazon (opent in nieuw tabblad) of Heroku (opent in nieuw tabblad) draaien, zou je snel geneigd zijn om blindelings voor een virtuele oplossing te kiezen. De nieuwe hosting architectuur van Moneybird is echter een traditionele “bare metal” omgeving: 7 dedicated servers.

De afgelopen twee jaar heeft Moneybird op virtuele servers gedraaid. De stabiliteit van zo’n platform is goed bevallen. Toch kan een virtueel platform ook nadelen of beperkingen hebben:

  1. De resources zijn niet goedkoop, voor opslag, geheugen en CPU’s betaal je de hoofdprijs. Dit komt omdat de software voor virtualisatie ook afgerekend wordt via deze resources.
  2. Je moet de hardware resources delen met andere gebruikers op het platform. Bij zeer intensieve operaties op bijvoorbeeld de database merkten wij vaak dat de IO trager was dan wenselijk.

We weten ondertussen goed wat het Moneybird platform nodig heeft om optimaal te kunnen presteren. De voordelen van een virtuele omgeving zijn voor onze applicatie minimaal. Zodoende hebben we gekozen voor een “bare metal” omgeving waarin we dedicated machines draaien en daarmee de volledige resources van iedere machine kunnen benutten.

Redundancy in de architectuur #

Met de beslissing om dedicated machines te gaan draaien, werd het ook belangrijk om deze servers redundant op te zetten. Dit heeft natuurlijk voordelen tijdens storingen die kunnen optreden, maar ook voor het updaten van Moneybird. We merkten in het verleden dat updates aan het operating system of de instellingen van een webserver, gelijk effect hadden op de bereikbaarheid van de applicatie. Doordat er nu meerdere workers en database servers draaien, kunnen we zonder problemen een server tijdelijk offline halen voor onderhoud zonder dat de eindgebruiker hier iets van merkt.

Moneybird draait nu op 7 dedicated machines van Dell. We hebben ervoor gekozen om de hardware voor zover het mogelijk is gelijk te houden. Op deze manier kunnen servers zonder problemen elkaars taken overnemen. De machines zijn verantwoordelijk voor de volgende taken:

  • 2 loadbalancers (Dell R210) voor het verdelen van het verkeer over de 2 workers.
  • 2 workers (Dell R620) die de Ruby on Rails applicatie draaien via Nginx en Unicorn. Daarnaast draaien hier Resque workers op voor background processing
  • 2 database servers (Dell R620) in master - slave configuratie met PostgreSQL, Memcache, Redis en ElasticSearch.
  • 1 ops server (Dell R620) waarop veel development zaken gebeuren, zoals Continuous Integration, centrale toegang tot de logs van servers en verzameling van statistieken.

De Dell R620 (opent in nieuw tabblad) servers zijn allemaal uitgerust met 2 Intel Xeon E5–2640 (hex-core) CPU’s, 32GB geheugen, 2x 200GB SSD (raid 1, primaire opslag) en 2x 1000GB SATA (in raid 1, secundaire opslag).

Voor opslag van gebruikersdata maken we gebruik van een NFS opslag die voor iedere worker bereikbaar is.

Provisioning #

De provisioning van de servers is volledig geregeld via Puppet. We gebruiken hiervoor de supply_drop (opent in nieuw tabblad) gem om een eenvoudige integratie tussen Capistrano (opent in nieuw tabblad) en Puppet te realiseren. Via Vagrant hebben we de manifests van Puppet volledig opgezet, waarna we de scripts toegepast hebben op de productie servers.

De resultaten #

Door een goede voorbereiding is het gelukt om binnen 1 uur de volledige migratie uit te voeren. De resultaten van het nieuwe platform en de toename van resources zijn geweldig. New Relic (opent in nieuw tabblad) laat een duidelijke verbetering in response tijd zien sinds we het nieuwe platform in gebruik hebben genomen:

De resultaten