Friday, May 14, 2010

Cloud Computing & Mobility

Recently I read this news article - Google launching the printing services in cloud. To explain more on what is cloud computing and its relevance with mobility, I attempted to write this based on various articles read and representative applications developed in the past by Endeavour.
I did a lot of web reading on cloud computing prior to working on couple of cloud services for my earlier projects. Ran through almost every article that came my way and through of summing up everything into this one. We have all heard about the cloud computing and also seen some of the well-known examples working successfully. But very few really have the clear picture of what cloud and cloud computing is. If you ask this question, majority of the respondents will tell you a different definition of cloud computing and that is why an average business user is confused – and so the decisions he/she makes!
The wikipedia definition for cloud computing is –
Cloud computing is Internet-based computing, whereby shared resources, software and information are provided to computers and other devices on-demand, like a public utility.
The cloud computing is the evolution of technologies starting from personal computing, client-server computing, mainframe computing to modern day grid computing.  It’s not new to the software industry as a concept. Basically, the cloud represents the Internet. And broadly speaking the computing performed in the cloud can be called as cloud computing. There have been many solutions that were using the cloud in one or the other forms. The difference is the magnitude and the solution nature it had earlier.
One of the major reasons why enterprises are looking at cloud computing as potential solution is – cost reduction. It’s basically the pay-as-you-go nature of the services that make Cloud computing look so enticing! But, before making any decision on whether cloud computing is meant for every customer, we should look at the basic attributes that the potential solution needs to satisfy.  If we ask this question to any senior architect who has written the cloud computing based solutions, would answer, “It depends”! And that is really true. Lets see how.
Not every application or solution needs the cloud computing. Majority of the application used internally in the enterprise may not need any or minor cloud support. If we evaluate the potential application/ solution to be cloud-enabled, we would primarily need to consider these application attributes –
Data Management, Maintainability, Reusability, Availability, Portability, Scalability, Affordability, Reliability, User Experience and Distribution.

Of all these attributes (and could be more), we have to look at what are most important ones to address and climb up on our “must have” list. Each one of the above attributes can be dissected further in to sub-attributes. For example, the scalability can be further assessed with respect to – Replication, Caching, Pooling, Load Balancing, Scale Up – Scale Out, Hardware scalability.
Following chart – according to MS Architecture Journal (credit to Darryl Chantry – senior architect with Microsoft) describes this decomposition of the basic application attributes – 

User experience - Usability; Responsive; Efficiency; Performance; Personalizable; User interface, Graphical; Distributed; Interaction model; Device; SaaS; Online 
Security - Emergency hot fix; Security procedures; Trust relationship with platform; Applications security model; Data flow; Malicious code; Access controls; Cryptography; Auditing; Authentication & Authorization model 
Affordability - Resource cost; Development; Available skills; Software enhancements cost; Licensing; Postproduction hardware; Decommissioning; Initial hardware 
Data - State (State full, Stateless); Stability; Application constraints; Database constraints; Persistence; Online/Offline; Structure (Unstructured, Indexed); Searchable; Transaction management 
Maintainability - Available skill sets; Language support (dev); Application standards; Technology implementation; Application-code complexity and Volume; Configuration management; Operational management; Flexible; Technology 
Scalability - Replication; Caching; Pooling; Software load balancing; Scale out; Scale up; Hardware load balancing 
Availability - Technology/Configuration; Implementation to support; Availability; Uptime requirement 
Conformability - Auditable; Regulatory; Standards 
Portability - Cross-platform; Within platform 
Distributability - Local; Geo-distributed 
Extensibility - Meta-model; Configurable 
Reliability - Configuration management; Startup and automatic recovery; System performance; Recovery procedures and methods; Load balancing; Fault tolerance 
Interoperability - Communications and data usage; Integration impacts; Architecture compatibility; Ease integration (APIs) 
Reusability - Distributable and reusable; Modularity; Hierarchy; Code abstraction

The Cloud computing based solution can have several components but at the top level it shall have following components –
  • Cloud Infrastructure
  • Cloud Platform
  • Cloud Storage
  • Core Services
  • Cloud Application
