The many types of technology clouds

If you remember from school, there are many different types of clouds. You have stratus, cumulus and nimbus just to name a few. In technology, the cloud is no different. The cloud has a different meaning depending on who you talk to and they are all mostly right but they can be referring to totally different things.

Cloud Architecture

Let’s look at the Wiki definition of a cloud

Cloud computing is the use of computing resources (hardware and software) that are delivered as a service over anetwork (typically the Internet). The name comes from the use of a cloud-shaped symbol as an abstraction for the complex infrastructure it contains in system diagrams. Cloud computing entrusts remote services with a user’s data, software and computation.

There are many types of public cloud computing:[1]

In the strictest sense, cloud computing is not merely just moving your software or services onto a server outside your firewall, but it’s enlisting a service with “cloud” properties like flexible horizontal scalability through elasticity. Cloud architecture is not at all uniform as well. It also means different things to the vendors that provide the services and it they implement it how they choose. Amazon, VMWare Cloud Foundry, Stackato and Azure are some of the hottest cloud architecture services out there today.

Consumer Cloud

From a consumers perspective, the cloud means that your data is stored on the internet somewhere. For example, the iCloud product from Apple keeps all your data in sync between computers and iOS devices. The iTunes Match service stores your music on servers and the same goes for the Google Music service.

Outsourced Cloud

To many IT professionals, the cloud is just a way to offload services they currently have in house to a server outside of their infrastructure managed by someone else to varying levels. Take for example that many organizations have shifted having internal mail servers to migrating to Google for Business, where every aspect of the infrastructure is managed by Google. Another example, might be moving your internal Microsoft Exchange mail server to a hosting provider. The end result, again to varying degrees, is greater reliability and less burden and reliance on internal IT resources. JFrog Artifactory for dependency management has a cloud service or a server you can download. If I purchase this service, can I say that my dependency management is in the cloud regardless of how JFrof implements their cloud service? The answer to this question is yes.

The True Cloud

While the cloud may mean different things to different people, preparing an application for a cloud architecture is not as simple as one might think. There are all kinds of decisions that need to be made and coding practices that should be adhered to. Typically, if you follow Java conventions, then you won’t have much of an issue with cloud deployments. Let’s look at an example Java web application and some of the concerns that need to be addressed prior to cloud deployment to a service such as Cloud Foundry.

  • Your application must be bundled as a war file
  • You application must not access the file system. (Utilize the class loader to load files from within the war, but don’t write to files)
  • Resources/Services should be looked up via JNDI
  • If you cache, utilize caching solutions like EHCache that propagate automatically across instances
  • Persist data to a database such as MongoDB, MySQL or PostgreSQL to guarantee access

For the most part, if you follow the J2EE web application conventions regarding deployments, you won’t have an issue with a deployment to a true cloud environment.

Cloud Architecture Dynamic Scaling vs. Autoscaling

One of the advantages to a cloud architecture is the ability to scale up instances of your application and only pay for what you utilize from your provider. There are two types of scaling, the first is Auto-scaling where a tool is utilized to measure load and will automatically increase instances of your application to accommodate the need and the second if dynamic scaling where you control the scale based on a load forecast. An example of dynamic scaling would be if you normally have a load of 1000 concurrent users and you have an event which will ramp up your load to 10,000. In a more traditional setting, you would have purchased servers and hardware to accommodate the worst case scenario which leaves your infrastructure largely utilized most of the time causing inefficiency and waste. In a cloud scenario,you might have 10 instances to service your normal load and for the 24 hour period of your event, you scale to 100 instances and when the smoke clears, you return to 10 instances. All this can be done with a single click of a button in a cloud infrastructure.

Automatic scaling is provided by some cloud providers in the form of a tool. Amazon provides such a tool that will monitor the load and allow you to set triggers to determine how many instances to ramp and when. Automatic scaling is very useful as it handles the unforeseen, but it should not be used in lieu of true capacity planning. It can also be dangerous and advanced intelligence needs to be built in to determine the different between junk and legitimate traffic. For example, think of what would happen if a DoS attack was performed against your application. Remember you pay based on the number of servers you ramp up.

Under the hood, scaling works by issuing commands to the server through an API. For example, with Cloud Foundry, the vmc command will let you monitor load and add instances which in turn creates a JSON request that gets sent to the server to give it instruction. You can also use a third party tool that interfaces with it in the same fashion or you can also build in the scaling intelligence into your own application by hitting the server API yourself. Using the latter technique, your application can control itself, making it very intelligent.


