Zend certified PHP/Magento developer

CloudSpring: What’s a Cloud?

Most of us have seen architecture diagrams like the one

The Internet was once represented by a cloud

The cloud was used to indicate the Internet. Over time the meaning of “the Internet” has shifted, where it now includes the resources usually perceived as being on the Internet as well as the means to access them.

The term cloud computing came into popular use just a few years ago. Some were quick to claim that, rather than a new concept, the term was simply another name for an existing practice. On the other hand, the term has become sufficiently powerful for some existing web applications have to magically turned into examples of cloud computing in action! Such is the power of marketing.

While the specifics may vary from vendor to vendor, you can think of the cloud as a coherent, large-scale, publicly accessible collection of compute, storage, and net- working resources. These are allocated via web service calls (a programmable inter- face accessed via HTTP requests), and are available for short- or long-term use in exchange for payment based on actual resources consumed.

The cloud is intrinsically a multi-user environment, operating on behalf of a large number of users simultaneously. As such, it’s responsible for managing and verifying user identity, tracking allocation of resources to users, providing exclusive access to the resources owned by each user, and preventing one user from interfering with other users. The software that runs each vendor’s cloud is akin to an operating system in this regard.

Cloud computing builds on a number of important foundation-level technologies, including TCP-IP networking, robust internet connectivity, SOAP- and REST-style web services, commodity hardware, virtualization, and online payment systems. The details of many of these technologies are hidden from view; the cloud provides developers with an idealized, abstracted view of the available resources.

The Programmable Data Center

Let’s think about the traditional model for allocation of IT resources. In the para- graphs that follow, the resources could be servers, storage, IP addresses, bandwidth, or even firewall entries.

If you’re part of a big company and need additional IT resources, you probably find you’re required to navigate through a process that includes a substantial amount of person-to-person communication and negotiation. Perhaps you send emails, create an online order or ticket, or simply pick up the phone and discuss your resource requirements. At the other end of the system there’s some manual work involved to approve the request; locate, allocate, and configure the hardware; deal with cables, routers, and firewalls; and so forth. It is not unheard of for this process to take 12–18 months in some organizations!

If you are an entrepreneur, you call your ISP (Internet Service Provider), have a discussion, negotiate and then commit to an increased monthly fee, and gain access to your hardware in a time frame measured in hours or sometimes days.

Once you’ve gone through this process, you’ve probably made a long-term commit- ment to operate and pay for the resources. Big companies will charge your internal cost center each month, and will want to keep the hardware around until the end of its useful life. ISPs will be more flexible, but it is the rare ISP that is prepared to make large-scale changes on your behalf every hour or two.

The cloud takes the human response out of the loop. You (or more likely a manage- ment application running on your behalf) make web service requests (“calls”) to the cloud. The cloud then goes through the following steps to service your request:

  • Accepts the request
  • Confirms that you have permission to make the request
  • Validates the request against account limits
  • Locates suitable free resources
  • Attaches the resources to your account
  • Initializes the resources
  • Returns identifiers for the resources to satisfy the request

Since developers are accustomed to thinking in object oriented terms, we could even think of a particular vendor’s cloud as an object. Indeed, an idealized definition for a cloud might look like this in PHP:


class Cloud {
public function getDataCenters() {
⋮
}
public function allocateServer($dataCenter, $count) {
⋮
}
public function releaseServer($server) {
⋮
}
public function allocateDiskStorage($dataCenter, $gb) {
⋮
}
public function releaseDiskStorage($storage) {
⋮
}
⋮
}

Here’s how this idealized cloud would be used. First, we retrieve a list of available data centers ($d), and store a reference to the first one in the list ($d1): $server = $c-allocateServer($d1, 1);
$storage = $c-allocateDiskStorage($d1, 100);

The important point is that you can now write a program to initiate, control, mon- itor, and choreograph large-scale resource usage in the cloud. Scaling and partitioning decisions (such as how to add more server capacity or allocate existing capacity) that were once made manually and infrequently by system administrators with great deliberation can now be automated and done with regularity.