Delivering Scalable Software in the MindTouch Cloud

It’s been a few months and a new release of the cloud software that your company relies on has been announced. You’ve emailed the cloud software company and requested that your cloud server be upgraded to the latest version. After some downtime, your cloud server is upgraded! If you’re experiencing something like this, we’ve got bad news for you: you’re not using cloud software, but cloud-washed software!

MindTouch delivers customer success software to some of the most recognized brands in the enterprise and consumer spaces. When a customer navigates to one of our cloud-delivered product help sites, scalability of the backend infrastructure and the performance of the website is critical to the customer having a positive experience. The faster a customer can find the help they need, the happier they are. When you don’t have to worry about downtime when upgrading your site, or what sort of performance issues will occur, the happier you are!

MindTouch’s engineers foster a culture of scalability and performance. Simply put, things are never “fast enough” for them. Running our infrastructure on top of Amazon Web Services (AWS) affords MindTouch the ability to automate the creation and deployment of virtual servers to scale horizontally. This is called adding “more iron” to our infrastructure. Our engineers designed and deployed a cloud hosting solution, the spirit of which can be summed up in one sentence: Any application server in our infrastructure can serve any MindTouch site at any time.

Add two more servers to that, and now you have MindTouch sites being served with the power of four servers! Each application server is a clone, created by our provisioning software via AWS’s API’s and configured with Puppet. An application server does not store any state or information about a site, it works as a stateless business-logic layer between our frontend application and the site data.

MindTouch application servers are grouped into arrays, and a load balancer round-robins web requests between the servers in the array. Each array represents a weekly release deployment of our software. One array is the current production release, another array is next week’s release currently in quality assurance, and a third array is the current development build. When an application server is created, it is loaded with the build for a specific release and placed in the array that corresponds with that release.

MindTouch has the flexibility to react to changes in traffic and scale the infrastructure appropriately. Because any application server can serve any site, we can simply add application servers to increase the computing power of the array.

As web requests flow into the load balancer, it routes the requests to the correct application server array. The load balancer is smart enough to know that a production site is served from the production array and a test site is served from the test array.

Since any application server can serve any site, and no state is kept on the servers themselves, application servers can be rotated, added, and removed on the backend with no degradation to the customer’s experience. Application servers are never “upgraded”. When a site is moved to a new release, the traffic from the load balancer is simply routed to a different application server array with a newer build of our software.

As a result, our weekly releases happen instantaneously and transparently to customers. The previous release’s application server array is kept around, in case any rollback is required, but after a day the array is retired and the release is archived. We don’t deal with the maintenance issues that commonly occur with long running servers, as the life of an application server in production is only a week.

 Image: Computer History Museum

Get in touch with Andy on Twitter (@modethirteen)