Regardless of how you see the cloud and how you utilize it, the endgame for your organization should be to offload the burden from your internal staff, decrease your expenses, provide greater uptime and flexibility and give you the ability to scale dynamically.


What can the cloud do for your business or your mobile presence?

The “cloud” is really not a new concept in the lower rungs of software development. For the most part, enterprise architecture has been pushing everything back to a server for many years, but in the consumer space, the cloud is indeed a bright and shiny new toy.

Several years ago, I embarked on the journey to get all of my data stored onto someone else’s server instead of having said data always on my laptop or on a backup drive. In the event of a catastrophe, I wanted to make sure everything was safe and sound just in case my laptop were to crash or get stolen. I enlisted the services of Mint, TurboTax, Google Docs, DropBox, etc., all are wonderful cloud-based services.

So what exactly does “cloud” mean? Simply, it is storing your data somewhere else via the internet. Let’s not get into Platform as a Service, Big Data, Cloud server distribution or all that other nomenclature other than to say that there are degrees by which you “buy into” the cloud. How does it benefit you as the consumer? It mostly means that your data is persisted somewhere you can always get back to it from any device whether it is mobile device, laptop computer or desktop PC. The major advantages are convenience and piece of mind that your data is safe. With this comes a trade off. Your data is no longer really your own. It is less secure by virtue of just being transmitted back and forth and available to millions of people who might be able to get at it in a worse case scenario.

From a mobile perspective, the cloud strategy makes perfect sense. In the purist sense a cloud strategy might involve a simple web-based user interface that supports all browsers on all platforms, but with the current “app craze”, it makes more sense to go beyond this and also provide native apps running directly on mobile devices to interact with these cloud services. The reasons to have a native mobile app go far beyond having and app just for the sake of having one. A native app gets you coverage in an app store whether it is the Apple or Chrome app store, so a side-effect is market presence. A native app gives a far richer user experience than any web-based app can offer. A native app means that you have the ability to function in an offline mode and still give the user a way to accomplish their tasks and sync up with the cloud later.

Creating a native app and interacting with the cloud is no different than interacting with the cloud via your web interface, or for that matter, a native desktop application that accesses your data via the same cloud services. Think about your user interfaces as you would a mask. You have a different mask every Halloween, but your face is still the same and really that is the important thing. After all, buying a new mask is far cheaper than paying a plastic surgeon for  a new face. In terms of cloud services, most businesses already have some infrastructure for supporting multiple interfaces back to the same services anyway, it is just a matter of exposing those as something that native apps can consume.

From the perspective of business, the cloud takes on a whole new meaning as opposed to how a consumer would see it. Corporations are switching to cloud-based services to offload their once internal applications to a software-as-a-service provider. Here are some good examples of how businesses have taken to the cloud, Github for source code control, Google Docs instead of Microsoft Office, Google Business Services instead of having a traditional “in-house” mail server like Microsoft Exchange and Sugar or Bullhorn for CRM Solutions. By utilizing these cloud services, companies that could not afford an IT presence, now have the tools much larger companies have enjoyed for years on a tighter budget. Also, if we go back to those degrees of cloudiness I mentioned, you see that even maintenance costs that were once incurred to you directly would be an inherent benefit if you chose a Platform as a Service (PAAS) in the cloud. PaaS allows you to forget worrying about scaling servers, managing backups, handling server security, blah, blah blah… the things that do not deal with your core application logic.

Now that more businesses have progressed into the cloud, not only have they reduced their costs, but they have also instantly enabled a mobile presence in their business. Businesses that use Google Docs, example or Google Business now have automatic access via several great mobile applications. Employees with these companies now can enjoy greater flexibility on where and when they can work using their mobile devices and the cloud enables that data to be available no matter what interface they sit down in front of or what internet connection they use. With more and more companies offering remote work, telecommuting and co-working opportunities to remain competitive, it has given validity to the cloud as a viable mechanism for enabling businesses to function.

Cloud-based service adoption has flourished among newer more agile companies and on the consumer front. The larger corporate machines are just starting to see the value and determining how they can make a go of it. While all this is going on cloud-based service companies and mobile tech leaders are reaping the rewards of such a fantastic approach to how we do business in this new age.