blob: b707d9fda8fa46876bda32c2e771d546caefeb8d [file] [log] [blame]
Piotr Jaszczyk19736a92018-09-24 11:27:58 +02001.. This work is licensed under a Creative Commons Attribution 4.0 International License.
2.. http://creativecommons.org/licenses/by/4.0
3
4========================
5HV-VES (High Volume VES)
6========================
7
Piotr Jaszczyk2df4b8c2018-10-05 10:56:38 +02008:Date: 2018-10-05
Piotr Jaszczyk19736a92018-09-24 11:27:58 +02009
10.. contents::
kjaniak53ba1702018-10-25 14:25:13 +020011 :depth: 4
Piotr Jaszczyk19736a92018-09-24 11:27:58 +020012..
13
14Overview
15========
16
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020017Component description can be found under `HV-VES Collector`_.
18
Piotr Jaszczyk2df4b8c2018-10-05 10:56:38 +020019.. _HV-VES Collector: ../../services/ves-hv/index.html
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020020
kjaniak53ba1702018-10-25 14:25:13 +020021.. _tcp_endpoint:
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020022
23TCP Endpoint
24============
25
26HV-VES is exposed as NodePort service on Kubernetes cluster on port 30222/tcp.
kjaniak53ba1702018-10-25 14:25:13 +020027It uses plain, insecure TCP connection without socket data encryption. In Casablanca release, there is an experimental option to enable SSL/TLS (see :ref:`authorization`).
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020028Without TLS client authentication/authorization is not possible.
kjaniak53ba1702018-10-25 14:25:13 +020029Connections are stream-based (as opposed to request-based) and long-running.
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020030
Piotr Jaszczyk2df4b8c2018-10-05 10:56:38 +020031Communication is wrapped with thin Wire Transfer Protocol, which mainly provides delimitation.
32
33.. literalinclude:: WTP.asn
34 :language: asn
35
kjaniak53ba1702018-10-25 14:25:13 +020036Payload is binary-encoded, using Google Protocol Buffers (GPB) representation of the VES Event.
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020037
38.. literalinclude:: VesEvent.proto
39 :language: protobuf
40
kjaniak53ba1702018-10-25 14:25:13 +020041HV-VES makes routing decisions based mostly on the content of the **Domain** parameter in the VES Common Event Header.
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020042
kjaniak53ba1702018-10-25 14:25:13 +020043The PROTO file, which contains the VES CommonEventHeader, comes with a binary-type Payload (eventFields) parameter, where domain-specific
44data should be placed. Domain-specific data are encoded as well with GPB. A domain-specific PROTO file is required to decode the data.
45
46Domain **perf3gpp**
47===================
48
49The purpose of the **perf3gpp** domain is to deliver performance measurements from a network function (NF) to ONAP in 3GPP format.
50The first application of this domain is frequent periodic delivery of structured RAN PM data commonly referred to as Real Time PM (RTPM).
51The equipment sends an event right after collecting the PM data for a granularity period.
52
53The characteristics of each event in the **perf3gpp** domain:
54
55- Single measured entity, for example, BTS
56- Single granularity period (collection *begin time* and *duration*)
57- Optional top-level grouping in one or more PM groups
58- Grouping in one or more measured objects, for example, cells
59- One or more reported PM values for each measured object
60
61Due to the single granularity period per event, single equipment supporting multiple concurrent granularity periods might send more than one event at a given reporting time.
62
63The **perf3gpp** domain is based on 3GPP specifications:
64
65- `3GPP TS 28.550 <http://www.3gpp.org/ftp//Specs/archive/28_series/28.550/>`_
66- `3GPP TS 32.431 <http://www.3gpp.org/ftp//Specs/archive/32_series/32.431/>`_
67- `3GPP TS 32.436 <http://www.3gpp.org/ftp//Specs/archive/32_series/32.436/>`_
68
69The event structure is changed in comparison to the one presented in 3GPP technical specifications. The 3GPP structure is enhanced to provide support for efficient transport.
70
71Definitions for the **perf3gpp** domain are stored in Perf3gppFields.proto and MeasDataCollection.proto, listed below:
72
73.. literalinclude:: Perf3gppFields.proto
74 :language: protobuf
75
76.. literalinclude:: MeasDataCollection.proto
77 :language: protobuf
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020078
79
kjaniak53ba1702018-10-25 14:25:13 +020080API towards DMaaP
81=================
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020082
kjaniak53ba1702018-10-25 14:25:13 +020083HV-VES Collector forwards incoming messages to a particular DMaaP Kafka topic based on the domain and configuration. Every Kafka record is comprised of a key and a value. In case of HV-VES:
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020084
kjaniak53ba1702018-10-25 14:25:13 +020085- **Kafka record key** is a GPB-encoded `CommonEventHeader`.
86- **Kafka record value** is a GPB-encoded `VesEvent` (`CommonEventHeader` and domain-specific `eventFields`).
87
88In both cases raw bytes might be extracted using ``org.apache.kafka.common.serialization.ByteArrayDeserializer``. The resulting bytes might be further passed to ``parseFrom`` methods included in classes generated from GPB definitions. WTP is not used here - it is only used in communication between PNF/VNF and the collector.
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020089
90
kjaniak53ba1702018-10-25 14:25:13 +020091.. _hv_ves_behaviors:
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020092
kjaniak53ba1702018-10-25 14:25:13 +020093HV-VES behaviors
94================
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020095
kjaniak53ba1702018-10-25 14:25:13 +020096Connections with HV-VES are stream-based (as opposed to request-based) and long-running. In case of interrupted or closed connection, the collector logs such event but does not try to reconnect to client.
97Communication is wrapped with thin Wire Transfer Protocol, which mainly provides delimitation. Wire Transfer Protocol Frame:
Piotr Jaszczyk19736a92018-09-24 11:27:58 +020098
kjaniak53ba1702018-10-25 14:25:13 +020099- is dropped after decoding and validating and only GPB is used in further processing.
100- has to start with **MARKER_BYTE**, as defined in protocol specification (see :ref:`tcp_endpoint`). If **MARKER_BYTE** is invalid, HV-VES disconnects from client.
101
102HV-VES decodes only CommonEventHeader from GPB message received. Collector does not decode or validate the rest of the GPB message and publishes it to Kafka topic intact.
103Kafka topic for publishing events with specific domain can be configured through Consul service as described in :ref:`run_time_configuration`.
104In case of Kafka service unavailability, the collector drops currently handled messages and disconnects the client.
105
106Messages handling:
107
108- HV-VES Collector skips messages with unknown/invalid GPB CommonEventHeader format.
109- HV-VES Collector skips messages with unsupported domain. Domain is unsupported if there is no route for it in configuration (see :ref:`run_time_configuration`).
110- HV-VES Collector skips messages with invalid Wire Frame format, unsupported WTP version or inconsistencies of data in the frame (other than invalid **MARKER_BYTE**).
111- HV-VES Collector interrupts connection when it encounters a message with too big GPB payload. Default maximum size and ways to change it are described in :ref:`deployment`.
112
113.. note:: xNF (VNF/PNF) can split messages bigger than 1 MiB and set `sequence` field in CommonEventHeader accordingly. It is advised to use smaller than 1 MiB messages for GPBs encoding/decoding efficiency.
114
115- Skipped messages (for any of the above reasons) might not leave any trace in HV-VES logs.