Takeaways from Montevideo’s CloudCamp: Understanding Azure platform better than ever
Yesterday I did participate in the CloudCamp at Montevideo. Three things promised to be interesting in the event. First, the structure: An unconference, with unpanels, lightning talks, open spaces, etc. Then, the participation of special guests: Eugenio Pace and Scott Densmore from Microsoft Patterns & Practices Group, and Dave Nielsen from CloudCamp.org. Finally, obviously, the subject: cloud computing.
And the promised was fulfilled. The event was unstructured and we from the audience have a lot of chances to participate, so everybody helped to shape the event to make it worthy from our own perspectives. Gastón Milano, form ARTech, and Eugenio, each one with a short but valuable lightning talk, and Andrés Aguiar, from Infragistics, in the coordination of the event, really made a superb job. Dave turned out to be a good performer, and his talk was very funny. Regarding cloud computing, although we spoke about multiple vendors, compared offerings, etc., was dominated by the Azure platform.
Some things that I take away from the CloudCamp (along with a copy of Application Architecture Guide and a copy of Claims-Based Identity and Access Control books all attendees received):
Azure is not only made to scale. I can also do with Azure (almost every) plain vanilla ASP.NET application I used to, without using worker roles, queues, tables, or blobs at all. All I have to take into account is the lack of session affinity in Azure, i.e. browser’s requests from the other side of the cloud during a user session can be handled by any instance, so somehow I must be very aware of every request coming from the same user. This problem existed before; the only difference is that in some pre-Azure (on-premise) scenarios, I could simply live with it. With Azure, that is not possible anymore, and I should use some session management mechanism (by the way, those mechanisms were available long time ago, as a tokens in the URL, hidden form fields, etc.).
Besides that, if I can turn my ASP.NET application into a web role, I am not obligated to use any of the new Azure’s features. If I want my application to be ready to scale, obviously, I must use some or all of these new features (depending on the reasons why my ASP.net application need to scale).
Although Azure was created not only to provide scalability, the truth is I can scale if needed to. The decoupled web-worker roles model, communicating them through queues, as well as the tables and blobs able to contain huge amounts of data, the dynamic configuration instance to demand, automatic load balancing, etc., every new Azure feature is designed to enable developers to easily create easily scalable applications. Notice I have used easily two times in the previous sentence on purpose: it is easy to create applications that scale, as we use the same languages, technologies, etc. we have been using for ASP.NET applications, and it is also easy to scale, because I only have to change settings to get more power, without almost any upfront cost.
Scalability and computing power are not only available for web applications, the ones we usually made with ASP.NET. I can also use Azure for computing-only tasks, using just worker roles, but no web roles. Since I need to move data to the cloud in order to be processes there (and probably back), computation might be cheap, but data transfer might not (remember, you pay no only for the space you occupy, but also for the bytes you transfer), so I need to be very aware of costs trade-offs.
When we began to hear about tables and blobs, especially about tables, we saw as a constraint the lack of SQL queries, the fact we cannot have indexes, we cannot use ADO.NET, etc., etc. And the truth is that tables and blobs are not made to solve the problems we usually found on daily basis when dealing with data storage. SQL Azure is there to solve these problems, not tables or blobs. These solve new problems, the problems most business applications’ developers like us almost never face (unless our business be Facebook or You Tube): store huge volumes of data (such as images or videos). In a blob that stores videos, we would never query video content (by issuing for example a SELECT * FROM VIDEOS WHERE “FERNANDO IS DOING A DEMO”). If I need to retrieve all Fernando’s videos, I’ll also use SQL Azure, I will do a standard ADO.NET database query to retrieve all the pointers to the videos, and once I have those pointers, I will get the videos right away from the table or the blob.
Someone may say that these things are obvious, but in my humble opinion these are not emphasized enough.
In summary, a very attractive Conference format, the opportunity to chat face to face with experts such as Eugenio Pace, Scott Densmore and Dave Nielsen, and the opportunity to listen and speak on a new and attractive topic as cloud computing is, that was what I take away from the CloudCamp.