Skip to content

Commit 0d74184

Browse files
authored
Merge pull request #21 from SystemsApproach/2nd-print
all 2nd print changes
2 parents fe7a4c8 + 588a46c commit 0d74184

File tree

8 files changed

+235
-197
lines changed

8 files changed

+235
-197
lines changed

arch.rst

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -187,10 +187,10 @@ cluster built out of bare-metal components, each of the SD-Core CP
187187
subsystems shown in :numref:`Figure %s <fig-aether>` is actually
188188
deployed in a logical Kubernetes cluster on a commodity cloud. The
189189
same is true for AMP. Aether’s centralized components are able to run
190-
in Google Cloud Platform, Microsoft Azure, and Amazon’s AWS. They also
190+
in Google Cloud Platform, Microsoft Azure, and Amazon’s AWS. They can also
191191
run as an emulated cluster implemented by a system like
192192
KIND—Kubernetes in Docker—making it possible for developers to run
193-
these components on their laptop.
193+
these components on their laptops.
194194

195195
To be clear, Kubernetes adopts generic terminology, such as “cluster”
196196
and “service”, and gives it a very specific meaning. In
@@ -239,8 +239,8 @@ There is a potential third stakeholder of note—third-party service
239239
providers—which points to the larger issue of how we deploy and manage
240240
additional edge applications. To keep the discussion tangible—but
241241
remaining in the open source arena—we use OpenVINO as an illustrative
242-
example. OpenVINO is a framework for deploying AI inference models,
243-
which is interesting in the context of Aether because one of its use
242+
example. OpenVINO is a framework for deploying AI inference models.
243+
It is interesting in the context of Aether because one of its use
244244
cases is processing video streams, for example to detect and count
245245
people who enter the field of view of a collection of 5G-connected
246246
cameras.
@@ -274,11 +274,11 @@ but for completeness, we take note of two other possibilities. One is
274274
that we extend our hybrid architecture to support independent
275275
third-party service providers. Each new edge service acquires its own
276276
isolated Kubernetes cluster from the edge cloud, and then the
277-
3rd-party provider subsumes all responsibility for managing the
277+
3rd-party provider takes over all responsibility for managing the
278278
service running in that cluster. From the perspective of the cloud
279279
operator, though, the task just became significantly more difficult
280280
because the architecture would need to support Kubernetes as a managed
281-
service, which is sometimes called *Container-as-a-Service (CaaS)*.\ [#]_
281+
service, which is sometimes called *Containers-as-a-Service (CaaS)*.\ [#]_
282282
Creating isolated Kubernetes clusters on-demand is a step further than
283283
we take things in this book, in part because there is a second
284284
possible answer that seems more likely to happen.
@@ -355,7 +355,7 @@ Internally, each of these subsystems is implemented as a highly
355355
available cloud service, running as a collection of microservices. The
356356
design is cloud-agnostic, so AMP can be deployed in a public cloud
357357
(e.g., Google Cloud, AWS, Azure), an operator-owned Telco cloud, (e.g,
358-
AT&T’s AIC), or an enterprise-owned private cloud. For the current pilot
358+
AT&T’s AIC), or an enterprise-owned private cloud. For the pilot
359359
deployment of Aether, AMP runs in the Google Cloud.
360360

361361
The rest of this section introduces these four subsystems, with the
@@ -485,9 +485,9 @@ Given this mediation role, Runtime Control provides mechanisms to
485485
model (represent) the abstract services to be offered to users; store
486486
any configuration and control state associated with those models;
487487
apply that state to the underlying components, ensuring they remain in
488-
sync with the operator’s intentions; and authorize the set API calls
489-
users try to invoke on each service. These details are spelled out in
490-
Chapter 5.
488+
sync with the operator’s intentions; and authorize the set of API
489+
calls that users try to invoke on each service. These details are
490+
spelled out in Chapter 5.
491491

492492

493493
2.4.4 Monitoring and Telemetry
@@ -526,13 +526,13 @@ diagnostics and analytics.
526526

527527
This overview of the management architecture could lead one to
528528
conclude that these four subsystems were architected, in a rigorous,
529-
top-down fashion, to be completely independent. But that is not
530-
the case. It is more accurate to say that the system evolved bottom
531-
up, solving the next immediate problem one at a time, all the while
529+
top-down fashion, to be completely independent. But that is not the
530+
case. It is more accurate to say that the system evolved bottom up,
531+
solving the next immediate problem one at a time, all the while
532532
creating a large ecosystem of open source components that can be used
533-
in different combinations. What we are presenting in this book is a
534-
retrospective description of an end result, organized into four
535-
subsystems to help make sense of it all.
533+
in different combinations. What this book presents is a retrospective
534+
description of the end result, organized into four subsystems to help
535+
make sense of it all.
536536

537537
There are, in practice, many opportunities for interactions among the
538538
four components, and in some cases, there are overlapping concerns
@@ -686,7 +686,7 @@ own. The Control and Management Platform now has its own DevOps
686686
team(s), who in addition to continually improving the platform, also
687687
field operational events, and when necessary, interact with other
688688
teams (e.g., the SD-RAN team in Aether) to resolve issues that come
689-
up. They are sometimes called System Reliability Engineers (SREs), and
689+
up. They are sometimes called Site Reliability Engineers (SREs), and
690690
in addition to being responsible for the Control and Management
691691
Platform, they enforce operational discipline—the third aspect of
692692
DevOps discussed next—on everyone else.

authors.rst

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,47 +6,49 @@ Science, Emeritus at Princeton University, where he served as Chair
66
from 2003-2009. His research focuses on the design, implementation,
77
and operation of Internet-scale distributed systems, including the
88
widely used PlanetLab and MeasurementLab platforms. He is currently
9-
contributing to the Aether access-edge cloud project at the Open
10-
Networking Foundation (ONF), where he serves as Chief Scientist.
11-
Peterson is a member of the National Academy of Engineering, a Fellow
12-
of the ACM and the IEEE, the 2010 recipient of the IEEE Kobayashi
13-
Computer and Communication Award, and the 2013 recipient of the ACM
14-
SIGCOMM Award. He received his Ph.D. degree from Purdue University.
9+
contributing to the Aether access-edge cloud project at the Linux
10+
Foundation. Peterson is a member of the National Academy of
11+
Engineering, a Fellow of the ACM and the IEEE, the 2010 recipient of
12+
the IEEE Kobayashi Computer and Communication Award, and the 2013
13+
recipient of the ACM SIGCOMM Award. He received his Ph.D. degree from
14+
Purdue University.
1515

16-
**Scott Baker** is a Cloud Software Architect at Intel, which he
17-
joined as part of Intel's acquisition of the Open Networking
18-
Foundation (ONF) engineering team. While at ONF, he led the Aether
19-
DevOps team. Prior to ONF, he worked on cloud-related research
20-
projects at Princeton and the University of Arizona, including
21-
PlanetLab, GENI, and VICCI. Baker received his Ph.D. in Computer
22-
Science from the University of Arizona in 2005.
16+
**Scott Baker** is a Cloud Software Architect at Intel, where he works
17+
on the Open Edge Platform. Prior to joining Intel, he was on the Open
18+
Networking Foundation (ONF) engineering team that built Aether,
19+
leading the runtime control effort. Baker has also worked on
20+
cloud-related research projects at Princeton and the University of
21+
Arizona, including PlanetLab, GENI, and VICCI. He received his
22+
Ph.D. in Computer Science from the University of Arizona in 2005.
2323

24-
**Andy Bavier** is a Cloud Software Engineer at Intel, which he joined
25-
as part of Intel's acquisition of the Open Networking Foundation (ONF)
26-
engineering team. While at ONF, he worked on the Aether project. Prior
27-
to joining ONF, he was a Research Scientist at Princeton University,
28-
where he worked on the PlanetLab project. Bavier received a BA in
29-
Philosophy from William & Mary in 1990, and MS in Computer Science
30-
from the University of Arizona in 1995, and a PhD in Computer Science
31-
from Princeton University in 2004.
24+
**Andy Bavier** is a Cloud Software Engineer at Intel, where he works
25+
on the Open Edge Platform. Prior to joining Intel, he was on the Open
26+
Networking Foundation (ONF) engineering team that built Aether,
27+
leading the observability effort. Bavier has also been a Research
28+
Scientist at Princeton University, where he worked on the PlanetLab
29+
project. He received a BA in Philosophy from William & Mary in 1990,
30+
and MS in Computer Science from the University of Arizona in 1995, and
31+
a PhD in Computer Science from Princeton University in 2004.
3232

33-
**Zack Williams** is a Cloud Software Engineer at Intel, which he
34-
joined as part of Intel's acquisition of the Open Networking
35-
Foundation (ONF) engineering team. While at ONF, he worked on the
36-
Aether project, and led the Infrastructure team. Prior to joining ONF,
37-
he was a systems programmer at the University of Arizona. Williams
38-
received his BS in Computer Science from the University of Arizona
39-
in 2001.
33+
**Zack Williams** is a Cloud Software Engineer at Intel, where he
34+
works on the Open Edge Platform. Prior to joining Intel, he was on the
35+
Open Networking Foundation (ONF) engineering team that built
36+
Aether, leading the infrastructure provisioning effort. Williams has also
37+
been a systems programmer at the University of Arizona. He received
38+
his BS in Computer Science from the University of Arizona in 2001.
4039

4140
**Bruce Davie** is a computer scientist noted for his contributions to
42-
the field of networking. He is a former VP and CTO for the Asia
43-
Pacific region at VMware. He joined VMware during the acquisition of
44-
Software Defined Networking (SDN) startup Nicira. Prior to that, he
45-
was a Fellow at Cisco Systems, leading a team of architects
46-
responsible for Multiprotocol Label Switching (MPLS). Davie has over
47-
30 years of networking industry experience and has co-authored 17
48-
RFCs. He was recognized as an ACM Fellow in 2009 and chaired ACM
49-
SIGCOMM from 2009 to 2013. He was also a visiting lecturer at the
50-
Massachusetts Institute of Technology for five years. Davie is the
51-
author of multiple books and the holder of more than 40 U.S. Patents.
41+
the field of networking. He began his networking career at Bellcore
42+
where he worked on the Aurora Gigabit testbed and collaborated with
43+
Larry Peterson on high-speed host-network interfaces. He then went to
44+
Cisco where he led a team of architects responsible for Multiprotocol
45+
Label Switching (MPLS). He worked extensively at the IETF on
46+
standardizing MPLS and various quality of service technologies. He
47+
also spent five years as a visiting lecturer at the Massachusetts
48+
Institute of Technology. In 2012 he joined Software Defined Networking
49+
(SDN) startup Nicira and was then a principal engineer at VMware
50+
following the acquisition of Nicira. In 2017 he took on the role of VP
51+
and CTO for the Asia Pacific region at VMware. He is a Fellow of the
52+
ACM and chaired ACM SIGCOMM from 2009 to 2013. Davie is the author of
53+
multiple books and the holder of more than 40 U.S. patents.
5254

control.rst

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ deployments of 5G, and to that end, defines a *user* to be a principal
8181
that accesses the API or GUI portal with some prescribed level of
8282
privilege. There is not necessarily a one-to-one relationship between
8383
users and Core-defined subscribers, and more importantly, not all
84-
devices have subscribers, as would be the case with IoT devices that
84+
devices have subscribers; a concrete example would be IoT devices that
8585
are not typically associated with a particular person.
8686

8787
5.1 Design Overview
@@ -115,7 +115,7 @@ Central to this role is the requirement that Runtime Control be able
115115
to represent a set of abstract objects, which is to say, it implements
116116
a *data model*. While there are several viable options for the
117117
specification language used to represent the data model, for Runtime
118-
Control we use YANG. This is for three reasons. First, YANG is a rich
118+
Control Aether uses YANG. This is for three reasons. First, YANG is a rich
119119
language for data modeling, with support for strong validation of the
120120
data stored in the models and the ability to define relations between
121121
objects. Second, it is agnostic as to how the data is stored (i.e.,
@@ -155,7 +155,7 @@ that we can build upon.
155155
from (1) a GUI, which is itself typically built using another
156156
framework, such as AngularJS; (2) a CLI; or (3) a closed-loop
157157
control program. There are other differences—for example,
158-
Adapters (a kind of Controller) use gNMI as a standard
158+
Adaptors (a kind of Controller) use gNMI as a standard
159159
interface for controlling backend components, and persistent
160160
state is stored in a key-value store instead of a SQL DB—but the
161161
biggest difference is the use of a declarative rather than an
@@ -168,11 +168,11 @@ x-config, in turn, uses Atomix (a key-value store microservice), to
168168
make configuration state persistent. Because x-config was originally
169169
designed to manage configuration state for devices, it uses gNMI as
170170
its southbound interface to communicate configuration changes to
171-
devices (or in our case, software services). An Adapter has to be
171+
devices (or in our case, software services). An Adaptor has to be
172172
written for any service/device that does not support gNMI
173-
natively. These adapters are shown as part of Runtime Control in
173+
natively. These adaptors are shown as part of Runtime Control in
174174
:numref:`Figure %s <fig-roc>`, but it is equally correct to view each
175-
adapter as part of the backend component, responsible for making that
175+
adaptor as part of the backend component, responsible for making that
176176
component management-ready. Finally, Runtime Control includes a
177177
Workflow Engine that is responsible for executing multi-step
178178
operations on the data model. This happens, for example, when a change
@@ -428,8 +428,8 @@ models are changing due to volatility in the backend systems they
428428
control, then it is often the case that the models can be
429429
distinguished as "low-level" or "high-level", with only the latter
430430
directly visible to clients via the API. In semantic versioning terms,
431-
a change to a low-level model would then effectively be a backwards
432-
compatible PATCH.
431+
a change to a low-level model would then effectively be a
432+
backward-compatible PATCH.
433433

434434

435435
5.2.3 Identity Management
@@ -467,15 +467,15 @@ the case of Aether, Open Policy Agent (OPA) serves this role.
467467
<https://www.openpolicyagent.org/>`__.
468468

469469

470-
5.2.4 Adapters
470+
5.2.4 Adaptors
471471
~~~~~~~~~~~~~~
472472

473473
Not every service or subsystem beneath Runtime Control supports gNMI,
474-
and in the case where it is not supported, an adapter is written to
474+
and in the case where it is not supported, an adaptor is written to
475475
translate between gNMI and the service’s native API. In Aether, for
476-
example, a gNMI :math:`\rightarrow` REST adapter translates between
476+
example, a gNMI :math:`\rightarrow` REST adaptor translates between
477477
the Runtime Control’s southbound gNMI calls and the SD-Core
478-
subsystem’s RESTful northbound interface. The adapter is not
478+
subsystem’s RESTful northbound interface. The adaptor is not
479479
necessarily just a syntactic translator, but may also include its own
480480
semantic layer. This supports a logical decoupling of the models
481481
stored in x-config and the interface used by the southbound
@@ -484,15 +484,15 @@ Control to evolve independently. It also allows for southbound
484484
devices/services to be replaced without affecting the northbound
485485
interface.
486486

487-
An adapter does not necessarily support only a single service. An
488-
adapter is one means of taking an abstraction that spans multiple
487+
An adaptor does not necessarily support only a single service. An
488+
adaptor is one means of taking an abstraction that spans multiple
489489
services and applying it to each of those services. An example in
490490
Aether is the *User Plane Function* (the main packet-forwarding module
491491
in the SD-Core User Plane) and *SD-Core*, which are jointly
492-
responsible for enforcing *Quality of Service*, where the adapter
492+
responsible for enforcing *Quality of Service*, where the adaptor
493493
applies a single set of models to both services. Some care is needed
494494
to deal with partial failure, in case one service accepts the change,
495-
but the other does not. In this case, the adapter keeps trying the
495+
but the other does not. In this case, the adaptor keeps trying the
496496
failed backend service until it succeeds.
497497

498498
5.2.5 Workflow Engine
@@ -519,7 +519,7 @@ ongoing development.
519519
gNMI naturally lends itself to mutual TLS for authentication, and that
520520
is the recommended way to secure communications between components
521521
that speak gNMI. For example, communication between x-config and
522-
its adapters uses gNMI, and therefore, uses mutual TLS. Distributing
522+
its adaptors uses gNMI, and therefore, uses mutual TLS. Distributing
523523
certificates between components is a problem outside the scope of
524524
Runtime Control. It is assumed that another tool will be responsible
525525
for distributing, revoking, and renewing certificates.
@@ -738,7 +738,7 @@ that it supports the option of spinning up an entirely new copy of the
738738
SD-Core rather than sharing an existing UPF with another Slice. This is
739739
done to ensure isolation, and illustrates one possible touch-point
740740
between Runtime Control and the Lifecycle Management subsystem:
741-
Runtime Control, via an Adapter, engages Lifecycle Management to
741+
Runtime Control, via an Adaptor, engages Lifecycle Management to
742742
launch the necessary set of Kubernetes containers that implement an
743743
isolated slice.
744744

@@ -802,7 +802,7 @@ Giving enterprises the ability to set isolation and QoS parameters is
802802
an illustrative example in Aether. Auto-generating that API from a
803803
set of models is an attractive approach to realizing such a control
804804
interface, if for no other reason than it forces a decoupling of the
805-
interface definition from the underlying implementation (with Adapters
805+
interface definition from the underlying implementation (with Adaptors
806806
bridging the gap).
807807

808808
.. sidebar:: UX Considerations
@@ -839,15 +839,15 @@ configuration change requires a container restart, then there may be
839839
little choice. But ideally, microservices are implemented with their
840840
own well-defined management interfaces, which can be invoked from
841841
either a configuration-time Operator (to initialize the component at
842-
boot time) or a control-time Adapter (to change the component at
842+
boot time) or a control-time Adaptor (to change the component at
843843
runtime).
844844

845845
For resource-related operations, such as spinning up additional
846846
containers in response to a user request to create a *Slice* or
847847
activate an edge service, a similar implementation strategy is
848848
feasible. The Kubernetes API can be called from either Helm (to
849849
initialize a microservice at boot time) or from a Runtime Control
850-
Adapter (to add resources at runtime). The remaining challenge is
850+
Adaptor (to add resources at runtime). The remaining challenge is
851851
deciding which subsystem maintains the authoritative copy of that
852852
state, and ensuring that decision is enforced as a system invariant.\ [#]_
853853
Such decisions are often situation-dependent, but our experience is

0 commit comments

Comments
 (0)