Monday, October 26, 2009

Cloud Applications Part II (aka Cloud Computing Definition #3)

In previous post we’ve coined the first cloud computing definition. Remember it, please: “A cloud application is a computer application developed using a standard computer language that can be run on different platforms. One or more resources used by a cloud application are networked resources accessible via Internet. In addition, resources used by cloud applications are exposed via standard interfaces and protocols and should be interchangeable.” Now, let’s continue talking about networked resources.

Networked resources
This is one of the main differentiators between a “classic” computer application and a cloud application. Cloud applications use resources that can be reached through Internet. These resources are offered by different companies at different prices and, of course, different service levels.

Please, at this moment, think of a networked resource as something similar to a web service but with a lower abstraction level.

When someone decides to build a cloud application, one of the first steps in the development he must perform is to decide which of the resources needed for building the application will be bought from an external company and which of them will be used as part of an in-house strategy. I’ll explain it.

Suppose you are developing a web application to support a student registry in a XXI century school, where all students’ works and exams are digitalized and stored as part of its academic files. Now just think of a simple CRUD application (Create, Read, Update and Delete). The following list could be a typical shopping list for that kind of application:
  • Servers to host and execute web application.
  • Database storage for storing records that will be created and accessed online from the application code.
  • Plain online storage for storing pictures related to students. This storage must be online, since web pages include pictures of the “objects” the application manages. Since we plan to have lots of digitalized data, we discard the use of blobs.
  • Plain offline storage for backup and restore purposes. Let’s assume a weekly backup of the whole database and filesystem-like storage (digitalized exams and works).
You can run the application in your server farm at your datacenter or conversely you can sign a contract with an ASP (Application Service Provider) to host your web application (this could be considered a cloud service).

What to do with the database? You can use your in-house relational database or, thinking about cloud computing, you can use relational cloud storage to store your data.

The same decision must be taken for the plain storage for storing digitalized info from students and weekly backups.

Anyway, all the services you buy from a third-party provider (instead of using your datacenter resources) must have a very clear contract and a corresponding SLA including minimum service levels offered and penalization for running under that minimum.

Please keep in mind the student registry sample, since in next posts I will refer to it.

The relational database, the online storage, the offline storage is what I call networked resources, since the can be accessed from the application wherever they are stored. Please note that we don’t care about SAN, NAS or SQL. For the moment, we are caring only about having a resource and accessing, we are assuming we have a standard platform-independent way of accessing and using precious mentioned networking resources.

Note: We will come back to this point (deciding between in-house or cloud strategy) in future posts when we will expand EMC’s “private cloud” definition from infrastructure level to application level.

Standard Interfaces and Protocols
Although it has been mentioned before, I wish to remind you that the most commonly used mechanisms for performing remote invocation standard uniquely inside each native platform (DCOM on Windows, remoting on .net or EJB on Java). The only real standard platform-independent mechanism that can be used in remote invocation is Web Services, which means SOAP over HTTP. So, it is clear that standard platform-independent mechanisms (like SOAP or REST) is the only recommended way for accessing networked resources.

Interchangeable
Yes, I sad interchangeable, but, at this moment, it is only a desire, or just a dream. We will go back to this complex issue in the future, after discussing Amazon, Windows, Google and others’ cloud strategy.

Summary
Finally, I wish to publish my first Cloud Application Stack.

Sunday, October 18, 2009

Cloud Applications Part I (aka Cloud Computing Definition #3)

Ph. D. Julio Fernandez Vilas
¿Any comments? jfvilas@gmail.com

According to previous posts, the cloud computing (CC) stack has been reduced to just a single cloud computing block (ooops, zip time?). Remember, as stated in first post, cloud services are in fact what I call web 1.5 (just typical web applications), and cloud infrastructure is something that could be defined as “virtualization revisited”, that is, Infrastructure as a Service (IaaS).
So, we must now focus on cloud applications. What is a cloud application? The first possible definition is: “A cloud application is a computer application developed using a standard computer language that can be run on different platforms. One or more resources used by a cloud application are networked resources accessible via Internet. In addition, these resources are exposed via standard interfaces and protocols, and they should be interchangeable.”



Computer Application

Let’s analyze this statement. First of all: “computer application” is a vague term used here to define an application able to run on a client desktop platform (let’s say Windows, Linux, MacOS…) or any connected or loosely connected thin device. Thin device is generic term that includes lots of devices like PDA’s, cell phones, notebooks, wifi- or Internet-enabled devices, like a DS, a Wii, a PlayStation or an Xbox, for instance.

On the other side, a web application is also a computer application, with the difference of running on a server instead of doing it on a client device like the ones mentioned before.

It is very important to note that when we talk about an application here, we are really referring to an application that can be used by end users or other applications. This is a very important matter to take into account, because, as we will discuss in future posts, cloud applications will be the basis for cloud companies, companies targeted in offering value-added applications (VAA).


Standard Computer Language

This is a tricky term to define without hurting somebody. Firstly, one can think in C# (or just .net) or java when the word “standard” arises referred to a computer language. But what is really a standard? If we accept a standard is something broadly used, something that has been used for a long time, we must agree that COBOL, C or RPG, for instance, are standard computer languages.

A very important thing to take into account here is the way applications are developed when they need to access external resources. Web services (and SOAP, and REST, and whatever you need) is the standard when talking about calling or accessing a remote service. This means, as everybody knows, that, nowadays, the standard in remote invocation is SOAP. I didn’t forget DCOM, RPC or EJB, but all of them are platform-dependent, and I don’t take them into consideration when the word “standard” is the key factor.
Although it is normally unknown to a great number of developers, COBOL (or even PL/I) is still used in assurance, stock exchange, airlines, banking, financing, etc., this means that most of the money in the world is managed and transacted using languages and platforms designed in early 60’s. Is this bad? No, absolutely no. In fact, trust me, COBOL or PL/I running on IBM mainframes can very easily call a web service and, of course, they can also easily act as a web service provider.

What does all this means? Web services are the standard in remote invocation, for new and antique languages.


Different Platforms

As stated before when talking about what a computer application is, a cloud application should be able to run on any known platform. There are several categorizations that can be applied to the word “platform”. Firstly, a platform can be defined by a hardware architecture, an Operative System and a computer language. From this point of view, the following list contains several possible platforms:
  • IA64, Linux, PHP (a typical LAMP machine, for example).
  • IA64, Windows 2008 and .net (Winforms or ASP.net applications, for instance).
  • S390, CICS, COBOL (typical COBOL-CICS-DB2 mainframe application).
Another possible classification for platform can be client/server. That is, a cloud application can run in client platform (Blackberry, Symbian, Windows (7, CE, Mobile…), OSX, Linux…), or in a server platform (Linux, Windows, z/OS, AIX…).

Typically, a server platform cloud application can be used in one of two different ways:
  1. As a web application, clients use cloud web application as a traditional web application, accessing it by using its browsers.
  2. As a cloud resources provider. That is, the cloud application uses cloud resources and then is offered to new customers as new value-added clouded resources, once again VAA.
To be continued…

Wednesday, October 14, 2009

Cloud Computing Definition #2

Ph. D. Julio Fernandez Vilas
¿Any comments? jfvilas@gmail.com

If we think that “cloud servicing” is not a kind of cloud computing, what should be considered cloud computing? There are still 2 parts of our cloud computing stack: applications and cloud infrastructure. Let’s talk about cloud infrastructure, a.k.a. IaaS (Infrastructure as a Service). EMC (the storage giant famous by its Symmetrix boxes) bought VMWare several years ago. As it occurred with no other companies bought by EMC, VMWare has not been included into the EMC Corp., and it has been kept as a separate company instead. It’s just a bit of history.

EMC sees IaaS as a “double-cloud infrastructure” built by the private cloud and the public cloud. What EMC thinks about “clouding the infrastructure” is closely related to what its award winning ESX is designed for. According to EMC view, companies using virtualization infrastructure (I think EMC’s theories are right for ESX or even for Xen) should enter in a “virtualize-everything” mode. This way, the virtualized infrastructure can hold all the infrastructure needs of the company.

The infrastructure can grow or decrease according to business needs. The benefits of virtualization are clear: changing the capabilities of the infrastructure is as easy as adding a new server to the virtualized farm. Companies will be positioning this year and next one in this “virtualized datacenter stage”. In fact, the private or internal cloud is an evolution of the virtualization of the whole datacenter.


How can datacenters prepare for the IaaS? I´ll point out just three guidelines:
  1. Create (or expand) a virtual infrastructure to support the running business services.
  2. Prepare your systems to be run in the cloud, that is:
    1. Reduce the number of different cluster you manage.
    2. Create the fewest number of different clusters that support your business.
    3. Expand your cluster(s) with all the nodes you need.
    4. Deploy all the software you use to run your business to all the nodes.
    5. Use a load balancer to specialize the workload of each node or group of nodes.
  3. Manage your virtual infrastructure.
Nowadays I don’t see an easy way to move (i.e., LiveMigration, VMotion or whatever) an OS image running in your private cloud to the public cloud (is there any public reliable ESX service?).

What would you do with your storage?
  • Suppose you use FC: you should have a very clear extended SAN that crosses your private SAN boundaries (maybe with FC-IP) and expands to a hypothetic public SAN service, so when you move your OS images to the public cloud, FC access should be provided to the nodes of the ESX farm.
  • Suppose you use iSCSI: you show work with communications staff in order to create alternative routes to your storage when you move OS images to the public cloud.
  • You may use CNA's: you have a problem.
There are several beta experiences related with the VMware ecosystem: bluelock, hosting.com, Logica, melbourneIT… It is very important to note that they are all beta services. So, going back to our main discussion, can virtualization be considered cloud computing? We can say, without a doubt that virtualization is the base for IaaS. But I prefer to restrict the term cloud computing to other things more closely related to what computing means.

Finally, in Cloud Computing Definition #2 we exclude virtualization as a main objective and we think of it as a booster of IaaS. In future articles we will talk about XaaS (Everything as a Service) ans its relation with cloud computing.

Friday, October 9, 2009

Cloud Computing Definition #1

Ph. D. Julio Fernandez Vilas
¿Any comments? jfvilas@gmail.com

So, why do you need a definition of what Cloud Computing is? Do you really need it? Ok, maybe you still don’t know what does Cloud Computing means. Maybe you are an IT specialist of any kind and Cloud Computing is something vague for you. So it is for me, too.

First of all: forget about finding an exact definition of Cloud Computing (CC). There is no standard or publicly coined definition about what CC is. I will try to define it by using several analogies.

Everybody knows what Web 2.0 (W2) is. Right? W2 is an evolution from what can be defined as “dynamic web” (that is: rich web sites where users and companies can perform some kind of e-commerce). I use the words “dynamic web” in order to make a distinction of what in its origin was called “The Web”, just a static web where companies can publish information. Let’s call it web 0.9, or even “Web beta”. Several years after the initial use of web beta, big companies entered the Internet to make business. They saw the web as a new channel to produce new income.

At that moment, “web beta” evolved to a dynamic web, web 1.0, where users can buy goods and services from “web-enabled companies”. Travel agencies, flight companies, books, music, gifts, auctions… Lots of companies came up at an era finally defined as the dot com era.

Ok… What a nice story!!! Let’s continue.

Several years after the web reinvented itself evolving to W2. W2 means free user interaction, means social networks, in general, W2 means freedom to people’s thoughts.

But… what does it happen to web applications? Here is where CC comes into. It can be said that W2 relates to social networks as CC relates to web-enabled companies. That is, CC is the Web 2.0 of business. Or even, one could say that CC is the evolution of B2B.

All these assertions can be accepted. But the problem here is that there is a lot of confusion about CC because of marketing messages.

In order to separate authentic CC approaches from marketing messages coming from companies who wants to stay on the wave, we first build a stratified decomposition of CC. Let’s look at this first picture, with CC three levels.


At the top, “Cloud Services” are services offered to customers (via Internet connections) to different kind of devices. Typically printing services, like HP’s CloudPrinting or SnapFish are being offered like “Cloud Services”.

At the very bottom, cloud infrastructure enclose a set of services that can be used to, for instance, host an application, a server, or any kind of hardware or base software you use these days in your datacenter. Cloud infrastructure has a lot to do with virtualization. For example, VMware, and the EMC’s theories about Public and Private clouds walk this way.

In the middle, applications developed by companies can now benefit from re-using external services (typically exposed as web services) in a pay-per-use model. For example, AWIS (Amazon Web Information Services) or SimpleDB are base software services offered by Amazon Web Services.

From my point of view: Cloud Services, as they are known these days, have no relation with the desired Cloud Computing stack. In fact, most of the cloud services that are being announced everywhere mean taking one step back in Internet evolution. I would rename Cloud Services as Web 1.5. Why?

Printing a picture from your BlackBerry or iPhone via 3G/GPRS and receiving your photos at home is a “cloud service”? No, surely no. Why do I say “no”? Just think about developing such a printing application and try to answer these questions:

  • Do I need any kind of virtualization infrastructure to run my application?
  • Do I need to use a service from another company to build the application?
  • Finally, do I need 2009’s technology to develop my application? Could I have developed my application 8 or 10 years ago?
I expect you to agree with me that a printing application over Internet has nothing to do with Cloud. This is only “Cloud Marketing”.