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. 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 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 of Heroku 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 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 gem om een eenvoudige integratie tussen Capistrano 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 laat een duidelijke verbetering in response tijd zien sinds we het nieuwe platform in gebruik hebben genomen:

Statistieken uit New Relic

Deel dit artikel op je favoriete social netwerk