Posted on: April 7, 2021
Written by Douglas Comer, Author of The Cloud Computing Book.
If you have to ask, you haven't been paying attention. Everything is moving to cloud. Before cloud, when anyone wished to use Microsoft Office, they each purchased a license and downloaded the software onto their personal computer. In the cloud age, when someone requests Office, they are directed to the Office 365 Cloud Service, where they pay a monthly subscription fee to use Office in Microsoft's cloud. The same is true for other software systems, including most of the Internet of Things services. Cloud has also changed IT. A few years ago, large Fortune 100 companies began moving all their IT to cloud providers. The trend has spread quickly, and even start-ups are leasing cloud facilities.
The shift to cloud is especially important for Computer Science and Engineering students because they need to prepare to work in a cloud-based environment. They will either work for companies that build hardware and software facilities for cloud data centers or they will design and build devices and applications that use the cloud.
Can't Users Create Cloud Services Without Understanding Cloud?
Yes, many tasks are automated and cloud providers make their systems surprisingly easy to use. A user navigates to a web page, chooses a desired service, enters credit card information to pay a monthly fee, and presto, the service appears. The cloud provider handles all the details of allocating one or more computers to run the service, setting up storage for the computers, loading software, and configuring the data center network to make the new service available on the Internet. Even when a user wants to create custom software, providers then offer services that deploy and manage the software for the user, including running additional copies of the user's software when demand increases.
If Everything Is Automated, Why Is Education Needed?
The ease of use hides many details from cloud users, and can lead to unexpected consequences. Stories abound about companies who became customers of cloud providers, used the provider's automated systems to deploy services, and were then shocked at the expense the systems incurred. Similarly, there are stories about software engineers who transported pre-cloud software systems to a cloud environment and were disappointed because the software did not perform well and did not scale to handle additional load.
Understanding data center infrastructure, cloud technologies, and cloud-native software designs can help in two ways:
- It helps a cloud customer understand what is possible and how cloud can be used to help solve their problems.
- It can help customers plan services that perform well in a cloud environment and avoid deploying services that generate run-away costs.
What Should One Learn?
Everyone should learn the four main aspects of cloud: infrastructure and virtualization, automation and orchestration, Cloud Software Paradigms, and other topics that include Edge Computing (and its relationship to the Industrial Internet of Things), and how cloud affects security and privacy.
The Virtualization technologies used in a data center are especially important. Most cloud systems run on Virtual Machines or Containers. Virtual network technologies give a large cloud customer the illusion of having all the customer's VMs and Containers connected on a dedicated network, completely isolated from those of other customers. Similarly, virtual storage systems -- known by the acronyms SAN and NAS -- provide each customer with the illusion of having private disks and files. Understanding what the technologies provide is essential in understanding the services a cloud provider offers to customers and how they can be used.
Why Should Students Of Software Engineering Learn About Infrastructure?
Building efficient, reliable, scalable software requires one to know how the underlying infrastructure operates. For example, a software engineer who is designing a service with highest reliability must know that all racks in a pod receive power from a common source because the knowledge allows the engineer to place some copies of a service in other pods to avoid a single point of failure. Similarly, understanding the division of infrastructure into zones allows a software designer to build software that responds intelligently to zone outage alerts. Finally, understanding how modern data center networks scale to handle east-west traffic allows a software engineer to design systems that communicate over the network without worrying about capacity.
Why Should Someone Learn About Cloud Software If They Do Not Intend To Build Software?
It may seem that software design is only relevant to someone in Computer Science or Computer Engineering. However, cloud software and the new software paradigms used for cloud software systems form the heart of cloud computing. Approaches such as MapReduce have become widely adopted. Industry is using microservices, providers are offering serverless computing, and controller-based designs are especially relevant to large cloud customers who have their IT build automated systems to monitor and control the services they offer to employees and users.
If Everything Is On The Web, Why Do We Need A Textbook?
Unfortunately, commercial interests dominate the cloud landscape. The web is filled with definitions and explanations that have been created by commercial companies to feature their products and services. Books that appear to offer an objective viewpoint may be tainted by their dedication to one provider’s services. Even when explanations on the web contain essentially correct information, they tend to focus on commercial products and details without explaining the underlying assumptions, concepts, and trade-offs. Without a clear, consistent source of information, beginners can become frustrated and confused quickly.
Does That Mean Cloud Teaching Is All Theory With No Practical Value?
Absolutely not. My textbook, The Cloud Computing Book, covers major cloud technologies, such as Docker Containers, Kubernetes, NAS, SAN, and Object Storage. The explanations of the technologies give the reader a conceptual understanding that allows them to master details without becoming lost. For example, once a programmer understands the purpose of a Dockerfile, the steps taken to create an image, and the meaning of commands used, all the details make sense. However, starting with details can leave one completely confused between operations that occur when building an image vs. operations that occur when the image runs as a container.
In my classes, I ask each student to obtain an account on AWS, Azure, and GCP. Then, The students use services from each of the providers. In addition, students study Docker technology and learn how to build containers. They use Kubernetes, and learn how to orchestrate the deployment of a containerized service. And study S3 and learn how to write software that uses an object store. In each case, they gain first-hand experience with practical technologies and services. The difference is that the practical experience comes after they learn the concepts.
Any Final Advice For Professors Who Are Considering Teaching Cloud?
Jump in! The subject is new, which means that you will demonstrate leadership by teaching it. The subject is important and demand for graduates who understand cloud is high. The topics are fascinating, which means you will enjoy teaching. Students are excited, and eager to learn. Join in and enjoy the ride.