Best Practices for Building a High Availability Cloud Architecture