blob: c3ccfa0ccf1b9db31464d348772a878449af5813 [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 Jaszczyk19736a92018-09-24 11:27:58 +02008
9.. contents::
kjaniak53ba1702018-10-25 14:25:13 +020010 :depth: 4
Jakub Dudycze6b42892018-11-05 16:32:19 +010011
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.
VENKATESH KUMAR7cfaea22020-04-22 17:31:32 -040027By default, as of the Frankfurt release, all TCP communications are secured using
28SSL/TLS. Plain, insecure TCP connections without socket data encryption can be enabled if needed.
29 (see ref:`ssl_tls_authorization`).
30
31Without TLS, client authentication/authorization is not possible.
kjaniak53ba1702018-10-25 14:25:13 +020032Connections are stream-based (as opposed to request-based) and long-running.
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020033
Piotr Jaszczyk2df4b8c2018-10-05 10:56:38 +020034Communication is wrapped with thin Wire Transfer Protocol, which mainly provides delimitation.
35
36.. literalinclude:: WTP.asn
37 :language: asn
38
kjaniak53ba1702018-10-25 14:25:13 +020039Payload is binary-encoded, using Google Protocol Buffers (GPB) representation of the VES Event.
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020040
41.. literalinclude:: VesEvent.proto
42 :language: protobuf
43
kjaniak53ba1702018-10-25 14:25:13 +020044HV-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 +020045
kjaniak53ba1702018-10-25 14:25:13 +020046The PROTO file, which contains the VES CommonEventHeader, comes with a binary-type Payload (eventFields) parameter, where domain-specific
47data should be placed. Domain-specific data are encoded as well with GPB. A domain-specific PROTO file is required to decode the data.
48
kjaniak53ba1702018-10-25 14:25:13 +020049API towards DMaaP
50=================
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020051
kjaniak53ba1702018-10-25 14:25:13 +020052HV-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 +020053
kjaniak53ba1702018-10-25 14:25:13 +020054- **Kafka record key** is a GPB-encoded `CommonEventHeader`.
55- **Kafka record value** is a GPB-encoded `VesEvent` (`CommonEventHeader` and domain-specific `eventFields`).
56
57In 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 +020058
Jakub Dudycz0c997922019-05-09 13:17:34 +020059By default, **HV-VES** will use routing defined in **k8s-hv-ves.yaml-template** in **dcaegen2/platform/blueprints project**.
60Currently there is one domain->topic mapping defined: perf3gpp->HV_VES_PERF3GPP
Jakub Dudycze6b42892018-11-05 16:32:19 +010061
Filip Krzywka566342c2019-03-29 11:25:07 +010062
63.. _supported_domains:
64
Jakub Dudycze6b42892018-11-05 16:32:19 +010065Supported domains
66=================
67
Jakub Dudycz0c997922019-05-09 13:17:34 +020068As for now **HV-VES** supports only **perf3gpp** domain
Jakub Dudycze6b42892018-11-05 16:32:19 +010069
Filip Krzywka566342c2019-03-29 11:25:07 +010070For domains descriptions, see :ref:`domains_supported_by_hvves`
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020071
kjaniak53ba1702018-10-25 14:25:13 +020072.. _hv_ves_behaviors:
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020073
kjaniak53ba1702018-10-25 14:25:13 +020074HV-VES behaviors
75================
Filip Krzywkacbd2ded2018-09-25 14:43:18 +020076
kjaniak53ba1702018-10-25 14:25:13 +020077Connections 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.
78Communication is wrapped with thin Wire Transfer Protocol, which mainly provides delimitation. Wire Transfer Protocol Frame:
Piotr Jaszczyk19736a92018-09-24 11:27:58 +020079
kjaniak53ba1702018-10-25 14:25:13 +020080- is dropped after decoding and validating and only GPB is used in further processing.
81- 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.
82
83HV-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.
84Kafka topic for publishing events with specific domain can be configured through Consul service as described in :ref:`run_time_configuration`.
85In case of Kafka service unavailability, the collector drops currently handled messages and disconnects the client.
86
87Messages handling:
88
89- HV-VES Collector skips messages with unknown/invalid GPB CommonEventHeader format.
90- 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`).
91- 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**).
92- 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`.
93
94.. 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.
95
96- Skipped messages (for any of the above reasons) might not leave any trace in HV-VES logs.
Jakub Dudycze6b42892018-11-05 16:32:19 +010097