Windows Azure… One Year After
We have been using Windows Azure for almost a year, hosting our portal (Hoteles.com.co), and the results have been quite good in general. Compared to the rest of PaaS offerings in the market, this is a great solution if your expertise is around the Microsoft stack – specially .NET and SQL Server.
For v2 we are planning to leverage more of the Azure platform, specially the Azure Storage. We will be servicing Hotel images directly from here. This could enhance the already good response times we have right now. Activating the CDN for this would bring some additional benefits as well.
The other good experience (should I say, the most important for us??
) have been around the costs. After some changes, like moving out the Content Admin application from Azure to my regular Hosting provider, we are now paying an average of 60 USD per month. Not bad for a reliable and fast platform like this with access to data in SQL Server.
However, Azure is a new platform, and although it provides a good set of basic services, the portal still lacks of some important services, some available in some other PaaS offers (like AWS), such as:
- It stills lacks an out-of-the-box UI in the Azure portal that enable Admins to monitor the load of the instances (in term of CPU, RAM, Disk Access, etc) – pretty much the functionality offered by really good tools like Azure Diagnostic Manager by Cerebrata. Why is this important? Well, because either you or the platform need to make decisions base on the load. Should we allocate another instance to accommodate an increase in traffic? — this is the base of the elasticity paradigm. The Azure portal should bring some support to define such rules. The capability to define the number of instances per day of the week (i.e. what if the solution expects more traffic during the weekend..)
- In addition, there is a lack of traffic statistics reporting in the Azure Portal. We are currently handling this through Google Analytics – but it would be great to have this integrated in the Azure portal.
- It would be valuable to have access to some “Event Log” window from the Azure Portal with diagnostic information. Sometimes your application has problem and does not start but you cannot get the error info – it is like flying blind.
The good thing is that Azure is really strategic for Microsoft, and I expect to see this functionality shortly as part of the service.
Hoteles.com.co is unveiled!
Finally, after almost many months of continuous work between myself, and two friends (Thomas and Brian), Hoteles.com.co (aka “The H-Initiative”) was published the past 25th of April.
The amount of foreign travelers visiting Colombia has incremented during the past years due to a better perception in terms of security. The idea with Hoteles.com.co was to create a catalog of the best hotels, hostels and B&Bs in Colombia. This catalog is fully bi-lingual and constantly updated. Maps are also keys to the design of the site, and a good portion of the hotels in our database have accurate locations thanks to Google Maps.
From the technical side, the site is fully optimized for speed, using the new ASP.NET MVC model, and is basically the first solution in Colombia taking advantage of the new Windows Azure platform for cloud computing.
Please check it out and let me know your thoughts!
Dissecting Azure Clouds
What are the challenges in porting your existing ASP.NET/SQL Server applications to Azure?
If you plan to use SQL Azure then migrate your DB to Azure first. Below you will find some tips to perform this process. Yes, you will find lots of things that do not work on SQL Azure. The good thing is that moving the ASP.NET will be way easier… Once completed, then connect your local application to the DB instance in SQL Azure. This way you debug your application and find additional problems. Remember that you could get the connection string through the SQL Azure portal. Test your app. Does everything work? Then move your ASP.NET app to Azure and publish it. Congratulations, you are now connected to the Cloud!
Here are few points I found migrating my ASP.NET MVC app:
- There is no support for Session Affinity (Azure is Stateless) – I’m aware that Azure load balancing doesn’t support Session Affinity – hence the existing web application should be changed if it has session affinity.
- If you get this error debugging your app in Azure: "Windows Azure Tools: Failed to initialize the Development Storage service. Unable to start Development Storage. Failed to start Development Storage: the SQL Server instance ‘localhost\SQLExpress’ could not be found. Please configure the SQL Server instance for Development Storage using the ‘DSInit’ utility in the Windows Azure SDK."
It is because the Dev Store is pointing to a named instance of SQLExpress and if you are using SQL Server like me, then you would need to do like what the error message said.
Go to where the devstore is installed i.e.
C:\Program Files\Windows Azure SDK\v1.0\bin\devstore
and type
dsinit /sqlinstance:.
Take note of the "." which indicates your current default unnamed SQL Server instance.
You will then be prompted with a screen that informs you that the installation is successful and the development storage is ready for use.
You can now start the Development Storage service. - If you get a lovely 403 – Forbidden: Access is denied. You do not have permission to view this directory or page using the credentials that you supplied. It’s because you hit the directory instead of a page. Check this page out to see how to set a default document in the web.config (web role’s don’t automatically load a default.aspx like you might expect – you have to set it): http://blogs.msdn.com/rakkimk/archive/2007/05/25/iis7-how-to-configure-the-default-document-of-the-website-in-its-web-config.aspx
- If your ASP.NET app is based on MVC, ensure that the System.Web.MVC assembly is included in the service package that you deploy to Windows Azure. To do this, for a Visual C# project, expand the References node in Solution Explorer for the MVCAzureStore project, right-click the System.WebMVC assembly and select Properties. Make sure the Copy Local option is set to True.
Here there are some tips for moving your DB to SQL Azure:
- SQL Azure Database exposes a Tabular Data Stream (TDS) endpoint to databases that are hosted in the cloud. TDS is the same network protocol that on premise SQL Server uses, therefore, a desktop client application can connect to SQL Azure Database in the same way it connects to an on-premise SQL Server instance.
- You won’t be able to connect to your remote SQL Azure DB using SQL Server Management Studio (SSMS) 2008. I guess this will be supported in R2. Currently you can only connect using a “Script Window” to an specific DB. There is no support to “USE <DB>” though.
- Remember that SQL Azure only support a subset of the services provided by your on-premise SQL Servers (check out this list of supported SQL commands, or Unsupported Transact-SQL Statements (SQL Azure Database) – MSDN).
- There is no GUI-based admin tool, so you will need to create everything (Users, Logins, DB, Tables) using SQL commands and scripts. There is a couple of community provided GUI tools to enable basic operations on your DBs. Check SQL Azure Manager
- If you want to migrate one DB from SQL Server 2008 to SQL Azure, and you expect to find some “Attach DB” or “Restore Backup”…forget it, you will need to use your good-old Bulk Copy/BCP, INSERT scripts or SS Integration Services (SSIS). If you want to give SSIS a try this could help you. Some other handy tools:
- I just found a plug-in called SQL Azure Data Sync Tool for SQL Server, but I have not tried it.
- SQL Server Migration Wizard http://www.azuresupport.com/2009/12/sql-azure-introduction/2/ . I ended up generating INSERT scripts using this tool.
- Be aware of some deprecated features while moving your DB structure and data using SQL scripts:
- ‘ANSI_NULLS’ is not a recognized SET option.
- Deprecated feature ‘SET ANSI_PADDING OFF’ is not supported in this version of SQL Server.
- Deprecated feature ‘More than two-part column name’ is not supported in this version of SQL Server. This a significant change if your using Schemas.
- Deprecated feature ‘Data types: text ntext or image’ is not supported in this version of SQL Server.
- Deprecated feature ‘Table hint without WITH’ is not supported in this version of SQL Server.
- A full list id found at Deprecated Database Engine Features in SQL Server 2008 – MSDN.
See you up there!
Live to tell about it!
Thanks god is Friday! Time to breath some fresh air, go out and do some hike.
Want to see my last known position? Check this out:
http://share.findmespot.com/shared/faces/viewspots.jsp?glId=0fsO8qVuo7rat0EBdioLWddeqUvKpLeMk
See you out there!
Off Topic:
- Should I use an ORM tool like SubSonic, nHibernate, or .netTiers? Which one of these have the best performance? I am current using bare DataReaders (which are lighting-fast), but I am sick of updating the DAL components with every change in the DB. Should I stay or move? Now or never..
- Remember the performance benefits of using SPs vs Inline-SQL? Well, since SQL 2K both methods have pretty much the same performance! Both are compiled by the DB engine. Did you know that?? Check this.
- Building a quick-n-dirty Web app to CRUD the data of the H Initiative. Playing with GuidViews, DetailViews and SqlDataSource controls, knowing their pros/limitations.
- I finally got my Windows Azure and SQL Azure test accounts. Time to current iteration the H Initiative in the clouds.

