Table of Contents
Website url: http://sosuly.azurewebsites.net/
I'm playing with Window Azure and this is an opportunity for me to build something real with the offerings of Windows Azure. This article is log of my activities carried out while developing the application for Windows Azure developer challenge.
Now a days everyone is using different social networks for different purposes. So the data of single individual is spread across these networks. It becomes very hard for the user to manage, find and enjoy the data (may be updates, photos, videos) that s/he has shared in the past. There is no control of the user on the data that s/he shared across the networks. If one looses the access to the account then all the data has gone. There is no way to backup the data.
This is where my cloud service is going to help end users to control and manage all their data spread all over the social networks at a single place. User will be able to search through the data, make copies of it, share with friends and families. User will be able to enjoy all the videos and photos belonging to her/him irrespective of the kind of devices s/he is using.
Creating a free trial account with Windows Azure is fairly easy. Just browse to free trial page. Make sure you signup with this link so that CodeProject can track who's signed up for the first challenge. This free trial is valid for 3 months.
- Microsoft Account: To sign up for trial account, you will need Microsoft account. If do not have a Microsoft account create a new one.
- A Mobile Phone: To send you a verification code by text message.
- A Credit Card: Required for proof of identity. No obligation to purchase and no charge unless you explicitly remove the spending limit.
This trial account gives you almost all of the features to use for the trial period as shown below -
More details can be found here. If you already have free trial account and it is about to expire you can upgrade your account to paid account or create a new free trail account with a new Microsoft account. You will go through the following steps -
Step 1: Click on "try it free" button", you will see following screen -
Step 2: Click on right arrow button at bottom left, it will take to the following screen. Enter you phone number and click on 'Send text message'.
Step 3: Enter you payment details on screen 3. You will not charged for usage. This details are for verification and will be used for billing if you upgrade you account.
If all goes as per planned, you will be in.
Windows Azure provides Infrastructure as a Service (IaaS) and Platform as a Service (PaaS). I'm going to exploit both of these possibilities for my new cloud service to what I call as Backup as a Service (BaaS). Windows Azure will save me from mundane tasks of hardware and software provisioning, networking and maintenance. I will use Azure Storage, Compute and Media Services for this cloud service which are available at one place.
Sosuly will provide an interface to import your data. It will store you status updates, bookmarks, photos, videos from you different accounts. Following figure will show an overview
Sosuly is a data backup service in the cloud. This cloud service will have following features:
- Signup using different OAuth (Facebook, Twitter etc.) and OpenId providers (Yahoo, Google etc.)
- Add/remove different input services from where Sosuly will pull user's data on their behalf to backup
- Select options how frequently the backup should be taken
- Provide interface to view the backup content.
- Users can view content on different devices. To facilitate this Sosuly will encode/convert the media imported from various input services.
- Provide interface to backup data from user's devices directly to Sosuly.
- Input services includes social networks (Facebook, Twitter etc.), RSS Feeds, Emails and other services.
- Input data can be text (status updates), photos, videos, documents etc.
Azure website provide a to host web applications with minimal deployment and administration efforts. I can develop and test my website locally with local IIS Server and move it as-is to Azure website. This minimizes my deployment time and efforts. Sosuly will use Windows Azure Websites and Cloud Services to provide an interface to import, manage and share the data stored in Windows Azure storage. Application will integrate with popular social networks to import data. User can view, search and share imported data. Additionally user can directly upload data to Sosuly and then share to various social networks. Sosuly will user Virtual Networks, Traffic Manager to achieve load balancing.
SQL Database is SQL Server in Windows Azure cloud previously know as SQL Azure. It is a relation database management system and as I have a experience working with SQL Server on local installation there will no difference in the way I will interact with the SQL Database. Sosuly will mainly use SQL Database to store memberships, user preferences and other relation data.
Table Storage is NoSQL database offering from Microsoft which work in a different way than relational database. It provides fast data access to typed data as it stores the in key-value format. Data in Table storage can be retrieved with group key which is unique to the table. Sosuly will use Table storage to store the textual and document based data for fast access.
Blob Storage is very different that SQL Database and Table Storage. It is used to unstructured data like photos, videos, pdfs and other kind of binary or unstructured data. Windows Azure drives can also be used for persistent storage for blobs. A single blob can be as big as a terabyte. Sosuly will use Blob Storage for storing such kind of unstructured data.
Windows Azure provides Media services to handle media operations like conversion, encoding, ingest operations on audio/videos. As Sosuly will be streaming videos to different devices it needs adapt video quality and resolution according to the device that user is using to access the website. Media services will help to convert the videos in different audio/video formats.
Windows Azure offers messaging infrastructure with the help of Queues and Service Bus. Queues simply take message from one application and another application can read it from it process that message. Sosuly will be using Queues for passing message from Web role to worker role (say about media processing etc.). On the other hand Service Bus provides pub-sub mechanism with a queue where in one application send the message to topic and other applications can subscribe to that topic. Sosuly take advantage of Service Bus to create a loosely coupled communication infrastructure for the applications running different devices like smartphones, desktops and tablets.
Serving all the content from the originating server caused to en cure charges and give a sluggish user experience to the end users. Caching and CDN Services will help to cache the frequently used resources close to the user. Sosuly will track which kind of content is frequently request according to the user's geography and according use the CDN from that region.
Virtual machine provides dedicated computing resources for resource intensive operations. They can provisioned and de-provisioned on demand basis. This helps to minimize the hardware costs. Sosuly will be using Virtual machine for long running media tasks, other tasks which need to be run as a service.
Source version control helps to manage the changes in the code. It helps us to keep the log of the code activities and enables us to revert to perticular version of the application or branch it out and work on different features. It also helps to collaborate between team members on the same codebase and helps us to track the developement progress. Windows Azure supports TFSVC and Git repository.
I will be using TFS to host my code repository. I can host TFS in my local environment or I can buy a hosting for my TFS Server. I'm choosing a free service from Microsoft. It is a good option if we want to have private repositories and free for team of 5.
Here is the process for signing up for Team Foundations Service:
Step 1: Click on 'Sign up for free', it will take you to the following page where you will need to create a subdomain from where you can access your respository within the browser.
Step 2: Enter desired subdomain for your code repository and click on 'Create Account'. This will take you to Windows Live ID sign in page if you are not already signed in. Sign in with your Microsoft Account (Windows Live ID).
After successful creation of your account you will see the home page as below:
Step 3: Create a new project as per your choice of repository (TFVC or Git)
TFS will create a new project for you
After successful creation of a project
Step 4: Browse your project from home page:
Once you have created TFS project as described above, you can go ahead an create an Azure website to host your Asp.Net MVC application. I will describe how to create a website in Windows Azure environment below:
Step 1: Login into Windows Azure portal and click 'New' in the bottom toolbar as show below and custom create a new website:
Step 2: Fill in the desired url for your new website, select region in which you want your website to be hosted. At the time of this article, Windows Azure support 4 regions namely - North Central US, North Europe, East Asia and West US. Select database of your choice (SQL Server/ MySql). Last and important make sure you select 'Publish from source control', as we are going to publish directly from our TFS project.
Step 3: Next, fill in your database settings, keep you database in the same region as of your website for obvious reason of database communication time as below:
Step 4: Now we will connect our website to out TFS project. Select 'Team foundation service' from providers list as below:
Step 5: Enter your TFS account created above (Source version control section)
Step 6: Click on authorize to connect to TFS account
Step 7: Choose the name of the project you created above (Source version control section) and you are done.
Now create an Asp.Net MVC 4 Web application as you always do:
Once you have created the application, right click the solution and add it to source control as shown below:
Select TFVC from protocol list
Click on Servers -> Add and enter the TFS account url
Select your team project created above (source control section)
Select the path to add your solutio to as below:
After you are setup with all these you can go ahead and do a checkin to TFS, after a few minutes if you go to Windows Azure portal and check your website's deployment section, you will see that Windows Azure has intelligently picked up your checkin and deployed for you
Here is the first draft of my website Sosuly looked like:
There are two approaches for designing wesites. One is bottom up - where we design for a device with minimal capabilities and then progressively enhance the design to take advantage of the capabalities of the better devices. This is called as progressive design. The other way to say it is mobile first design.
Second approach works in reverse way - we design for fully capable device and then gracefully degrade the design for less capable devices. This is called as gracefull degradation or Responsive design. One can even term it as desktop first design.
For Sosuly web application, I will be using Responsive design technique and I will take help from Twitter's Bootstrap UI framework. In addition to that for UI styling I will be using Flat UI.
For making my website to run faster for smoother user experience, I'm trying to follow Yahoo! UI guidelines. I will be using Windows Azure CDN to server the static and most frequently needed Media content. Asp.Net 4 provides WebGrease engine to compress and minify static content out of the box.
I'm planning to have more than one instance of website and load balance them using Application Request Routing with Sticky sessions. I have yet to work on it.
I will deploy these websites to achieve Geo redunduncy for Sosuly. I will host atleast 2 websites in each region and have them wired with load balancing to get the optimal output, but I have to explore Geo-distribution with Azure websites.
- 4/28 - Initial version
- 5/01 - Added article outline and updated content related to first challenge
- 5/03 - Added Azure offering usage and update account creation section
- 5/09 - Added source control part for second challenge
- 5/11 - Added Easter egg related update
- 5/15 - Updated website creation and design consideration sections.