Previous Posts to this post
 
Previous Blog Posts Link
Supporting Billions of entities/rows for Mobile – Android Series - Part 1 - Why Scale Matters http://blogs.msdn.com/b/brunoterkaly/archive/2011/09/27/supporting-billions-of-entities-rows-for-mobile-android-series-part-1-why-scale-matters.aspx
Free download link for Azure                
lahxjo2d
   
          
  Here are a few examples of cloud – based data offerings
  Although I work for Microsoft, I want to present as balanced a picture as I can. That means I will address other options that are available to Android developers today, which can be considered to be outside of the Microsoft ecosystem. Some of the cloud offerings are Android specific while others are more general purpose.

My colleague, Aaron Stannard (http://www.aaronstannard.com/) came up with this diagram. As you can see, there is a tradeoff amount the cloud vendors in terms of customizability and of automation. Amazon, for example, is very customizable but is not as automated, since you are still dealing with configuring VMs and other infrastructure-oriented activities.

Google’s AppEngine is on the other end of the spectrum, not very customizable but very automated.

Where Azure Fits In
The point being that Azure does a good job spanning a wider range of needs and options than most vendors.
Azure is not as “pure” Platform as a Service like Heroku or AppEngine. Azure is not as customizable as AWS.
Azure’s model aims to automate as much as it can while still leaving the door open for customization where it’s needed.



image
Figure 1 – Customization and Automation Spectrum

There is somewhere around 200,000 Android applications out in the wild. The types of back-end data stores are many and varied.

I presented several vendors here and I’m sure I missed a few. Feel free to let me know what is critically overlooked (bterkaly@microsoft.com).
  Push or Pull
  There are two ways mobile applications to get their data. First, a mobile application can simply request data. This is called "Pull," because the app is pulling data in. The second type is "Push," which means that data is sent to the mobile application from the cloud without the mobile application requesting it.


image


For example, it may be necessary for the cloud to notify mobile applications when new data is ready. A "Pull" scenario often means your are providing access to the cloud data with a RESTful architecture.

  RESTful Services
  While little can be done in making the client software re-usable, much can be done in creating a re-usable back end to service the various mobile platforms. An open, standards-based approach to a web service makes perfect sense when you consider supporting iPhone, iPad, Android, Windows Phone 7 or any other device that may burst onto the scene. The primary goal is to avoid anything custom on the back end that caters to a specific mobile platform. That’s where RESTful services come into play. The best example of an implementation of RESTful services is the world wide web itself. The important thing to remember is that a RESTful services is an architectural style. How you implement RESTful services is up to you. The inventor of a RESTful services Roy Fielding and he defines what RESTful services are in his seminal dissertation in the year 2000 called, Architectural Styles and the Design of Network-based Software Architectures.
image

  RESTful services are a style of software architecture based on the underpinnings of the World Wide Web.
Faster There is less overhead.
Clean Less duplication, since arrested leverages http’s too late, put in, get, post.
Full adherence to the http spec Very standardize because it uses traditional http.
No complex SOAP envelope It is human readable and testable.
  Below is a rough landscape of cloud-based data providers
  The list below is not meant to be fully comprehensive. It is meant as a rough guide about the different types of cloud vendors out there. There are clearly dozens of other data providers that I did not bother to add the list below. As I said earlier, just let me know through e-mail what you think is critical and why.
  SimpleGeo
3zx0fy0u
  You can think of this offering as an interesting collection of business listings and points of interest. This is an offering that allows you to harness the power of the location-aware aspect of your Android device. In other words it leverages your GPS System on the device. SimpleGeo offers a geographically aware database that you can query and where you can store location data. The SDK is available for many environments, such as Objective C, Java/Android, JavaScript, Python, Ruby,and .Net. For many applications it doesn’t make sense to build all this from scratch yourself.
  UrbanAirship
evnkm1ne
  This is a company that offers Push Notification Services (discussed previously). As stated earlier, this allows developers to send out notifications to its users, such as sending them important messages and updates, breaking news, current weather, and so on. UrbanAirship supports almost all versions of the Android device, which can simplify support for developers.
  MongoLabs
dutowa0n
  MongoDB is an open source database that MongoLabs will host for you. MongoLabs makes it easy for you to expose your data through a RESTful API. The underlying MongDB is a schema free, document-oriented database, that manages your data as collections of JSON like documents. The data can be constructed and nested into complex hierarchies, that can be indexed and are query-able.
  Google
wspqehec
  The name of Google’s data store and cloud products are bundled in App Engine. You can program in a variety of languages including Java and Python. It is a Java 6.0 runtime that is available, so you could support JRuby, Groovy, Scala. In order for these languages to operate in App Engine, there are a set of incompatible libraries and frameworks that you must pay attention to. They also have an experimental language now called Go. There is also a query language called GQL. GQL allows you to execute queries from the Python runtime or from the Admin Console.
  Amazon Web Services
1ghm2xsx
  If you look at the developer offerings from Amazon, you will note Amazon Web Services as one of the first options at Developer.Amazon.Com. Amazon offers infrastructure as a service capabilities, based on their own back in technology platform. I perceive a Amazon on as an Infrastructure As A Service company, which means typically you are booting your own customized virtual machines. Typically, developers will set up their own custom security and network access configuration. I consider Infrastructure as a Service leaving you wanting more, because you’ll end up writing and configuring a lot of plumbing code. Users of the service can access a web service API, which allows you to programmatically add scale or reduce it. Amazon offers both hierarchical data stores as well as relational data stores. Amazon offers multiple data center locations as well as service level agreements.
  Microsoft Windows Azure
qg1ixo1k
  I think that when you look at the spectrum of the offerings mentioned above, Microsoft products do offer a unique approach. Clearly, we offer a full line of comprehensive products, both in terms of Compute and Storage, which include service level agreements and multiple data center support. When I think about how I would separate Microsoft's offerings from the ones above, here is what comes to mind:
Focus only on Data and Code The current sweet spot for a Microsoft developers is the notion of the Platform as a Service model.

This allows the developer to focus only on data and code, nothing else. The Microsoft cloud data centers are self running, the developer never thinks about configuring and starting individual virtual machines.

The developer simply publishes their application and specifies how many instances are needed.

The fabric controller software running in the Microsoft data centers takes care of all the needed plumbing to provide load balanced servers within minutes.
Elegant Implementation of Platform as a Service In the next blog post I hope to show that the Microsoft tooling and coding practices are logical and easy to follow.

I will create a RESTful service, hosted in the Microsoft data center, that can provide almost limitless capacity for data storage to an Android device.

When data gets really big Azure will automatically distribute the data across multiple storage nodes to ensure speedy data delivery.
Easy service customization An extensive framework combined with powerful tooling gives developers the ability to write complex and custom applications very efficiently.

  Understanding Pricing
  Here is a link that will help you understand exactly what your costs are:
hyperlink2  

Blog to understand pricing


  Next post is about Architecture and data.
After that it is about building a RESTful service hosted in the cloud.
And after that post it will be about consuming the RESTful data from Android.