Sunday, 18 July 2010

Hosting Environments

Hosting environments are some of the most challenging environments to work within due to the 24/7 nature of the service.

Public facing websites can be very hard to support as a result. Most common fault I’ve seen is the placing of too many services onto a single server whether that be physical or virtual, resulting in problem with updating service on that server or single point of failure when it’s down.

So here are my Top Tips on design of a hosting environment.

1) load only what is needed to run the webpages on the front end, too often backend services or application become loaded on the front end and this results in slow down of the web servers and also means more patches are required to these servers, in simple keep database and job service on separate systems.

2) Job servers are great and having automated tasks that clean up the environment is always a good idea, with careful scripting this can be used to take servers out of load balancers before patching of other maintenance tasks are done.

3) Even high availability systems such as clusters can be point of failure from time to time so don’t put all of your databases into a single system, as poor code that crashes the system would take down the environment, so try to spread the load over large number of systems to avoid single points of failure.

4) keep the environment simple with no more than one version behind the current release as unsupported environments are impossible to trouble shoot with vendors if the worst happens.

5) have a capacity sizing calculation, sometimes this means doing load test on each sites to see how it performs, an example load of one user and one hundred are not the same, as some issues in code such as untimely ending query’s doesn’t show until there is enough load.

Assuming you have all of these followed you should have a stable environment, I’ve worked on a number of hosted application environments now an almost all of them have just one issue related to not being able to work on the system while its running, leaving them with outages every time something needed updating/patching or fixing.