Chapter opener image: © JBOY/Shutterstock
For years developers and network administrators have represented the Internet within design documents as a cloud. By abstracting the Internet’s technologies and underlying protocols as simply a cloud, as shown in FIGURE 1-1, the developers could temporarily ignore the communication complexity and simply assume that messages would flow successfully from one Internet-connected network to another.
Today the term cloud computing describes the abstraction of web-based computers, resources, and services that system developers can utilize to implement complex web-based systems. Often these cloud-based resources are viewed as virtual, meaning that if a system or solution needs more resources, such as processors or disk space, the resources can simply be added on demand and usually transparently to the application that uses them. Through their virtual nature, cloud-based solutions can be scaled up or down in size, and the companies whose solutions reside in the clouds normally pay only for the resources they consume. Thus, companies that once relied on expensive data centers to house their processing resources can now shift their costs and maintenance efforts to pay-as-you-go, scalable, cloud-based alternatives.