Voor onze cloud-software hebben we een eigen cluster gebouwd dat voor alle klanten de applicaties en websites serveert. Gemiddeld verwerkt het cluster per dag zo'n 4,5 miljoen pageviews en een veelvoud aan hits.
Ons eigen cluster
Zo werkt het cluster
Requests
Elk request komt binnen op één van de load balancers (nginx). Meer dan 90% kan direct vanuit de cache worden geserveerd. De rest gaat door naar een webserver.
De webserver (apache) laadt de omgeving van de klant en voert het request uit. Data komt uit de cache (Redis), de database (MariaDB) en het distributed filesystem (MooseFS).
Achter de schermen wordt er werk uitgevoerd in achtergrondtaken die worden gestart door via een queue server (RabbitMQ), en vanuit scheduled jobs.
Beschikbaarheid
We hebben het cluster zo ontworpen dat er van elke functie minstens één systeem kan uitvallen zonder dat de gebruiker daar last van heeft.
De load balancers en database servers zijn dubbel uitgevoerd in een master-slave setup. De andere onderdelen functioneren in een pool waarbij meerdere machines kunnen uitvallen.
Het cluster wordt gehost in datacentrum euNetworks in Amsterdam. De connectivity wordt geleverd door True.
Beveiliging
Van het cluster zijn alleen de load balancers en één gateway machine van buitenaf bereikbaar. Die machines kunnen we extra goed in de gaten houden. Niettemin zijn we bij alle machines heel alert op veiligheidsupdates.
Er wordt dagelijks een offsite backup gemaakt in een ander datacentrum. Er wordt wekelijks een offline backup gemaakt die niet verbonden is met internet.
Onderhoud
Deployment
We hebben zelf software geschreven om onze software te deployen. Iedereen bij Procurios kan een nieuwe versie live zetten, dat gebeurt dan ook vele malen per dag.
We hebben een aantal branches waar een klantomgeving op kan draaien. De meeste klantomgevingen draaien op de productieversie (stable branch), een klein deel op de ontwikkelversie (dev branch). We releasen iedere vier weken een nieuwe productieversie.
Klantomgevingen
Onze klanten werken allemaal in hetzelfde softwareproduct. Dit bestaat uit een groot aantal standaardmodules, maar ook veel voor klanten specifiek geschreven maatwerk. Dit is allemaal één applicatie en daardoor enorm voordelig voor onze architectuur.
Binnen onze software hebben klanten een eigen omgeving die bestaat in principe uit een database en een directory op onze storage oplossing. In de klantomgeving zit nooit code, alleen maar configuratie en data.
Monitoring
Ons monitoring-systeem houdt het cluster 24/7 in de gaten. Er wordt veel gemeten en gecontroleerd. Van het online zijn van deelsystemen tot het volledig doorlopen van een request.
We meten de interne werking van onze applicatie met Sentry, waarbij kritieke problemen automatisch een ticket worden. Performance van het platform meten we met Xhprof. De details van alle afzonderlijke servers wordt gemonitord met Nagios, en vanaf buiten het datacentrum gebruiken we oa. UptimeRobot om de beschikbaarheid van onze diensten te controleren.
Als iets niet goed werkt, weten we dat vaak al voordat een gebruiker er iets van merkt.