Drum roll please: Introducing the auto-scaling, high availability .NET Stack on Amazon!
Some of you might think, "well finally!" As a product manager, I empathize with that sentiment. It was certainly tricky getting this to hum on the cloud. I'm very proud of our team's work, especially when reviewing the challenges they overcame to get this out the door. Let's take a deeper look into some of them.
Database Manager for SQL Server
When I first proposed the SQL Server Database Manager last year to our development team with what ultimately would become our first SQL Server ServerTemplate, I met with mixed reactions. EVERYONE thought it was a great idea and would be useful to users. However, a lot of reservations too...doing something like what we have for MySQL with master/slave replication is no easy feat. Adding in Microsoft complexity with Powershell as well as unexpected Windows behavior in the cloud, the solution seemed out of grasp. Some of the notable questions we asked ourselves:
- How does MS Licensing work as existing orgs transition to the cloud? Is SQL Server Standard good enough or will users demand Enterprise?
- How will we backup data on SQL Server? Native backups guarantee "sane" backups without service interruptions but take a long time.
- What are the setup best practices and how do we implement them in the cloud? Multiple Data / Log Volumes, default monitoring and alerts, backup scheduling, etc...all need to be considered.
- How do we set up replication with SQL Server? There are so many supported options, what's best for cloud?
We started at the beginning, pushing licensing off to the likes of the service providers (Amazon) and focusing on prototyping our implementation. One of our developers found that backups using Volume Shadow Services was a better option than SQL Server native backups. The following is an excerpt from his report:
Now that we have a clear understanding of how to proceed with backups, we tried to figure out best practice configuration -- focusing mainly on the volume configuration and management. We encountered issues attaching EBS volumes before Windows was 'ready' which resulted in out of order drive letter assignment. We solved that, and moved on only to find that Powershell was running as a 32-bit process on the x64 environments...great. Fixed that too. Those two issues actually got us pretty far and enabled our first release of a Beta ServerTemplate that supported Standalone backup/restore functionality.
Going through the Beta of our backup/restore ServerTemplate, we learned enough to facilitate building a High Availability SQL Server Solution (that's what we published recently!). We focused on a few things:
- SQL Server Mirroring (Set up, Monitoring and Alerting)
- Authentication and Data transfer Encryption
- Failover to the mirror
One key challenge in setting up the mirroring session was waiting. We had to have not only the mirror server in operational state but also a set of database full and differential backups from the principal to initialize the database on the mirror. We utilized the RightScale ability to tag servers and locate servers by tag to help automate this whole process.
I recommend you try out our ServerTemplate to see just how much we managed to take off your shoulders for the database management.
IIS Application Server
Phew. When you think about the complexity of the Database Manager, IIS seems like a walk in the park! But a lot of work went into this template too. I went over and chatted with the dev lead whose team built this template to get the inside scoop of the challenges they had to overcome. Here's his list:
- Built with the use case of the scalable app tier in mind
- Integrate a front-end load balancing solution
- Figure out how to get the app on the server
- Figure out how to tell app servers where the db is when they are ready
- Oh, and of course, best practice configuration of IIS App Servers (this is Microsoft after all)
Doesn't sound too complicated does it? Luckily, with standardized images and use of RightScale tags to discover the Database server, it worked pretty well. Also, based in large part on the design, we were able to get this ServerTemplate to work equally well on both Rackspace and Amazon. That actually was a cool product win, even though it created more work for our testing team (details of which I went into in my last post).
I encourage you to take a look at this ServerTemplate too. Together, these two ServerTemplates with either the HAProxy Load Balancer ServerTemplate or Elastic Load Balancing from Amazon make up our .NET Stack. Take them for a spin, and as always, please send us your feedback. Enjoy!