3
3
4
4
Brief description:
5
5
* ** SFC Controller** - renders a logical network topology (which defines
6
- how VNF are logically interconnected) onto a given physical network, and
7
- VNF placement; the rednering process creates configuration for VNFs and
8
- network devices.
6
+ how VNF are logically interconnected) onto a given physical network
7
+ and VNF placement; the rendering process creates configuration for VNFs
8
+ and network devices.
9
9
10
10
* ** Control Plane Apps** - renders specific VPP configuration for multiple
11
11
agents to the Data Store
12
12
13
- * ** Clientv1** - VPP Agent clients clients(app, tools, the control plane )
14
- can use the clientv1 library to interact with one or more VPP Agents. The
15
- clientv1 library is based on generated GO structures from protobuf
16
- messages. The library contais helper methods for working with KV Data
17
- Stores used for generation of keys and storing/retrieving data in the
18
- Data Store under a given key.
13
+ * ** Clientv1** - VPP Agent clients (control plane apps & tools )
14
+ can use the clientv1 library to interact with one or more VPP Agents.
15
+ The clientv1 library is based on generated GO structures from protobuf
16
+ messages. The library contains helper methods for working with KV Data
17
+ Stores, used for generation of keys and storage/retrieval
18
+ of configuration data to/from Data Store under a given key.
19
19
20
- * ** Data Store** (ETCD, Redis, etc.) to:
21
- * Store VPP configuration; this data is put into the Data Store by one
20
+ * ** Data Store** (ETCD, Redis, etc.) is used to:
21
+ * store VPP configuration; this data is put into the Data Store by one
22
22
or more orchestrator apps and retrieved by one or more VPP Agents.
23
- * Store operational state, such as network counters /statistics or errors;
24
- this data is put into the Data Store by one or more VPP Agents and
25
- retrieved by one or more monitoring/analytics applications.
23
+ * store operational state, such as network counters /statistics
24
+ or errors; this data is put into the Data Store by one or more VPP
25
+ Agents and retrieved by one or more monitoring/analytics applications.
26
26
27
- * ** VPP vSwitch** - privileged container that cross connects multiple VNFs
27
+ * ** VPP vSwitch** - privileged container that cross- connects multiple VNFs
28
28
29
29
* ** VPP VNF** - a container with a Virtual Network Function implementation
30
- based on VPP
30
+ based on VPP
31
31
32
32
* ** Non VPP VNF** - container with a non-VPP based Virtual Network Function;
33
- that can nevertheless interact with VPP containers (see below MEMIFs, VETH)
33
+ that can nevertheless interact with VPP containers (see below MEMIFs,
34
+ VETH)
34
35
35
36
* ** Messaging** - AD-HOC events (e.g. link UP/Down)
36
37
@@ -42,55 +43,55 @@ The VPP Agent was designed to meet the following requirements:
42
43
* Rapid deployment
43
44
* High performance & minimal footprint
44
45
45
-
46
46
## Modular design with API contract
47
- The VPP Agent code base is a collection of plugins. Each plugin provides
48
- a specific service defined by the service's API. VPP Agent's functionality
49
- can be easily extended by introducing new plugins. Well-defined API
50
- contracts facilitate integration of new plugins into the VPP Agent or
51
- integration of multiple plugins into a new application.
47
+ The VPP Agent codebase is basically a collection of plugins.
48
+ Each plugin provides a specific service defined by the service's API.
49
+ VPP Agent's functionality can be easily extended by introducing new
50
+ plugins. Well-defined API contracts facilitate seamless integration
51
+ of new plugins into the VPP Agent or integration of multiple plugins
52
+ into a new application.
52
53
53
54
## Cloud native
54
- Assumption: both data plane and control plane can be implemented as a set
55
- of microservices, where each microservice is independent of other
56
- microservices. Therefore, the overall configuration of a system may be
57
- incomplete at times, since one object may refer to another object owned by
58
- a service that has not been instantiated yet. The VPP agent can handle this
59
- use - at first it skips incomplete part of configuration, and later, when
60
- the configuration is updated, it tries again to configure what was skipped.
55
+ * Assumption* : both data plane and control plane can be implemented as
56
+ a set of microservices independent of each other. Therefore, the overall
57
+ configuration of a system may be incomplete at times, since one object
58
+ may refer to another object owned by a service that has not been
59
+ instantiated yet. The VPP agent can handle this case - at first it skips
60
+ the incomplete parts of the overall configuration, and later, when
61
+ the configuration is updated, it tries again to configure what has been
62
+ previously skipped.
61
63
62
64
The VPP Agent is usually deployed in a container together with VPP. There
63
65
can be many of these containers in a given cloud or in a more complex data
64
66
plane implementation. Containers can be used in many different
65
67
infrastructures (on-premise, hybrid, or public cloud). The VPP + VPP Agent
66
68
containers have been tested with [ Kubernetes] ( https://kubernetes.io/ ) .
67
69
68
-
69
70
Control Plane microservices do not really depend on the current lifecycle
70
71
phase of the VPP Agents. Control Plane can render config data for one or
71
72
more VPP Agents and store it in the KV Data Store even if (some of) the
72
73
VPP Agents have not been started yet. This is possible because:
73
- - The Control Plane does not access the VPP Agents directly, but it rather
74
- accesses the KV Data Store; the VPP Agents are responsible for downloading
75
- their data from the Data Store.
74
+ - The Control Plane does not access the VPP Agents directly, instead it
75
+ accesses the KV Data Store; the VPP Agents are responsible
76
+ for downloading their data from the Data Store.
76
77
- Data structures in configuration files use logical object names, not
77
78
internal identifiers of the VPP). See the
78
79
[ protobuf] ( https://developers.google.com/protocol-buffers/ )
79
80
definitions in the ` model ` sub folders in various VPP Agent plugins.
80
81
81
- ## Fault tolerant
82
+ ## Fault tolerance
82
83
Each microservice has its own lifecycle, therefore the VPP Agent is
83
84
designed to recover from HA events even when some subset of microservices
84
85
(e.g. db, message bus...) are temporary unavailable.
85
86
86
87
The same principle can be applied also for the VPP Agent process and the
87
88
VPP process inside one container. The VPP Agent checks the VPP actual
88
- configuration and does data synchronization by polling latest configuration
89
- from the KV Data Store.
89
+ configuration and does data synchronization by polling latest
90
+ configuration from the KV Data Store.
90
91
91
92
VPP Agent also reports status of the VPP in probes & Status Check Plugin.
92
93
93
- In general VPP Agents:
94
+ In general, VPP Agents:
94
95
* propagate errors to upper layers & report to the Status Check Plugin
95
96
* fault recovery is performed with two different strategies:
96
97
* easily recoverable errors: retry data synchronization (Data Store
@@ -101,13 +102,13 @@ In general VPP Agents:
101
102
## Rapid deployment
102
103
103
104
Containers allow to reduce deployment time to seconds. This is due to the
104
- fact that containers are created at process level and there is no need to
105
- boot the OS. More over K8s helps with (un)deploying different version of
106
- multiple instances of microservices .
105
+ fact that containers are created at process level and there is no need to
106
+ boot an OS. Moreover, K8s helps with the (un)deployment of possibly
107
+ different versions of multiple microservice instances .
107
108
108
109
## High performance & minimal footprint
109
- Performance optimization is currently work in progress. Several bottlenecks
110
- that can be optimized have been identified:
110
+ Performance optimization is currently a work-in- progress.
111
+ Several bottlenecks that can be optimized have been identified:
111
112
- GOVPP
112
113
- minimize context switching
113
- - replace blocking calls to non-blocking calls
114
+ - replace blocking calls to non-blocking (asynchronous) calls
0 commit comments