c82391d49ff7a5acbcaacc1cfca018bcc0580bde
[dcaegen2.git] / docs / sections / apis / ves-hv / index.rst
1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2 .. http://creativecommons.org/licenses/by/4.0
3
4 ========================
5 HV-VES (High Volume VES)
6 ========================
7
8
9 .. contents::
10     :depth: 4
11
12 ..
13
14 Overview
15 ========
16
17 Component description can be found under `HV-VES Collector`_.
18
19 .. _HV-VES Collector: ../../services/ves-hv/index.html
20
21 .. _tcp_endpoint:
22
23 TCP Endpoint
24 ============
25
26 HV-VES is exposed as NodePort service on Kubernetes cluster on port 30222/tcp.
27 By default, as of the Frankfurt release, all TCP communications are secured using
28 SSL/TLS. Plain, insecure TCP connections without socket data encryption can be enabled if needed.
29  (see ref:`ssl_tls_authorization`).
30  
31 Without TLS, client authentication/authorization is not possible. 
32 Connections are stream-based (as opposed to request-based) and long-running.
33
34 Communication is wrapped with thin Wire Transfer Protocol, which mainly provides delimitation.
35
36 .. literalinclude:: WTP.asn
37     :language: asn
38
39 Payload is binary-encoded, using Google Protocol Buffers (GPB) representation of the VES Event.
40
41 .. literalinclude:: VesEvent.proto
42     :language: protobuf
43
44 HV-VES makes routing decisions based on the content of the **domain** field or **stndDefinedNamespace** field in case of stndDefined events.
45
46 The PROTO file, which contains the VES CommonEventHeader, comes with a binary-type Payload (eventFields) parameter, where domain-specific
47 data should be placed. Domain-specific data are encoded as well with GPB. A domain-specific PROTO file is required to decode the data.
48
49 API towards DMaaP
50 =================
51
52 HV-VES Collector forwards incoming messages to a particular DMaaP Kafka topic based on the domain (or stndDefinedNamespace) and configuration. Every Kafka record is comprised of a key and a value. In case of HV-VES:
53
54 - **Kafka record key** is a GPB-encoded `CommonEventHeader`.
55 - **Kafka record value** is a GPB-encoded `VesEvent` (`CommonEventHeader` and domain-specific `eventFields`).
56
57 In 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.
58
59 By default, **HV-VES** will use routing defined in **k8s-hv-ves.yaml-template** in **dcaegen2/platform/blueprints project** when deployed using Cloudify.
60 In case of Helm deployment routing is defined in values.yaml file in HV-VES Helm Chart.
61
62
63 .. _supported_domains:
64
65 Supported domains
66 =================
67
68 Domains that are currently supported by HV-VES:
69
70 - perf3gpp - basic domain to Kafka topic mapping
71 - stndDefined - specific routing, when event has this domain, then stndDefinedNamespace field value is mapped to Kafka topic
72
73 For domains descriptions, see :ref:`domains_supported_by_hvves`
74
75 .. _hv_ves_behaviors:
76
77 HV-VES behaviors
78 ================
79
80 Connections 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.
81 Communication is wrapped with thin Wire Transfer Protocol, which mainly provides delimitation. Wire Transfer Protocol Frame:
82
83 - is dropped after decoding and validating and only GPB is used in further processing.
84 - 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.
85
86 HV-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.
87 Kafka topic for publishing events with specific domain can be configured through Consul service as described in :ref:`run_time_configuration`.
88 In case of Kafka service unavailability, the collector drops currently handled messages and disconnects the client.
89
90 Messages handling:
91
92 - HV-VES Collector skips messages with unknown/invalid GPB CommonEventHeader format.
93 - 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`).
94 - 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**).
95 - 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`.
96
97 .. 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.
98
99 - Skipped messages (for any of the above reasons) might not leave any trace in HV-VES logs.
100