Published:
March 29 2011, 12:30 AM
|
1 Comment(s)
by
Nathaniel Rushfinn
Terms and definitions are very important to me, which is why I rely on my trustworthy friends Funk and Wagnalls. Nowhere in IT does there seem to be more confusion about terms than in cloud computing. CA Technologies, and many other organizations, have adopted the National Institute of Standards and Technology (NIST) definition of cloud computing (read this recent CSO Magazine story for the latest updates on the status - NIST just released a new document outlining cloud security and privacy guidelines, as well). While industry analysts and the many contributors to Wikipedia have done a great deal to define cloud, there are two terms that I find consistently mangled, abused and generally misunderstood-encapsulation and abstraction.
Each term is used with different meanings in math, philosophy and art. In computer science, the terms stem from object-oriented programming and are specifically defined. I believe we need to make clear definitions for their use in cloud computing.
So, what is encapsulation?
When we encapsulate something, we take that object and hide it from view. In medicine, when a foreign object is lodged in the body, like a pencil lead in your arm, it forms a cyst around the object and encapsulates it, to hide it from the immune system. In computing, we mean that we take the components of an object and wrap them up in a neat package to hide them from view - so that the user doesn't have to worry about the complexity of the individual pieces.
Computers today hide a lot of the tasks of configuring and setting up applications. In Windows 7, or on my iPad, I can easily get to the Internet by simply clicking the "Connect" button. All of the complexity of the Internet protocols TCP/IP is encapsulated.
What about abstraction?
An abstraction is a single, high-level, and simplified concept. For example, when we write a report we create an executive summary-an overview so that readers don't have to wade through all of the details. In scientific journals we actually call the executive summary of an article an abstract.
In the early 1980s, people labored painfully to connect their computers to DARPAnet. If your modem handshake was successful and your PPP (point-to-point protocol) connection was established, you configured your PAP/CHAP password correctly, and established a connection with Trumpet Winsock (Windows Sockets API), you still had to know how to use Telnet, FTP, and if you were really cool...Gopher. Mosaic had not yet been invented and the Internet and World Wide Web as we know it today didn't exist. It was just a complicated mess of interconnected networks.
Today things are much easier because of encapsulation and abstraction. All of the complex protocols needed to connect to the internet have been encapsulated into a simple process. You open your computer, click "Connect", and voila! Thanks to abstraction, the complex interconnected set of networks is now the simple concept, the Internet.
Why are these two concepts so important for cloud computing?
In the standard computing model, applications are dependent on a complex matrix. They require specific software platforms like Java or .NET, a type of database like Microsoft SQL, Oracle, or just a simple ODBC source. Applications may also require a certain operating system plus all the drivers necessary to run on the specific hardware platform, and some type of storage. And of course it will still need a TCP stack and all of the related networking drivers.
With cloud computing we have to use both encapsulation and abstraction; otherwise, everything gets messy fast. Let's talk about a CA Technologies solution, an example I'm intimately familiar with. With CA 3Tera AppLogic, we're able to hide a lot of the complexity from the user -- by encapsulating the software stack within what we call a virtual business service. In this way there is a single neat box or capsule containing everything the application needs to operate from a software and infrastructure perspective. But that's not enough.
Today, applications still need some kind of physical hardware to run on. The problem is that each application requires its own compatible hardware. Data centers have become filled with racks and racks of disparate hardware. Some believe that virtualization is the answer. While server virtualization can help to a degree (watch for my next blog on Big V, Little v), but what you really need to take this to the next level is abstraction.
Getting back to the CA 3Tera solution example: AppLogic abstracts the hardware, networks, infrastructure and storage into a single fabric. Users do not need to know about the specific resources or devices, just what application or ‘service' they wish to deploy.
It is the combination of encapsulation and abstraction that is so powerful. Together these two constructs create the foundation for cloud computing so that users can easily provision applications in the cloud.
Just in case all this still needs more explanation, I'll throw in one more analogy for good measure. And, since I grew up in California constantly torqueing head bolts on my Austin Mini-Cooper, I like to use car analogies to explain the world.
If CA Technologies sold cars, our mission would be to have our customers experience the power and beauty of our automobiles. We might advertise our reliability, excellent gas mileage, and luxury features. Without encapsulation, users would be overwhelmed by the complexity of myriad parts-the pistons, valves, transmission gears, wheels, and pulleys. Without abstraction, the concept of the car would be lost in the infinite details. Sales staff would overwhelm customers with extensive sales quotes for individual parts, services, and training on assembling the car and how to use it. But by encapsulating all of the complexity of the engine and drivetrain, and by abstracting all of the concepts of the car, we can just pull out of the showroom, hand the user the keys and say, "Let's motor, dude..."