Cloud computing has laid a sound foundation for artificial intelligence (AI), and big data has fertilized the AI technology. To better support AI and big data, cloud computing needs to evolve to keep up with the rapid pace of technological advancements. This chapter describes the fields and key enabling technologies related to cloud computing and also introduces the technologies emerging from cloud computing.
Fields Related to Cloud Computing
IoT
As an important technology of today and the future, the Internet of Things (IoT) creates a network of things (or objects) that are connected over the Internet. This implies that: First, the Internet serves as the core and basis of IoT, while IoT is an extension of the Internet into physical devices and everyday objects. Second, IoT enables information exchanges and communication between objects, such as radio frequency identification (RFID), infrared sensors, global positioning systems, and laser scanners, based on agreed protocols. People can recognize, locate, track, monitor, and manage objects in IoT more intelligently.
Key technologies used by IoT:
- RFID: electronic tag, a type of smart card. RFID is used to enable IoT. The term IoT was coined by Kevin Ashton, Executive Director of MIT's Auto-ID Center, in 1999.
- Sensor technology: Various types of sensors are used to detect and collect environmental signals, including temperature, humidity, pressure, and speed.
- Embedded system: An embedded system is a dedicated computer system in which hardware and software are tightly integrated to offer specific functions. Each embedded system is just a part of a larger system.
Cloud Computing, Artificial Intelligence (AI), and Big Data
AI has always been hailed as a technology that can change the world or even end human beings. AI, in combination with cloud computing and big data, are driving a digital transformation of the ICT industry for higher intelligence.
Big data was originally an application of cloud computing and could not work without cloud computing. Big data was placed in the Technology Trigger phase of Gartner's 2011 hype curve for emerging technologies. In 2013, when cloud computing was in the Trough of Disillusionment phase, big data just entered the Peak of Inflated Expectations phase. In 2014, big data entered the Trough of Disillusionment phase and began to grow at the same speed as cloud computing. Today, while cloud computing is still indispensable and fundamental to big data, big data is also enabling the success of cloud computing because it is an important type of workload on clouds.
The data volume was small at early stages of IT. People used to read books and newspapers. There were not even many books in a school's library. Now everyone reads e-books and news online. The amount of information increases with the advent of digitization.
Data in the realm of big data is categorized into the following:
- Structured data
Data in a fixed format and with a limited length. For example, information in a table is structured data, such as values of nationality, ethnicity, and gender. - Unstructured data
Data with variable length and no fixed format, such as a voice message, a video, and a web page. For example, web pages are sometimes very long, and sometimes very short. Nowadays, the amount of unstructured data is increasing. - Semi-structured data
Data with certain structure in formats like XML or HTML
In fact, some data is not useful until it is processed. Data is in the wristband if you wear one every day, and in web pages accessible over the Internet. Data itself is not useful, but it contains a very important thing called information.
Data is in disorder and can be called information only after being sorted and cleansed. Information contains many rules, and rules summarized from information are called knowledge. Knowledge changes how we live our lives, often for the better. While some people see information but don't know how to react, others see the future of e-commerce and live broadcasting. This is why the second type of people succeed. If you cannot extract knowledge from information, you are only a bystander in the Internet tide even though you browse through the social media every day.
We can apply knowledge to practice. Some people can do it very well, and that is intelligence. Knowledge does not necessarily mean intelligence. Many scholars are very knowledgeable and can analyze things from various perspectives. However, they cannot apply their knowledge to practice or transform it into intelligence. Many great entrepreneurs can do that and they finally succeed in business.
Therefore, there are four steps of data utilization: data, information, knowledge, and intelligence.
| Four steps of data utilization |
Many businesses want intelligence. They collect a huge amount of data and want to make business decisions and improve their products based on analysis of the data. For example, when a user watches a video, they can display an advertisement next to the video, which advertises exactly what the user wants to buy. For another example, when a user listens to a song, they can provide recommendations of similar music for the user.
Some companies extract information from the data users have entered on app interfaces or websites to predict user behavior and increase user stickiness. For example, an online shopping platform can make smart recommendations to a consumer based on his or her past behavior.
Many people think this is amazing, and wonder how it works.
The process includes data collection, transmission, storage, processing and analysis, retrieval and mining.
When the data volume is small, a few servers can do the job. As the data volume is increasing, more servers are needed.
- Data collection
IoT needs thousands of sensing devices deployed to collect a large amount of temperature, humidity, monitoring, and power data. Search engines use multiple servers to form a web crawler system. The servers in this system work together to download all web pages in a limited timeframe. - Data transmission
Queues in memory are easily filled with a large amount of data. Therefore, distributed queues based on hard disks are created. In this way, data can be transmitted in queues of multiple servers at the same time. Massive data sets can be transmitted, as long as the queues and bandwidth are sufficient. - Data storage
The file system of a single computer is rarely enough. Instead, a large distributed architecture is required to integrate hard disks of multiple computers into a large file system. - Data analysis
One server cannot analyze, calculate, and summarize large data sets even over a very long period of time. Therefore, a distributed computing mechanism is invented to divide a large data set into smaller pieces. Each server processes a small piece of the data, and multiple servers process the data in parallel. In this way, the processing can be completed quickly. For example, TeraSort can sort 1 TB data, which is equivalent to 1000 GB, in 209 seconds using a distributed architecture where the data is concurrently processed by multiple servers. If the data is processed by one server, it will take several hours.
Now, let's talk about cloud computing.
A company may use big data to analyze its financial status once a week. It is wasteful to use many servers only once a week. Is it possible that we can allocate many servers for this weekly assignment and release them for other uses once this assignment is done? The answer is yes.
Cloud computing is the only way to do this. Cloud computing provides flexible, rapid elasticity needed for big data computations. Alternatively, big data services can also be deployed on a PaaS platform for on-demand access. In fact, big data services are important and widely used PaaS layer applications.
Big data is very complex and needs to be developed by professionals. Currently, big data solutions are available on public clouds. When a small company needs a big data platform, the company does not need to purchase a lot of servers. Instead, they only need to access a public cloud provisioning the required big data services and have their data computed on that public cloud.
People can search for many things using Internet search engines powered by big data, but there are also many things that cannot be searched. Sometimes, people do not know how to search for the things they need, or things they find are not what they want.
For example, a music app can recommend a song that the user has never heard of and does not know its name but the user does like it. This is what search engines cannot do. When using such an app, people find that the app knows what they want before they do. They find that the app knows them like a friend. This recommendation function is only one of the many preliminary applications of AI.
People have been trying to develop AI for a long time. At first, people imagined a robot behind a wall and the robot would respond if people spoke to it. If people could not tell whether it is a human or machine from the responses, it is AI.
People come up with a way to program computers with the ability of human reasoning. Reasoning is the most important ability to human and also the difference between human beings and animals. If robots are enabled to reason and answer questions, it will be a great achievement.
In fact, machines have gradually acquired the ability to do some reasoning, such as proving mathematical formulas. It is a surprise that machines can prove mathematical formulas. But it turns out that the result is not so unexpected. People find that mathematical formulas are precise, and so is the reasoning process. It is easy for a machine to express mathematical formulas and programs.
But human language is not that easy. It is arbitrary and implied, making it difficult for machines to understand these meanings, but easy for human.
Therefore, for machines, reasoning without necessary knowledge is not enough. But it is a formidable challenge for ordinary people to impart such knowledge to machines. Probably, experts in linguistics or economics are able to do so.
Can linguistics and economics be more accurate, like mathematical formulas? If so, linguists can summarize the grammatical rules of the subject, predicate, object, attributive, adverbial modifier, and complement, and then computers can attempt to express according to these rules.
Later, people find it not feasible because it is too difficult to summarize linguistic rules as the meaning varies easily. For example, in spoken language, the predicate is sometimes omitted. In the meantime, you cannot ask users to speak standard written language to machines just for speech and semantic recognition purposes. This is not smart. As Luo Yonghao (a Chinese entrepreneur and Internet celebrity) once said in a speech, it is embarrassing to speak to his phone in a written-language style, like "Please call XX for me."
AI in this phase is called expert system. The expert system is not easy to achieve. On one hand, it is difficult to summarize knowledge. On the other hand, it is difficult to teach the summarized knowledge to computers. The reason is simple: How can computers be programed to abide by rules that are confusing even to people?
So people think that since machines are entirely different from humans, machines can be enabled to learn by themselves.
What enables machines to learn? Machines have a strong statistical ability. With this ability, they are able to find patterns from a large amount of data. Of course, a real statistics-based learning algorithm is much more complex than simple statistics.
Statistical learning understands simple correlations. For example, if two words always appear together, then they are relevant. However, it cannot express complex ones. Usually, formulas of the statistical method are complex. To simplify calculation, various independent assumptions are often made to reduce the difficulty of formula calculation. However, in real life, independent events are relatively fewer.
So from the machine world, humans began to reflect on how the human world works.
A human brain does not store a large number of rules or statistic data, but is controlled by neurons. Each neuron has an input from another neuron. When receiving the input, the neuron generates an output to stimulate other neurons. So a large number of neurons react to each other, and finally various outputs are formed.
AI is able to do many things, such as identifying spam emails as well as pornographic, violent texts and pictures. This has experienced three stages.
- The first stage depends on the keyword blacklist, whitelist, and filtering technologies. Keywords can be set to pornographic or violent words. As the network language increases and words vary continuously, it is difficult to update the keyword library promptly.
- The second stage is based on some new algorithms like Bayesian filtering. It is a probability-based algorithm.
- The third stage is based on big data and AI for more accurate user profiles, content understanding, and image understanding.
Most AI algorithms depend on massive data sets for training and verification. Such data needs to be accumulated in a specific field (such as e-commerce and email) over a long period of time. Without data, AI algorithms are useless. Therefore, AI programs are totally different from IaaS and PaaS services provided by cloud computing in the sense that AI programs cannot be used on the customer's premises where the necessary data is missing.
Cloud computing vendors have accumulated huge amounts of data. Ordinary users can have access to AI capabilities provided on cloud platforms through exposed APIs. In cloud computing, this type of services is called software as a service (SaaS).
Finally, here are the three cloud computing service models: IaaS, PaaS, and SaaS. Generally, cloud, big data, and AI technologies can all be found working together in a cloud computing system. A big data company that has accumulated massive data amounts use AI algorithms to provide services, while an AI company mostly definitely runs a big data platform.
Cloud Computing, IoT, and Big Data
| Relationship between cloud computing, IoT, and big data |
As previously mentioned, cloud computing is the foundation of AI, big data fertilizes AI technology, while IoT provides the raw materials used to produce the fertilizer.
IoT is an important source of big data. IoT is the perception and motion detection system of the Internet. Big data is the information layer of the Internet and is the basis of Internet intelligence and consciousness. The rapid elasticity characteristic of cloud computing is required for data mining. Therefore, cloud computing and IoT promote the development of big data; in return, big data also accelerates the progress of cloud computing and IoT.
5G and Cloud Computing
Cloud computing is a product of the development of computing and the Internet, and the mobile Internet is ushering in the 5G era. "5G will empower information and communications technologies, and trigger many technological and commercial changes," said Ken Hu, Rotating Chairman of Huawei, at the Global MBB Forum 2018 in London.
5G will turn connectivity into a platform. With 5G, everything will go online and stay online by default. It is estimated that by 2025 there will be 40 billion intelligent devices on 5G networks. Ken Hu believes that in the future, it will be difficult to have no access to the Internet.
Ken Hu points out five fundamental changes that 5G will bring: connectivity as a platform, always-online, all-cloud, redefinition of terminal devices, and seamless experience. He also believes the world is embracing cloud technologies. This will allow everyone to access available information anytime and anywhere. New business models like Cloud X will emerge. In such models, all devices are cloud-based. Soon, there will be more Cloud X applications, such as Cloud PC Workstation, cloud gaming, and cloud VR/AR. Companies like Microsoft, Ubisoft, and EA are already working on these.
Cloud-Enabling Technologies
Container
A container is a lightweight OS-layer virtualization technology. It allows user space in an OS to be divided into several independent units running in the kernel, each of which is independent from each other. Such independent space is called a container.
Containers ensure that applications run in the same way everywhere. Therefore, developers can test containers on their own computers and run them without any modification on virtual machines (VMs) or other physical machines.
Containers are also a virtualization technology. Many industry discussions inevitably compare containers with VMs.
A container consists of:
- Application
- Runtime environment, including libraries
A container is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries, and settings. Available for both Linux and Windows-based applications, containerized software will always run the same, regardless of the infrastructure. Containers isolate software from its runtime environment and ensure that it works uniformly despite differences for instance between development and staging, minimizing conflict between applications on the same infrastructure. The primary difference between containers and VMs is that each VM includes the operating system (OS) but a container does not.
What benefits does the container technology provide?
Software architecture is so complex that environment configuration becomes an obstacle in developing software. Software can properly run in an environment only when the environment configuration, including OS settings, various libraries, and components, is correct. For example, to run Java-based software, the computer must have a matching engine, dependencies, and environment variables. To reduce environment dependency, someone advises to copy the original environment settings to the target computer where the software is to be installed.
And someone suggests that a VM template can also address this issue.
As we have mentioned, each VM includes an OS. Compared with containers, VMs have the following limitations:
- High resource overheads
The VM itself exclusively occupies part of the memory and disk space. When it runs, these resources cannot be used by applications. Even if the applications only need 1 MB of memory, the VM still uses hundreds of MBs of memory to run. - Redundant operations
Each VM has an independent OS and some of the OS operations are inevitable, such as user login. - Slow startup
It takes the same time to start an OS and VM, which may be a few minutes. The application can start to run only after the OS starts.
The limitations of VMs are fully addressed by containers. The benefits are as follows:
- Quick startup
Containerized applications are a process of the underlying system, not a process of the VM. Starting a container takes approximately the same time as starting a process, which is much faster than starting a VM. - Small size
The container file size is much smaller than the VM file size since a container contains only the required components while a VM includes an entire OS. - Small resource overheads
A container occupies only necessary resources. A VM has a complete OS and therefore occupies all resources needed to run an OS. In addition, containers can share resources, but each VM requires exclusive access to resources.
What is the relationship between Docker and containers?
Docker is an encapsulation of Linux container. It is currently the most popular Linux container solution and provides standard, easy-to-use APIs. Docker packages applications and their dependencies in a single file. When users run this file, a virtual container is generated. Applications run in the virtual container, just as they would on a real physical machine. Docker helps developers avoid the inconsistency of development environments. Generally, Docker APIs are simple. Users can easily create and use containers and put their applications in the containers. Containers can be copied, shared, and modified, just like code, and their versions can be managed.
Docker is mainly used for three purposes:
- To provide a one-time environment, for example, the environment for local software testing and continuous integration.
- To provide elastic cloud services. Docker containers can be enabled and disabled as required, suitable for dynamic scaling.
- To build the microservice architecture. With multiple containers, a single machine can run multiple services, forming a microservice architecture.
The core components of Docker include:
- Docker client
- Docker daemon
- Docker image
- Registry
- Docker container
| Docker architecture |
Docker uses a client-server architecture. The client sends requests to the server. The server builds, runs, and distributes containers. The client can run on the same host as the server or connects to a remote server over sockets or using REST APIs.
- Docker client
Users primarily use command lines to interact with the Docker server. The client sends commands to the server to build and run containers on the host. - Docker daemon
The Docker server component is the Docker daemon, which runs on the Linux operating system and is responsible for creating, running, and monitoring containers, as well as building and storing images. - Docker image
It is a key component of Docker and is used to create Docker containers. Docker images are read-only templates and similar to VM templates. To modify an image, users need to convert it to a container first. After the modification, convert it back to an image again. - Docker container
A Docker container is a runnable instance of an image. - Registry
A Docker registry stores Docker images. There are two types of registries: public and private.
OpenStack
What Is OpenStack?
OpenStack is the most popular open-source cloud operating system at present. OpenStack was first launched in June 2010 and has since become a mature platform. OpenStack provides a variety of powerful functions and has been widely used to build private clouds, public clouds, and NFV architectures. In addition, OpenStack has the support of almost all mainstream vendors in the IT industry, and spawned many startups providing related products and apps. In fact, OpenStack has become the mainstream standard in the open-source cloud computing industry. Today, a prosperous and sustainable OpenStack ecosystem has formed. OpenStack has become an inevitable topic in the cloud computing era. More to the point, OpenStack is principal for understanding the development and trends of cloud technologies. This chapter describes a few key points concerning OpenStack.
OpenStack is officially defined as a cloud operating system on https://www.openstack.org/. The following uses a PC OS as an example to explain cloud OS.
An OS is crucial for a computer system. Without an OS, the hardware and software of a computer cannot be integrated into a system to handle tasks and serve users. OSs commonly used include Linux and Windows running on servers and PCs, as well as Android and iOS on mobile phones. An OS provides the following functions: resource access and abstraction, resource allocation and scheduling, application lifecycle management, system management and maintenance, and man-machine interaction. Each of the functions is indispensable.
To be more specific: (1) Resource access and abstraction: connects hardware devices, such as CPUs, memories, local hard disks, and network adapters, and abstracts them as logical resources that can be managed by the OS. (2) Resource allocation and scheduling: allocates the hardware resources to software or applications by using OS resource management capabilities based on the types and quantities of resources needed. (3) Application lifecycle management: helps users install, upgrade, start, stop, and uninstall applications on the OS. (4) System management and maintenance: helps system administrators configure, monitor, and upgrade the system. (5) Man-machine interaction: provides man-machine interfaces for system administrators and users to perform necessary operations.
A cloud OS has similar functions. The primary difference is that a cloud OS manages a distributed cloud computing system composed of a large quantity of software and hardware, whereas a common OS manages a local server, PC, or mobile phone.
For a cloud OS, its main functions are as follows: (1) Resource access and abstraction: connects virtualized or software-defined hardware resources, such as servers, storage devices, and network devices to a cloud computing system, and abstracts them into compute, storage, and network resource pools that are recognizable to the cloud OS. The cloud OS manages the resource pools to control the underlying hardware. (2) Resource allocation and scheduling: allocates compute, storage, and network resources to tenants and applications by using cloud OS resource management capabilities. (3) Application lifecycle management: helps tenants install, start, stop, and uninstall cloud applications in the cloud OS. (4) System management and maintenance: helps system administrators manage and maintain a cloud computing system. (5) Man-machine interaction: provides man-machine interfaces for system administrators and common tenants to perform necessary operations.
The cloud OS is far more complex than the conventional OS used in daily life, but they provide similar functions. OpenStack provides the framework for building a cloud OS.
To build a complete cloud OS, a large number of software components need to be integrated and work together to provide functionalities and services required by system administrators and tenants. However, OpenStack cannot independently provide all the capabilities required by a cloud OS. Specifically, OpenStack cannot independently carry out resource access and abstraction but must work with underlying virtualization software, software-defined storage, and software-defined networking (SDN). It cannot independently manage application lifecycles but needs to integrate management software platforms at the upper layer. It does not have comprehensive system management and maintenance capabilities and must integrate various management software and maintenance tools. OpenStack provides its own man-machine interfaces, but they are inadequate for commercial systems.
In short, to build a full-fledged cloud OS, OpenStack must be integrated with other software components. Therefore, OpenStack is positioned as the framework for cloud OS. Different components can be integrated on this framework to meet customer needs for cloud OSs.
Open source lies in the core of OpenStack. It is also the key to understanding the past and future of the OpenStack community. Different from the source code extensively released on the Internet, the OpenStack community follows a more profound open source concept. In the OpenStack community, the entire process of code development, from requirement submission, scenario analysis, solution design, code submission, test execution, to code integration for each component and feature, as well as each line of code, complies with the community's openness principle and is visible to the public, allowing maximum transparency and participation from contributors. This has kept the community open and prevented the community from being controlled by a small group of people, companies, or organizations, ensuring the sustainable growth of the community ecosystem. In addition, all of the code for OpenStack is under Apache 2.0 license. This guarantees commercial benefits for enterprises participating in the community and promotes commercial success of OpenStack products. OpenStack is the framework software that is developed and released as open source and designated to build cloud OSs in different scenarios. An in-depth understanding of this concept is very important for further studying OpenStack.
Relationship Between OpenStack and Cloud Computing System
OpenStack is closely related to but still different from a cloud computing system. OpenStack is a framework for building cloud OSs. To set up a cloud computing system, a cloud OS must be integrated with hardware devices and run various types of upper-layer applications and services on top.
Relationship Between OpenStack and Compute Virtualization
Compute virtualization is a concept that many readers are familiar with. The corresponding software is the Hypervisor, such as the open-source KVM and Xen, VMware vSphere, Huawei FusionCompute, and Microsoft Hyper-V. The relationship between OpenStack and compute virtualization is still confusing to many people. The following explains their relationship to help readers better understand OpenStack. OpenStack is a framework for building cloud OSs. To build a complete cloud OS, especially to implement resource access and abstraction, OpenStack must integrate with virtualization software to achieve compute resource pooling of servers. The virtualization software carries out the task of virtualizing physical resources and putting them into respective pools. If KVM is used as the virtualization software of OpenStack, KVM virtualizes a physical server into multiple VMs while OpenStack maintains the resource pools, for example, recording the quantity of servers in the system, the amount of resources on each server, amount of allocated resources, and amount of idle resources. OpenStack delivers control commands to KVM and performs VM lifecycle management operations, such as creating, deleting, starting, and stopping VMs. This shows that OpenStack is like the brain of a cloud OS and compute virtualization software is more like the body that carries out specific operations. To properly manage compute resources in a cloud computing system, OpenStack must work with compute virtualization software. However, the two are not the same.
OpenStack Design
OpenStack has been developing rapidly, attributed to the blooming of cloud computing technologies, as well as its unique design. OpenStack has an open, flexible, and scalable design.
1. Open
OpenStack is open to the public, including its source code and process of design, development, testing, and release. This avoids OpenStack from being controlled by individuals/enterprises or evolving towards a closed architecture/system. OpenStack provides open northbound APIs allowing access of southbound hardware and software. To make design and development more efficient and improve software quality, OpenStack adheres to the principle of "Not Reinventing the Wheel" and continuously
introduces and reuses excellent open-source software from various technical fields.
2. Flexible
Many of the OpenStack components are pluggable and configurable. OpenStack uses
plugins to manage and connect diverse compute, storage, and network resources and uses a single architecture to pool heterogeneous resources from different vendors. For compute resources, OpenStack can integrate hypervisors, such as KVM, Xen, vCenter, and FusionCompute as plugins. For storage resources, it can manage storage devices of different vendors and software-defined storage like Ceph, FusionStorage, and vSAN through plugins. For networking resources, it allows access of hardware network devices, open-source network components like OVS, Linux bridge, and HAProxy, as well as
SDN controllers. The accesses are all configurable. To connect to new resources, developers modify configuration items to choose appropriate plugins for OpenStack, without the need to repackage it.
In addition, OpenStack does not depend on any commercial software or hardware. In other words, any commercial software and hardware products are replaceable in the OpenStack architecture. Users can use open-source solutions to build OpenStack-based cloud computing systems without worrying about vendor lock-in.
3. Scalable
OpenStack is highly scalable in terms of functionalities and capacities. From the perspective of functionalities, OpenStack consists of multiple decoupled projects. Each project implements unique functions in a cloud computing system, such as the identity authentication and authorization service, compute service, block storage service, network service, image service, and object storage service. For a cloud computing system used in a specific scenario, system designers can deploy OpenStack projects as needed, or introduce new projects after the system is released. Certain OpenStack projects also provide scalable functions. System designers can introduce new function modules to these projects and extend their functions without affecting the existing functions. From the perspective of scalable capacities, OpenStack adheres to the principle of designing a centerless and stateless architecture. Most OpenStack projects can be horizontally scaled to build cloud computing systems of different sizes. After deployment, a cloud computing system can be scaled on demand by adding both management and resource nodes. Using this architecture can effectively cut upfront investment, reduce the complexity of capacity planning, while providing sufficient room for future scalability.
OpenStack Architecture and Projects
When the OpenStack community launched the first release Austin in 2010, OpenStack included only two projects Nova and Swift, only providing simple and basic functions. Now, OpenStack is mature enough to support an increasing number of projects. OpenStack Mitaka released up to 29 service projects. Each service project has distinct functions and they work together to build a cloud OS with a flexible, multifunctional, and highly scalable architecture.
To provide a brief overview of OpenStack, this section describes its most important and typical service projects.
1. Keystone: identity, authentication, and access management service
A cloud OS has fundamental capabilities of sharing compute, storage, and network resources as well as IaaS, PaaS, and SaaS built on the resources among users and enabling users to securely access and use the same cloud computing system. To realize the capabilities, Keystone was released, functioning as an identity, authentication, and access management service project. It authenticates user identities and issues tokens to authorized users. Users use the tokens to access other OpenStack projects. Together with token authentication and permission control mechanisms embedded in each component, Keystone authenticates user identities and controls their permissions. Each authorized user is given the ability to perform operations allowed by their permissions for designated resources, isolating and protecting user resources.
2. Nova: compute service
Nova is the OpenStack project that provides a way to provision compute instances, allowing users to create VMs as needed. Nova manages a large number of physical servers deployed with compute virtualization software (hypervisors) and integrates underlying resources into a logical resource pool with a resource view. Based on this, Nova manages the lifecycle of resources in the resource pool to fulfill different user requests. The primary management operations include creating, deleting, starting, and stopping VMs. When receiving a VM creation request, Nova integrates the CPU, memory, local storage, and I/O devices in the logical resource pool to create VMs of different flavors, installs OSs on the VMs, and finally provides a VM satisfying the user requirements for compute resources.
In addition to VM resource management, Nova works with Ironic to provide bare-metal resource management services for users. Specifically, when Nova receives user requests for bare-metal resources, it can invoke Ironic functions to implement automated bare-metal selection, allocation, and OS installation, offering the same experience in using virtual machine resources and physical machine resources.
3. Ironic: bare metal
Ironic works with Nova to provide the bare metal service for users.
In practical use, Ironic manages physical servers. When a physical server is added to a resource pool, Ironic records the hardware specifications of the physical server and reports the specifications to Nova. When a user initiates a bare metal management operation, Ironic executes operations for the physical server according to the command from Nova. For example, when an action for creating a bare metal server is triggered, Ironic performs operations, such as initializing hardware configuration and installing the OS, for the selected physical server according to the Nova command.
4. Glance: image
Generally, each VM needs to be installed with an OS after being created. To suit diverse user demands, a cloud computing system is preconfigured with multiple OS images running different versions and the images are often installed with common software. To manage various images, the OpenStack image service, Glance, is introduced.
Glance manages metadata of created images and is capable of creating, deleting, querying, uploading, and downloading images. In a production environment, Glance does not store image files, but is only responsible for storing metadata of image files. In essence, Glance is a management frontend. To provide image management and storage service capabilities, Glance needs to be connected to object storage backends.
5. Swift: object storage
Object storage is a common data storage service in cloud computing. It is deployed in scenarios where a single file with a large amount of data needs to be stored, where data is less frequently accessed, where requirements for data access latency are low, and where data needs to be stored with lower costs. Swift is an OpenStack project that provides the object storage service.
Unlike most OpenStack projects that implement only control functions and do not directly carry user services, Swift provides a complete object storage system and can be independently deployed. In addition, Swift can be used as the backend storage of Glance to store image files.
6. Cinder: block storage
In OpenStack projects using KVM, VMs created by using Nova use the local file system of each compute node as its data storage by default. The lifecycle of the data store is the same as that of the VM. In other words, the data store is removed once the VM is removed. If users require persistent block storage media that are independent of VM lifecycle, Cinder can be used to provide the block storage service (also called volume service).
Cinder defines storage capabilities provided by backend storage devices or software-defined storage clusters as block storage resource pools. Then, based on user requirements, it divides resource pools into volumes with different sizes and allocates them to users.
When using volumes provided by Cinder, users need to attach the volumes to VMs by means of Nova. In the VM OSs, they can view and access the block devices corresponding to the volumes.
7. Neutron: networking
Networking is crucial to IaaS capabilities of all cloud OSs. Cloud computing systems must be built on stable, easy-to-use, and high-performance virtual networks to provision resources and services for users.
Neutron is an OpenStack project that provides the network service. Neutron and its sub-projects provide users with network service capabilities from Layer 2 to Layer 7, including Layer 2 networking, Layer 3 networking, internal DHCP management, Internet floating IP address management, internal and external firewalls, load balancing, and VPN. Layer 2 and Layer 3 service capabilities of Neutron are mature enough to replace NovaNetwork and become the mainstream Layer 2 and Layer 3 virtual network service in OpenStack. Its service capabilities from Layer 4 to Layer 7 are being developing
rapidly and now can be preliminarily put into commercial use.
It should be noted that DNS as a service is not included in Neutron, but is provided by an independent project Designate.
8. Heat: orchestration
One of the core values of cloud computing is automated provisioning and management of IT resources and services. After cloud computing was introduced, a large number of complex manual tasks in traditional IT can be automatically completed by calling APIs provided by cloud OSs to improve the IT system management efficiency.
Among these tasks, lifecycle management, including installation, configuration, capacity expansion, and removal of application systems, is typically complex and time-consuming, which cannot support rapid service provisioning or elastic scaling. OpenStack Heat has come into being to provide automated lifecycle management capabilities for application systems. Specifically, Heat parses a submitted template that define resource types, quantities, and connections required by an application system, and calls Nova, Cinder, and Neutron APIs to enable automated deployment of the application system. This
process is highly automated and programmed. The same template can be reused in any OpenStack-based cloud computing systems, remarkably improving the deployment efficiency of application systems. Heat can also work with the Aodh subproject of OpenStack Ceilometer to enable autoscaling for application systems, facilitating the management of stateless and horizontally scalable application systems.
9. Ceilometer: metering and monitoring
In cloud computing systems, resources are provisioned as services to users, and users need to pay fees based on the resource types and quantities they need. For this purpose, a cloud OS must be able to monitor and measure resource usage. This is why OpenStack has introduced Ceilometer.
Ceilometer mainly collects information about the types and quantity of resources used by users in polling mode. The collected information is used as the basis for charging.
Based on the collected information, Ceilometer sends alarm signals through the Aodh sub-project to trigger Heat to execute autoscaling.
Ceilometer does not provide the billing capability. To support this function, system designers need to connect Ceilometer to a proper billing module. The OpenStack community has created the project CloudKitty as a native billing component. However, the project is still in the early stage and cannot be put into commercial use.
10. Horizon: dashboard
Horizon provides a web-based graphical user interface to OpenStack services. Horizon provides administrators and users with a simple and user-friendly interface and serves as the basic portal for managing OpenStack-based cloud computing systems.
In addition, Horizon has a pluggable architecture, making it easy for designers to incrementally develop the system based on user requirements.
Other Emerging Technologies
Fog Computing
Fog computing is an extension of the concept of cloud computing and was proposed by Cisco. In fog computing, data and application sets are stored in edge devices, not clouds. The term "fog" was chosen because fog is a cloud closer to the ground.
Fog computing was coined by Stolfo, Professor of Columbia University in New York, for the purpose to protect against hacking attacks. Later Cisco officially proposed and redefined the concept of fog computing. Fog computing uses a decentralized, IoT-oriented infrastructure extending computing capabilities and data analytics applications to the network edge. Fog computing enables local data analytics and management and delivers real-time insights on data to customers.
The name fog computing is as vivid as cloud computing. As the names imply, the cloud is located up in the sky, somewhere distant and remote, whereas the fog is close to the ground where servers are located near end users. Fog computing utilizes small, geographically-dispersed computers penetrating into various industries like factories, automobiles, electrical appliances, street lights, and commodities.
Edge Computing
Edge computing is one of the future trends of cloud computing, but it is still in a conceptual phase.
According to Wikipedia, edge computing is defined as a distributed computing paradigm which brings compute and storage resources closer to where they are needed.
Edge computing, to some extent, is decentralized or distributed cloud computing. In edge computing, raw data is analyzed locally instead of being transferred to the cloud. Edge computing advocates believe that computing power is moving from the cloud to the edge, and that edge computing will be the next thing after cloud computing. An important rationale behind this is that edge computing plays a critical role in driving IoT development.
Edge is a general concept. It refers to the computing infrastructure that is close to data sources. Different edge computing providers have different definitions of what edge is. For example, for the US telecom company AT&T, the edge refers to cellular base stations deployed a few miles away from the customer. For Akamai, the largest CDN vendor in the world, the edge refers to CDN devices distributed all over the world. For monitoring equipment at airports, the edge refers to HD cameras providing full coverage with no blind spots.
From the viewpoint of Fog Computing vs. Edge Computing: What's the Difference?
(https://www.automationworld.com/fog-computing-vs-edge-computing-whats-difference), "both fog computing and edge computing involve pushing intelligence and processing capabilities down closer to where the data originates, many industries use the terms fog computing and edge computing (or edge processing) interchangeably, and the key difference between the two architectures is exactly where that intelligence and computing power is placed."
- Fog computing brings compute capabilities to the local area network (LAN) and carries out data processing on fog nodes or IoT gateways.
- Edge computing pushes the intelligence, processing capabilities, and communication capabilities of edge gateways directly into devices like programmable automation controllers (PACs).
Microservices
Microservices are an architecture in which a monolithic application is divided into multiple small services. These services coordinate and cooperate with each other to provide users with the required functionalities. Each service runs in its own independent process and communicates with each other through a lightweight mechanism (usually HTTP-based RESTful API). Each service is built around a specific functionality and can be deployed independently to a production environment, pre-production environment, or another type of environment. In addition, unified and centralized service management mechanisms should be avoided as far as possible. For a specific service, appropriate language and tools should be selected to build it according to the business context. As one of the most popular buzzwords in the field of software architecture, microservices implement cloud-based software and focus on dividing complex applications into small-granularity, lightweight, and autonomous services.
In practice, microservices have the following characteristics:
1. Small
By means of service-oriented analysis and service modeling, microservice divides complex business logic into a group of small, designated, loosely coupled, and highly autonomous services. Each service is a small but integrated application, which makes microservices different from components, plugins, and shared libraries. There is no formal definition of the microservice scale. The upper limit of the microservice scale is represented by the time a development team spends on restructuring a microservice. For example, a microservice can be restructured within two weeks by a microservice
development team consisting of six to eight engineers.
2. Independent
Microservices can be developed, tested, and deployed independently of each other. Each service in the microservice architecture is an independent unit, which is deployed as an independent service process. When the code of a microservice is modified, there is no impact on other microservices, because each microservice has an independent codebase. An independent test and verification mechanism is provided for each microservice, avoiding the need to perform a large-scale regression test for an entire system. (An integration regression test covering all system functions is rather time-consuming and probably generates inaccurate results.)
3. Lightweight
Service autonomy is important for microservices. A lightweight communication mechanism (usually RESTful API) is leveraged for microservices to communicate with each other efficiently through messages. Such communication mechanisms are languageand platform-independent, which makes it convenient for developers to design communication protocols and maintain forward compatibility of interfaces. During the evolution from traditional software architecture to microservice architecture, industry practices maintain Remote Procedure Call (RPC) and formulate communication protocols based on RPC to ensure forward compatibility of interfaces. In other words, RPC-based communication protocols allow for independence and loose coupling between services.
4. Loosely coupled
Microservices are loosely coupled. Each microservice can be independently deployed in any sequence. APIs between microservices are forward compatible with future versions. Each microservice supports independent gray release and gray upgrade. To allow for loose coupling, each microservice should be designed for a single purpose. Independence of service logic is the key to decoupling microservices.
Serverless
Serverless architecture and Functions-as-a-Service (FaaS) are two upcoming cloud computing models. The following introduction to serverless computing and FaaS comes from Fei Lianghong, a Technical Evangelist at Amazon Web Services.
Like many new concepts, serverless architecture does not yet have a universally accepted definition. The latest definition is as follows: "Serverless architectures are Internet based systems where the application development does not use the usual server process. Instead they rely solely on a combination of third-party services, client-side logic, and service hosted remote procedure calls."
In the beginning, serverless architectures are designed to free developers from configuring and managing servers need to run backend applications. It does not aim to achieve "serverless" in the real sense. Instead, it means that a third-party cloud computing provider is responsible for maintaining backend infrastructure and providing developers with functions as services, such as database, messaging, and identity authentication. To sum up, this architecture is designed to allow programmers focusing on code running without the complexity of building and maintaining the infrastructure typically associated with developing and launching an application. Program code is deployed on a platform such as AWS Lambda, and functions are triggered by events. This architecture supports event-driven function calling and allows programmers to set timeout values for functions. For example, the default runtime of an AWS Lambda function ranges from 3 seconds to 5 minutes. Over the past two years, this architecture has been widely used, for example, to build a backend for mobile or IoT applications. Serverless architecture is not intended to replace traditional applications. However, developers and architects should pay attention to this new computing model as it has the potential to help improve efficiency and reduce costs and complexity.
Microservices allow developers to break applications down to their smallest components that are independent from each other, with each component focuses on a single functionality. These microservices are then assembled into complex, large-scale applications in a modular mode. On top of microservices, serverless further provides a software architecture featuring a high degree of "code fragmentation", called Function as a Service (FaaS). "Functions" are program units that are smaller than microservices. For example, you can use microservices to run the code required by CRUD operations (create, retrieve, update, and delete) or use "Functions" in FaaS to perform these operations. When the "create an account" event is triggered, a corresponding function is executed on AWS Lambda. Thus the serverless architecture and FaaS can be viewed as similar concepts.
Ref : https://e.huawei.com/en/talent/#/resources