Merge "Sample consumer to get kafka broker from ICS"
[nonrtric.git] / docs / overview.rst
1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2 .. SPDX-License-Identifier: CC-BY-4.0
3 .. Copyright (C) 2021-2023 Nordix Foundation. All rights Reserved
4 .. Copyright (C) 2023 OpenInfra Foundation Europe. All Rights Reserved
5
6 .. |archpic| image:: ./images/nonrtric-architecture-I.png
7   :alt: Image: O-RAN SC - NONRTRIC Overall Architecture
8
9 Summary
10 -------
11
12 The Non-RealTime RIC (RAN Intelligent Controller) is an Orchestration and Automation function described by the O-RAN Alliance for non-real-time intelligent management of RAN (Radio Access Network) functions.
13
14 The primary goal of the Non-RealTime RIC is to support non-real-time radio resource management, higher layer procedure optimization, policy optimization in RAN, and providing guidance, parameters, policies and AI/ML models to support the operation of near-RealTime RIC functions in the RAN to achieve higher-level non-real-time objectives.
15
16 Non-RealTime RIC functions include service and policy management and RAN analytics for the RAN.
17 The Non-RealTime RIC platform hosts and coordinates rApps (Non-RT RIC applications) to perform Non-RealTime RIC tasks.
18 The Non-RealTime RIC also hosts the new R1 interface (between rApps and SMO/Non-RealTime-RIC services).
19
20 The O-RAN-SC (OSC) NONRTRIC project provides concepts, architecture and reference implementations as defined and described by the `O-RAN Alliance <https://www.o-ran.org>`_ architecture.
21 The OSC NONRTRIC implementation communicates with near-RealTime RIC elements in the RAN via the A1 interface. Using the A1 interface the NONRTRIC will facilitate the provision of policies for individual UEs or groups of UEs; monitor and provide basic feedback on policy state from near-RealTime RICs; provide enrichment information as required by near-RealTime RICs; and facilitate ML model training, distribution and inference in cooperation with the near-RealTime RICs.
22 The OSC NONRTRIC hosts rApps, and coordinates all interactions between the rApp and underlying SMo by way of the R1 Interface. 
23
24 |archpic|
25
26 Find detailed description of the NONRTRIC project see the `O-RAN SC NONRTRIC Project Wiki <nonrtricwiki_>`_.
27
28 NONRTRIC components
29 -------------------
30
31 These are the components that make up the Non-RT-RIC:
32
33 * `Non-RT-RIC Control Panel <#non-rt-ric-control-panel-nonrtric-dashboard>`_.  (:doc:`Documentation site <controlpanel:index>`).
34 * `Information Coordinator Service <#information-coordination-service>`_.  (:doc:`Documentation site <informationcoordinatorservice:index>`).
35 * `A1 Policy Management Service <#a1-policy-management-service-from-onap-ccsdk>`_.  (:doc:`Documentation site <a1policymanagementservice:index>`).
36 * `A1 Policy Controller / Adapter <#a1-sdnc-controller-a1-adapter-controller-plugin>`_.
37 * `Near-RT RIC A1 Simulator <#a1-interface-near-rt-ric-simulator>`_.  (:doc:`Documentation site <simulator:index>`).
38 * `Non-RT-RIC (Spring Cloud) Service Gateway <#spring-cloud-service-gateway>`_.
39 * `Non-RT-RIC Service Exposure Security Architecture Prototyping <#service-exposure-security-architecture-prototyping>`_.  (:doc:`Documentation site <service-exposure/se-overview/>`). 
40 * `DMaaP/Kafka Information Producer Adapters <#dmaap-information-producer-adapters-kafka>`_.  (:doc:`Documentation site adapter <dmaapadapter:index>`),  (:doc:`Documentation site mediator <dmaapmediatorproducer:index>`).
41 * `Initial Non-RT-RIC App Catalogue <#initial-app-catalogue>`_.  (:doc:`Documentation site <rappcatalogue:index>`).
42 * `Initial K8S Helm Chart LCM Manager <#initial-kubernetes-helm-chart-lcm-manager>`_.  (:doc:`Documentation site <helmmanager:index>`).
43 * `Service Management & Exposure (SME) (CAPIF) <#service-management-and-exposure-capif>`_.  (:doc:`Documentation site <sme:index>`).
44 * `Authentication Support <#authentication-support-keycloak>`_.
45 * `RApp Manager Service <#rapp-manager-service>`__.  (:doc:`Documentation site <rappmanager:index>`).
46 * `RAN Performance Monitoring Functions (File-based PM) <#ran-performance-monitoring-functions-file-based-pm>`__   (:doc:`Documentation site <ranpm:index>`).
47 * `Test Framework <#non-rt-ric-test-framework>`_.
48 * `Use Cases: <#non-rt-ric-use-cases>`_
49
50   * "Helloworld" O-RU Fronthaul Recovery use case.  (:doc:`Documentation site <orufhrecovery:index>`).
51   * "Helloworld" O-DU Slice Assurance use case.  (:doc:`Documentation site <ransliceassurance:index>`).
52
53
54 Non-RT-RIC Control Panel / NONRTRIC Dashboard
55 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56
57 Graphical user interface.
58
59 - View and Manage A1 policies in the RAN (near-RT-RICs)
60 - Graphical A1 policy creation/editing is model-driven, based on policy type's JSON schema
61 - View and manage producers and jobs for the Information coordinator service
62 - Configure A1 Policy Management Service (e.g. add/remove near-rt-rics)
63 - Interacts with the A1-Policy Management Service & Information Coordination Service (REST NBIs) via Service Exposure gateway
64
65 Implementation:
66
67 - Frontend: Angular framework
68 - Repo: *portal/nonrtric-controlpanel*
69 - Documentation at the :doc:`NONRTRIC-Portal documentation site <controlpanel:index>`.
70
71 Information Coordination Service
72 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73
74 The ICS is a data subscription service which decouples data producers from data consumers. A data consumer can create a data subscription (Information Job) without any knowledge of its data producers (one subscription may involve several data producers). A data producer has the ability to produce one or several types of data (Information Type). One type of data can be produced by zero to many producers.
75
76 A data consumer can have several active data subscriptions (Information Job). One Information Job consists of the type of data to produce and additional parameters, which may be different for different data types. These parameters are not defined or limited by this service.
77
78 Maintains a registry of:
79
80 - Information Types / schemas
81 - Information Producers
82 - Information Consumers
83 - Information Jobs
84
85 The service is not involved in data delivery and hence does not put restrictions on this.
86
87 Implementation:
88
89 - Implemented as a Java Spring Boot application.
90 - Repo: *nonrtric/plt/informationcoordinatorservice*.
91 - Documentation at the :doc:`Information Coordination Service site <informationcoordinatorservice:index>`.
92
93 A1 Policy Management Service (from ONAP CCSDK)
94 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
95
96 A1 Controller Service above A1 Controller/Adapter that provides:
97
98 - Unified REST & DMaaP NBI APIs for managing A1 Policies in all near-RT-RICs.
99
100   - Query A1 Policy Types in near-RT-RICs.
101   - Create/Query/Update/Delete A1 Policy Instances in near-RT-RICs.
102   - Query Status for A1 Policy Instances.
103
104 Maintains (persistent) cache of RAN's A1 Policy information.
105
106 - Support RAN-wide view of A1 Policy information.
107 - Streamline A1 traffic.
108 - Enable (optional) re-synchronization after inconsistencies / near-RT-RIC restarts.
109 - Supports a large number of near-RT-RICs (& multi-version support).
110
111 - Converged ONAP & O-RAN-SC A1 Adapter/Controller functions in ONAP SDNC/CCSDK (Optionally deploy without A1 Adapter to connect direct to near-RT-RICs).
112 - Support for different Southbound connectors per near-RT-RIC - e.g. different A1 versions, different near-RT-RIC version, different A1 adapter/controllers supports different or proprietary A1 controllers/EMSs.
113
114 Implementation:
115
116 - Implemented as a Java Spring Boot application.
117 - Wiki: `A1 Policy Management Service in ONAP <https://wiki.onap.org/pages/viewpage.action?pageId=84672221>`_ .
118 - Repo: *nonrtric/plt/a1policymanagementservice*.
119 - Documentation at the :doc:`A1 Policy Management Service documentation site <a1policymanagementservice:index>`.
120
121 A1/SDNC Controller & A1 Adapter (Controller plugin)
122 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
123
124 Mediation point for A1 interface termination in SMO/NONRTRIC.
125
126 - Implemented as CCSDK OSGI Feature/Bundles.
127 - A1 REST southbound.
128 - RESTCONF Northbound.
129 - NETCONF YANG > RESTCONF adapter.
130 - SLI Mapping logic supported.
131 - Can be included in an any controller based on ONAP CCSDK.
132
133 Implementation:
134
135 - Repo: *nonrtric/plt/sdnca1controller*
136 - Wiki: `A1 Adapter/Controller Functions in ONAP <https://wiki.onap.org/pages/viewpage.action?pageId=84672221>`_ .
137
138 A1 Interface / Near-RT-RIC Simulator
139 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
140
141 Stateful A1 test stub.
142
143 - Used to create multiple stateful A1 providers (simulated near-rt-rics).
144 - Supports A1-Policy and A1-Enrichment Information.
145 - Swagger-based northbound interface, so easy to change the A1 profile exposed (e.g. A1 version, A1 Policy Types, A1-E1 consumers, etc).
146 - All A1-AP versions supported.
147
148 Implementation:
149
150 - Implemented as a Python application.
151 - Repo: *sim/a1-interface*.
152 - Documentation at the :doc:`A1 Simulator documentation site <simulator:index>`.
153
154 (Spring Cloud) Service Gateway
155 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
156 Support Apps to use A1 Services.
157
158 - `Spring Cloud Gateway <https://cloud.spring.io/spring-cloud-gateway>`_ provides the library to build a basic API gateway.
159 - Exposes A1 Policy Management Service & Information Coordinator Service.
160 - Additional predicates can be added in code or preferably in the Gateway yaml configuration.
161
162 Implementation:
163
164 - Implemented as a Java Spring Cloud application.
165 - Repo: *portal/nonrtric-controlpanel*.
166
167
168 Service Exposure Security Architecture Prototyping
169 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
170
171 Support Apps to use NONRTRIC, SMO and other App interfaces.
172 A building block for coming releases as the R1 Interface concept matures .
173
174 - Support dynamic registration and exposure of service interfaces to Non-RT-RIC applications (& NONRTRIC Control panel).
175 - The architecture and components are defined in :doc:`Non-RT RIC Security Architecture Prototyping (Documentation site) <service-exposure/se-overview/>`. 
176 - Works with the CAPIF `Service Management & Exposure (SME) <#service-management-and-exposure>`_. :doc:`Documentation site <sme:index>` functions.
177
178
179 DMaaP Information Producer Adapters (Kafka)
180 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
181
182 Configurable mediators to take information from DMaaP and Kafka and present it as a coordinated Information Producer.
183
184 These mediators/adapters are generic information producers, which register themselves as information producers of defined information types in Information Coordination Service (ICS).
185 The information types are defined in a configuration file.
186 Information jobs defined using ICS then allow information consumers to retrieve data from DMaaP MR or Kafka topics (accessing the ICS API).
187
188 There are two alternative implementations to allow Information Consumers to consume DMaaP or Kafka events as coordinated Information Jobs.
189
190 Implementation:
191
192 - Implementation in Java Spring (DMaaP Adapter), repo: *nonrtric/plt/dmaapadapter*, see :doc:`DMaaP Adapter documentation site <dmaapadapter:index>`.
193 - Implementation in Go (DMaaP Mediator Producer), repo: *nonrtric/plt/dmaapmediatorproducer*, see :doc:`DMaaP Mediator Producer documentation site <dmaapmediatorproducer:index>`.
194
195 Initial App Catalogue
196 ~~~~~~~~~~~~~~~~~~~~~
197
198 Register for Non-RT-RIC Apps.
199
200 - Non-RT-RIC Apps can be registered / queried.
201 - Limited functionality/integration for now.
202 - *More work required in coming releases as the rApp concept matures*.
203
204 Implementation:
205
206 - Implemented as a Java Spring Boot application and in Python.
207 - Repo: *nonrtric/plt/rappcatalogue*
208 - Documentation at the :doc:`rApp Catalogue documentation site <rappcatalogue:index>`.
209
210 Initial Kubernetes Helm Chart LCM Manager
211 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
212
213 Onboard, start, stop, and modify Non-RT-RIC App ÂµServices as Helm Charts.
214 *A building block for coming releases as the R-APP concept matures*.
215
216 - Interfaces that accepts Non-RT-RIC App ÂµServices Helm Charts.
217 - Support basic LCM operations.
218 - Onboard, Start, Stop, Modify, Monitor.
219 - Initial version co-developed with v. similar functions in ONAP.
220 - *Limited functionality/integration for now*.
221
222 Implementation:
223
224 - Implemented as a Java Spring Boot application.
225 - Repo: *nonrtric/plt/helmmanager*
226 - Documentation at the :doc:`Helm Manager documentation site <helmmanager:index>`.
227
228 Service Management and Exposure (CAPIF)
229 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
230
231 An initial implementation of the CAPIF Core service. It implements the following CAPIF APIs:
232
233 - API Provider Management
234 - Publish Service
235 - Discover Service
236 - API Invoker Management
237 - Security
238 - Events
239
240 Implementation:
241
242 - Implemented in Go
243 - Repo: *nonrtric/plt/sme*
244 - Documentation at the :doc:`Service Management & Exposure (SME) documentation site <sme:index>`.
245
246 Authentication Support (Keycloak)
247 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
248
249 The auth-token-fetch provides support for authentication.
250 It is intended to be used as a sidecar and does the authentication procedure, gets and saves the access token
251 in the local file system. This includes refresh of the token before it expires.
252 This means that the service only needs to read the token from a file.
253
254 It is tested using Keycloak as authentication provider.
255
256 .. image:: ./AuthSupport.png
257    :width: 500pt
258
259 So, a service just needs to read the token file and for instance insert it in the authorization header when using HTTP.
260 The file needs to be re-read if it has been updated.
261
262 The auth-token-fetch is configured by the following environment variables.
263
264 * CERT_PATH - the file path of the cert to use for TSL, example: security/tls.crt
265 * CERT_KEY_PATH - the file path of the private key file for the cert, example: "security/tls.key"
266 * ROOT_CA_CERTS_PATH - the file path of the trust store.
267 * CREDS_GRANT_TYPE - the grant_type used for authentication, example: client_credentials
268 * CREDS_CLIENT_SECRET - the secret/private shared key used for authentication
269 * CREDS_CLIENT_ID - the client id used for authentication
270 * OUTPUT_FILE - the path where the fetched authorization token is stored, example: "/tmp/authToken.txt"
271 * AUTH_SERVICE_URL - the URL to the authentication service (Keycloak)
272 * REFRESH_MARGIN_SECONDS - how long in advance before the authorization token expires it is refreshed
273
274 RApp Manager Service
275 ~~~~~~~~~~~~~~~~~~~~
276
277 Early version of a service to manage rApps and rApp instances. 
278
279 - Manages the entire lifecycle and state of rApp and thie instances
280 - Integrated with NONRTRIC Data Management & Exposure functions (ICS)
281 - Integrates with NONRTRIC Service registration and discovery functions (SME CAPIF)
282 - Also add new ONAP ACM participants to handle rApp composition elements
283
284 Implementation:
285
286 - Implemented as a Java Spring Boot application.
287 - Repo: *nonrtric/plt/rappmanager*
288 - Documentation at the :doc:`Non-RT RIC rApp Manager documentation site <rappmanager:index>`.
289
290 RAN Performance Monitoring Functions (File-based PM)
291 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
292
293 Functions to collect/parse/filter/store/forward file-based & event-based RAN PM data:
294
295 - End-to-end tool-chain to collection, parsing, filtering and delivery of file-based RAN PM observability data
296 - PM report data format defined by 3GPP (TS 32.432 and 3GPP TS 32.435)
297 - High performance, fully scalable
298 - Subscribers (e.g. rApps) can subscribe for chosen measurement types from specific resources in the network
299
300 Implementation:
301
302 - Implemented in Go, Java and Python
303 - Repo: *nonrtric/plt/ranpm*
304 - Documentation at the :doc:`Non-RT RIC RAN PM Usecase / Functions documentation site <ranpm:index>`.
305
306 Non-RT-RIC Test Framework
307 ~~~~~~~~~~~~~~~~~~~~~~~~~
308
309 A full test environment with extensive test cases/scripts can be found in the ``test`` directory in the *nonrtric* source code.
310
311 Non-RT-RIC Use Cases
312 ~~~~~~~~~~~~~~~~~~~~
313
314 "Helloworld" O-RU Fronthaul Recovery use case
315 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
316
317 A very simplified closed-loop rApp use case to re-establish front-haul connections between O-DUs and O-RUs if they fail. Not intended to to be 'real-world'.
318
319 Implementation:
320
321 - One version implemented in Python, one in Go as an Information Coordination Service Consumer, and one as an apex policy.
322 - Repo: *nonrtric/rapp/orufhrecovery*
323 - Documentation at the :doc:`O-RU Fronthaul Recovery documentation site <orufhrecovery:index>`.
324
325 "Helloworld" O-DU Slice Assurance use case
326 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
327
328 A very simplified closed-loop rApp use case to re-prioritize a RAN slice's radio resource allocation priority if sufficient throughput cannot be maintained. Not intended to to be 'real-world'.
329
330 Implementation:
331
332 - One version implemented in Go as a micro service, one in Go as an Information Coordination Service Consumer.
333 - Repo: *nonrtric/rapp/ransliceassurance*
334 - Documentation at the :doc:`O-DU Slice Assurance documentation site <ransliceassurance:index>`.