The Cloud Infrastructure moreover represents the physical attributes of the solution such as servers, virtualized hardware and so on. For a large-scale solution like Facebook, MySpace etc, Cloud infrastructure plays very important role by providing the much-needed horsepower for the processing! Many virtualized server solutions are available today to help implement the clouds.
A cloud platform is really the ability to build, test, deploy, run, and manage applications in the Cloud. Cloud platforms offer alternatives to these actions; for example, the build experience might be online only, offline only, or a combination of the two, while tools for testing applications might be nonexistent on some platforms, yet superb on others.
The cloud Storage includes the ability to store large amount of data in the cloud. It is often inexpensive, easy to access and highly available due to virtualized redundancy stores. There are several cloud storage service providers available who provide pay per use storage mechanism and mostly with 24/7 support. The flip side of this mechanism is though – reliability and privacy. The enterprise solutions that demand transaction support aren’t yet fully available. The data privacy is often questioned when it comes to the sensitive data storage. But not to mention that the cloud services for healthcare (Google and Microsoft are leading this space!) despite of HIPAA and FDA like stringent regulations!
The core services are the ones that fuel the cloud application logic and key services in the entire solution. The Cloud can derive all its functions from the cloud services or can depend on only the key services from the cloud. Base don the need of the solution multiple services from multiple clouds can be consumed in the overall solution. For example the billing and processing can be services at one vendor whereas the system integration services such as authentication/ Identity management can be done with other. It really depends on the needs of the overall solution.
The cloud Application can be fully or partly in the cloud. Meaning some of the features in the application may be native to the app while core services come from the cloud. On the other hand the application may be very well architected to rely completely on the cloud in always connected mode. This can eliminate the need to spend efforts on maintain, deploy and support! This would be the perfect example of Software as a service (SaaS).

Mobility Component in the cloud solution
As you would guess, if an application that involves the most of the core services, infrastructure and platform elements to a typical cloud, either a thin client application or perfect mobile web client is the best candidate to make use of the cloud services.
By the inherent nature of the mobile applications/ platforms, they tend to depend heavily on the server side infrastructure and the support. Only limited storage, service and features are available on the phone itself. Basically, the phone application that is partially outside the cloud and utilizing the other components from the cloud is more likely to be the case for future solution.
According to ABI Research article the mobile will become the disruptive force in the cloud computing. The Article suggests that the cloud computing is future of the Mobile. Although it does not mean that phone apps will no longer be relevant or sought after solutions.
Solutions such as SalesForce.com are offering the platform such as force.com one can build the enterprise solution and run it on the cloud. Amazon Web Services and Google App Engine are also hinting this trend.
According to Sarah Perez’s article on ReadWriteWeb.com, the Juniper research has predicted the market for cloud based mobile applications to grow by 88% by 2014 amounting to $9.5 billion.
As Sheryl Kingstone of Yankee Group said in a research note: "The fusion of cloud computing, application mobility and social media will transform the enterprise mobility space”. She is renowned writer and columnist. She describes the IT Anywhere to be future with Enterprise Cloud, PaaS (Platform as a Service), SaaS (Software as a Service) and IaaS (Internet as a service) as its basic components of virtual enterprise of today and tomorrow.

Example of Cloud Solution
The hypothetical “EasyData” cloud solution for the online backup and data protection services is example I would like to mention here in this context. The mobile application, the desktop based application and an interface delivered through the TV set top boxes, would be ideal cloud applications.
Think of the features that allow you click the photographs on the mobile phone and let’s you share it with your friends/ buddies. Or the application that backs your data in real time from the computer or phone and stores on the storage situated in the cloud.
The photos and documents you share it with you friends or parents can be seen from the TV at home without any computer. Just switch on the TV and browse your shared files!
It seems so fascinating but the implementation would be very simple if we adopt the approach of build the solution that heavily relies on the cloud. Given the diagram below to represent the concept - 


Currently we are working on an iPhone application that does file sharing, printing, archiving, secure storing and retrieval!

More information on Cloud Computing –
During my research on this topic I found some interesting articles and news relating to cloud computing. They are mentioned below -