I was recently asked about our Tech Stack by someone looking to join the development team. I was about to point them to a previous blog post when I realised it was 4 years old so needs a update…
I still consider ourselves as fundamentally using a LAMP stack (although the A of Apache was replaced a long time ago): Linux, Nginx/FPM, MySql, PHP. We use Yii as our PHP framework. We now use ElasticSearch more than Solr for our full-text search. Our caching layer is still MemCache. We use MongoDB and DyanamoDB for data stores where the usage is more write-heavy. Our app is fairly monolithic but we now have a handful of smaller services and have a mind-set to develop new features as new services rather that on the monolith. On the Frontend side of things, we are working on switching to a Single-Page-Application powered by NodeJS using the React Framework to achieve a isomorphic architecture.
On the Devops side of things, we moved away from Puppet and adopted immutable infrastructure techniques. We use Docker containers on top of CoreOS, using Fleet to schedule services and cron jobs. We have a fully automated deployment pipeline and have several deployments a day. GitHub will ping CircleCI which will run our tests, build a docker container for the release, push it to a container registry (docker hub), then Trigger a Ansible Tower Job which runs a Playbook that pulls the container on the app servers and switches ports on the load-balancer to direct traffic to the new containers. We use NewRelic for application monitoring and PagerDuty to get us out of bed when there’s a Gremlin. Our Mean Time Between Loss of Sleep (MTBLS) is satisfactory.
We are a AWS shop, with all resources being defined in text files, committed to github and “applied” using Terraform, a awesome Devops tool. In this way, we have a implementation of the “infrastructure as code” philosophy. We utilise Auto-Scaling-Groups to dynamically scale up and down depending on utilisation of our resources. Our app servers are stateless, completely controlled by Environment Variables. Application logs are shipped to a ELK cluster. We are starting to use AWS lambda for a few cases.
> “I love stateless systems.” “Don’t they have drawbacks?” “Don’t what have drawbacks?”
I feel like we are in a good place. We are modern and heading in the direction of the best-practices. We are in a position to attract talent to the team. Our technology is exciting but also “has legs”.