| 1.1 | Cloud Computing Everywhere     5 | 
| 1.2 | A Facility For Flexible Computing     6 | 
| 1.3 | The Start Of Cloud: The Power Wall And Multiple Cores     7 | 
| 1.4 | From Multiple Cores To Multiple Machines     8 | 
| 1.5 | From Clusters To Web Sites And Load Balancing     8 | 
| 1.6 | Racks Of Server Computers     9 | 
| 1.7 | The Economic Motivation For A Centralized Data Center     10 | 
| 1.8 | Origin Of The Term ``In The Cloud''     12 | 
| 1.9 | Centralization Once Again     12 | 
| 2.1 | Introduction     15 | 
| 2.2 | Multi-Tenant Clouds     15 | 
| 2.3 | The Concept Of Elastic Computing     16 | 
| 2.4 | Using Virtualized Servers For Rapid Change     16 | 
| 2.5 | How Virtualized Servers Aid Providers     17 | 
| 2.6 | How Virtualized Servers Help A Customer     18 | 
| 2.7 | Business Models For Cloud Providers     18 | 
| 2.8 | Intrastructure as a Service (IaaS)     19 | 
| 2.9 | Platform as a Service (PaaS)     19 | 
| 2.10 | Software as a Service (SaaS)     20 | 
| 2.11 | A Special Case: Desktop as a Service (DaaS)     21 | 
| 2.12 | Summary     22 | 
| 4.1 | Introduction     37 | 
| 4.2 | Racks, Aisles, And Pods     37 | 
| 4.3 | Pod Size     38 | 
| 4.4 | Power And Cooling For A Pod     38 | 
| 4.5 | Raised Floor Pathways And Air Cooling     39 | 
| 4.6 | Thermal Containment And Hot/Cold Aisles     40 | 
| 4.7 | Exhaust Ducts (Chimneys)     40 | 
| 4.8 | Lights-Out Data Centers     41 | 
| 4.9 | A Possible Future Of Liquid Cooling     42 | 
| 4.10 | Network Equipment And Multi-Port Server Interfaces     43 | 
| 4.11 | Smart Network Interfaces And Offload     43 | 
| 4.12 | North-South And East-West Network Traffic     44 | 
| 4.13 | Network Hierarchies, Capacity, And Fat Tree Designs     45 | 
| 4.14 | High Capacity And Link Aggregation     46 | 
| 4.15 | A Leaf-Spine Network Design For East-West Traffic     47 | 
| 4.16 | Scaling A Leaf-Spine Architecture With A Super Spine     49 | 
| 4.17 | External Internet Connections     49 | 
| 4.18 | Storage In A Data Center     50 | 
| 4.19 | Unified Data Center Networks     51 | 
| 4.20 | Summary     51 | 
| 5.1 | Introduction     55 | 
| 5.2 | Approaches To Virtualization     55 | 
| 5.3 | Properties Of Full Virtualization     57 | 
| 5.4 | Conceptual Organization Of VM Systems     58 | 
| 5.5 | Efficient Execution And Processor Privilege Levels     59 | 
| 5.6 | Extending Privilege To A Hypervisor     60 | 
| 5.7 | Levels Of Trust     60 | 
| 5.8 | Levels Of Trust And I/O Devices     61 | 
| 5.9 | Virtual I/O Devices     61 | 
| 5.10 | Virtual Device Details     62 | 
| 5.11 | An Example Virtual Device     63 | 
| 5.12 | A VM As A Digital Object     63 | 
| 5.13 | VM Migration     64 | 
| 5.14 | Live Migration Using Three Phases     65 | 
| 5.15 | Running Virtual Machines In An Application     66 | 
| 5.16 | Facilities That Make A Hosted Hypervisor Possible     67 | 
| 5.17 | How A User Benefits From A Hosted Hypervisor     68 | 
| 5.18 | Summary     68 | 
| 6.1 | Introduction     71 | 
| 6.2 | The Advantages And Disadvantages Of VMs     71 | 
| 6.3 | Traditional Apps And Elasticity On Demand     72 | 
| 6.4 | Isolation Facilities In An Operating System     73 | 
| 6.5 | Linux Namespaces Used For Isolation     74 | 
| 6.6 | The Container Approach For Isolated Apps     75 | 
| 6.7 | Docker Containers     76 | 
| 6.8 | Docker Terminology And Development Tools     77 | 
| 6.9 | Docker Software Components     78 | 
| 6.10 | Base Operating System And Files     80 | 
| 6.11 | Items In A Dockerfile     81 | 
| 6.12 | An Example Dockerfile     83 | 
| 6.13 | Summary     83 | 
| 7.1 | Introduction     87 | 
| 7.2 | Conflicting Goals For A Data Center Network     87 | 
| 7.3 | Virtual Networks, Overlays, And Underlays     88 | 
| 7.4 | Virtual Local Area Networks (VLANs)     89 | 
| 7.5 | Scaling VLANs To A Data Center With VXLAN     90 | 
| 7.6 | A Virtual Network Switch Within A Server     91 | 
| 7.7 | Network Address Translation (NAT)     91 | 
| 7.8 | Managing Virtualization And Mobility     92 | 
| 7.9 | Automated Network Configuration And Operation     93 | 
| 7.10 | Software Defined Networking     94 | 
| 7.11 | The OpenFlow Protocol     95 | 
| 7.12 | Programmable Networks     96 | 
| 7.13 | Summary     96 | 
| 8.1 | Introduction     99 | 
| 8.2 | Persistent Storage: Disks And Files     99 | 
| 8.3 | The Disk Interface Abstraction     100 | 
| 8.4 | The File Interface Abstraction     101 | 
| 8.5 | Local And Remote Storage     101 | 
| 8.6 | Two Types Of Remote Storage Systems     102 | 
| 8.7 | Network Attached Storage (NAS) Technology     103 | 
| 8.8 | Storage Area Network (SAN) Technology     104 | 
| 8.9 | Mapping Virtual Disks To Physical Disks     105 | 
| 8.10 | Hyper-Converged Infrastructure     106 | 
| 8.11 | A Comparison Of NAS and SAN Technology     106 | 
|  | 8.11.1 | NAS Advantages And Disadvantages    106 | 
|  | 8.11.2 | SAN Advantages And Disadvantages    107 | 
| 8.12 | Object Storage     107 | 
| 8.13 | Summary     108 | 
| 9.1 | Introduction     113 | 
| 9.2 | Groups That Use Automation     113 | 
| 9.3 | The Need For Automation In A Data Center     114 | 
| 9.4 | An Example Deployment     115 | 
| 9.5 | What Can Be Automated?     116 | 
| 9.6 | Levels Of Automation     117 | 
| 9.7 | AIops: Using Machine Learning And Artificial Intelligence     119 | 
| 9.8 | A Plethora Of Automation Tools     119 | 
| 9.9 | Automation Of Manual Data Center Practices     120 | 
| 9.10 | Zero Touch Provisioning And Infrastructure As Code     121 | 
| 9.11 | Declarative, Imperative, And Intent-Based Specifications     121 | 
| 9.12 | The Evolution Of Automation Tools     122 | 
| 9.13 | Summary     123 | 
| 10.1 | Introduction     127 | 
| 10.2 | The Legacy Of Automating Manual Procedures     127 | 
| 10.3 | Orchestration: Automation With A Larger Scope     128 | 
| 10.4 | Kubernetes: An Example Container Orchestration System     129 | 
| 10.5 | Limits On Kubernetes Scope     130 | 
| 10.6 | The Kubernetes Cluster Model     131 | 
| 10.7 | Kubernetes Pods     132 | 
| 10.8 | Pod Creation, Templates, And Binding Times     133 | 
| 10.9 | Init Containers     134 | 
| 10.10 | Kubernetes Terminology: Nodes And Control Plane     135 | 
| 10.11 | Control Plane Software Components     135 | 
| 10.12 | Communication Among Control Plane Components     136 | 
| 10.13 | Worker Node Software Components     137 | 
| 10.14 | Kubernetes Features     138 | 
| 10.15 | Summary     140 | 
| 11.1 | Introduction     145 | 
| 11.2 | Software In A Cloud Environment     145 | 
| 11.3 | Cloud-Native Vs. Conventional Software     146 | 
| 11.4 | Using Data Center Servers For Parallel Processing     147 | 
| 11.5 | Tradeoffs And Limitations Of The Parallel Approach     148 | 
| 11.6 | The MapReduce Programming Paradigm     149 | 
| 11.7 | Mathematical Description Of MapReduce     152 | 
| 11.8 | Splitting Input     152 | 
| 11.9 | Parallelism And Data Size     153 | 
| 11.10 | Data Access And Data Transmission     153 | 
| 11.11 | Apache Hadoop     154 | 
| 11.12 | The Two Major Parts Of Hadoop     154 | 
| 11.13 | Hadoop Hardware Cluster Model     155 | 
| 11.14 | HDFS Components: DataNodes And A NameNode     156 | 
| 11.15 | Block Replication And Fault Tolerance     156 | 
| 11.16 | HDFS And MapReduce     157 | 
| 11.17 | Using Hadoop With Other File Systems     158 | 
| 11.18 | Using Hadoop For MapReduce Computations     158 | 
| 11.19 | Hadoop's Support For Programming Languages     159 | 
| 11.20 | Summary     160 | 
| 12.1 | Introduction     163 | 
| 12.2 | Traditional Monolithic Applications     163 | 
| 12.3 | Monolithic Applications In A Data Center     164 | 
| 12.4 | The Microservices Approach     165 | 
| 12.5 | The Advantages Of Microservices     165 | 
|  | 12.5.1 | Advantages For Software Development    166 | 
|  | 12.5.2 | Advantages For Operations And Maintenance    166 | 
| 12.6 | The Potential Disadvantages Of Microservices     167 | 
| 12.7 | Microservices Granularity     168 | 
| 12.8 | Communication Protocols Used For Microservices     171 | 
| 12.9 | Communication Among Microservices     174 | 
| 12.10 | Using A Service Mesh Proxy     175 | 
| 12.11 | The Potential For Deadlock     176 | 
| 12.12 | Microservices Technologies     178 | 
| 12.13 | Summary     178 | 
| 13.1 | Introduction     181 | 
| 13.2 | Traditional Distributed Application Management     181 | 
| 13.3 | Periodic Monitoring     182 | 
| 13.4 | Managing Cloud-Native Applications     183 | 
| 13.5 | Control Loop Concept     184 | 
| 13.6 | Control Loop Delay, Hysteresis, And Instability     185 | 
| 13.7 | The Kubernetes Controller Paradigm And Control Loop     186 | 
| 13.8 | An Event-Driven Implementation Of A Control Loop     187 | 
| 13.9 | Components Of A Kubernetes Controller     188 | 
| 13.10 | Custom Resources And Custom Controllers     189 | 
| 13.11 | Kubernetes Custom Resource Definition (CRD)     190 | 
| 13.12 | Service Mesh Management Tools     191 | 
| 13.13 | Reactive Or Dynamic Planning     191 | 
| 13.14 | A Goal: The Operator Pattern     192 | 
| 13.15 | Summary     192 | 
| 14.1 | Introduction     195 | 
| 14.2 | Traditional Client-Server Architecture     195 | 
| 14.3 | Scaling A Traditional Server To Handle Multiple Clients     196 | 
| 14.4 | Scaling A Server In A Cloud Environment     197 | 
| 14.5 | The Economics Of Servers In The Cloud     197 | 
| 14.6 | The Serverless Computing Approach     198 | 
| 14.7 | Stateless Servers And Containers     199 | 
| 14.8 | The Architecture Of A Serverless Infrastructure     201 | 
| 14.9 | An Example Of Serverless Processing     201 | 
| 14.10 | Potential Disadvantages Of Serverless Computing     202 | 
| 14.11 | Summary     204 | 
| 15.1 | Introduction     207 | 
| 15.2 | Software Creation And Deployment     207 | 
| 15.3 | The Realistic Software Development Cycle     208 | 
| 15.4 | Large Software Projects And Teams     208 | 
| 15.5 | Disadvantages Of Using Multiple Teams     209 | 
| 15.6 | The DevOps Approach     210 | 
| 15.7 | Continuous Integration (CI): A Short Change Cycle     211 | 
| 15.8 | Continuous Delivery (CD): Deploying Versions Rapidly     212 | 
| 15.9 | Cautious Deployment: Sandbox, Canary, And Blue/Green     212 | 
| 15.10 | Difficult Aspects Of The DevOps Approach     213 | 
| 15.11 | Summary     214 | 
| 16.1 | Introduction     219 | 
| 16.2 | The Latency Disadvantage Of Cloud     219 | 
| 16.3 | Situations Where Latency Matters     220 | 
| 16.4 | Industries That Need Low Latency     220 | 
| 16.5 | Moving Computing To The Edge     221 | 
| 16.6 | Extending Edge Computing To A Fog Hierarchy     222 | 
| 16.7 | Caching At Multiple Levels Of A Hierarchy     223 | 
| 16.8 | An Automotive Example     224 | 
| 16.9 | Edge Computing And IIoT     225 | 
| 16.10 | Communication For IIoT     227 | 
| 16.11 | Decentralization Once Again     228 | 
| 16.12 | Summary     229 | 
| 17.1 | Introduction     233 | 
| 17.2 | Cloud-Specific Security Problems     233 | 
| 17.3 | Security In A Traditional Infrastructure     235 | 
| 17.4 | Why Traditional Methods Do Not Suffice For The Cloud     236 | 
| 17.5 | The Zero Trust Security Model     237 | 
| 17.6 | Identity Management     238 | 
| 17.7 | Privileged Access Management (PAM)     238 | 
| 17.8 | AI Technologies And Their Effect On Security     239 | 
| 17.9 | Protecting Remote Access     240 | 
| 17.10 | Privacy In A Cloud Environment     241 | 
| 17.11 | Back Doors, Side Channels, And Other Concerns     242 | 
| 17.12 | Cloud Providers As Partners For Security And Privacy     242 | 
| 17.13 | Summary     243 | 
| 18.1 | Introduction     247 | 
| 18.2 | Sources Of Complexity In Cloud Systems     247 | 
| 18.3 | Inherent Complexity In Large Distributed Systems     248 | 
| 18.4 | Designing A Flawless Distributed System     249 | 
| 18.5 | System Modeling     249 | 
| 18.6 | Mathematical Models     250 | 
| 18.7 | An Example Graph Model To Help Avoid Deadlock     251 | 
| 18.8 | A Graph Model For A Startup Sequence     252 | 
| 18.9 | Modeling Using Mathematics     254 | 
| 18.10 | An Example TLA\v'-.25m'\h'-4u'\s-1+\s+1\v'.25m'\h'4u' Specification     255 | 
| 18.11 | System State And State Changes     256 | 
| 18.12 | The Form Of A TLA\v'-.25m'\h'-4u'\s-1+\s+1\v'.25m'\h'4u' Specification     257 | 
| 18.13 | Symbols In A TLA\v'-.25m'\h'-4u'\s-1+\s+1\v'.25m'\h'4u' Specification     259 | 
| 18.14 | State Transitions For The Example     261 | 
| 18.15 | Conclusions About Temporal Logic Models     263 | 
| 18.16 | Summary     263 |