@@ -81,7 +81,7 @@ deployments of 5G, and to that end, defines a *user* to be a principal
8181that accesses the API or GUI portal with some prescribed level of
8282privilege. There is not necessarily a one-to-one relationship between
8383users 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
8585are not typically associated with a particular person.
8686
87875.1 Design Overview
@@ -115,7 +115,7 @@ Central to this role is the requirement that Runtime Control be able
115115to represent a set of abstract objects, which is to say, it implements
116116a *data model *. While there are several viable options for the
117117specification 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
119119language for data modeling, with support for strong validation of the
120120data stored in the models and the ability to define relations between
121121objects. 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
168168make configuration state persistent. Because x-config was originally
169169designed to manage configuration state for devices, it uses gNMI as
170170its 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
172172written 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
176176component management-ready. Finally, Runtime Control includes a
177177Workflow Engine that is responsible for executing multi-step
178178operations 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
428428control, then it is often the case that the models can be
429429distinguished as "low-level" or "high-level", with only the latter
430430directly 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
4354355.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
473473Not 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
475475translate 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
477477the 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
479479necessarily just a syntactic translator, but may also include its own
480480semantic layer. This supports a logical decoupling of the models
481481stored in x-config and the interface used by the southbound
@@ -484,15 +484,15 @@ Control to evolve independently. It also allows for southbound
484484devices/services to be replaced without affecting the northbound
485485interface.
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
489489services and applying it to each of those services. An example in
490490Aether is the *User Plane Function * (the main packet-forwarding module
491491in 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
493493applies a single set of models to both services. Some care is needed
494494to 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
496496failed backend service until it succeeds.
497497
4984985.2.5 Workflow Engine
@@ -519,7 +519,7 @@ ongoing development.
519519gNMI naturally lends itself to mutual TLS for authentication, and that
520520is the recommended way to secure communications between components
521521that 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
523523certificates between components is a problem outside the scope of
524524Runtime Control. It is assumed that another tool will be responsible
525525for distributing, revoking, and renewing certificates.
@@ -738,7 +738,7 @@ that it supports the option of spinning up an entirely new copy of the
738738SD-Core rather than sharing an existing UPF with another Slice. This is
739739done to ensure isolation, and illustrates one possible touch-point
740740between 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
742742launch the necessary set of Kubernetes containers that implement an
743743isolated slice.
744744
@@ -802,7 +802,7 @@ Giving enterprises the ability to set isolation and QoS parameters is
802802an illustrative example in Aether. Auto-generating that API from a
803803set of models is an attractive approach to realizing such a control
804804interface, 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
806806bridging the gap).
807807
808808.. sidebar :: UX Considerations
@@ -839,15 +839,15 @@ configuration change requires a container restart, then there may be
839839little choice. But ideally, microservices are implemented with their
840840own well-defined management interfaces, which can be invoked from
841841either 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
843843runtime).
844844
845845For resource-related operations, such as spinning up additional
846846containers in response to a user request to create a *Slice * or
847847activate an edge service, a similar implementation strategy is
848848feasible. The Kubernetes API can be called from either Helm (to
849849initialize 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
851851deciding which subsystem maintains the authoritative copy of that
852852state, and ensuring that decision is enforced as a system invariant.\ [# ]_
853853Such decisions are often situation-dependent, but our experience is
0 commit comments