blob: fb4fa2c7ca769d1edc6e2a70ff11e6399753d79e [file] [log] [blame]
Filip Krzywka4bb79b72018-09-25 10:57:17 +02001.. This work is licensed under a Creative Commons Attribution 4.0 International License.
2.. http://creativecommons.org/licenses/by/4.0
3
kjaniak53ba1702018-10-25 14:25:13 +02004.. _design:
5
Filip Krzywka4bb79b72018-09-25 10:57:17 +02006Design
7======
8
9
10Compatibility aspects (VES-JSON)
11--------------------------------
12
kjaniak53ba1702018-10-25 14:25:13 +020013HV-VES Collector is a high-volume variant of the existing VES (JSON) collector, and not a completely new collector.
14HV-VES follows the VES-JSON schema as much as possible.
Filip Krzywka4bb79b72018-09-25 10:57:17 +020015
kjaniak53ba1702018-10-25 14:25:13 +020016- HV-VES uses a Google Protocol Buffers (GPB, proto files) representation of the VES Common Header.
17- The proto files use most encoding effective types defined by GPB to cover Common Header fields.
18- HV-VES makes routing decisions based mostly on the content of the **Domain** parameter.
19- HV-VES allows to embed Payload of different types (by default perf3gpp domain is included).
Filip Krzywka4bb79b72018-09-25 10:57:17 +020020
21Analytics applications impacts
22
kjaniak53ba1702018-10-25 14:25:13 +020023- An analytics application operating on high-volume data needs to be prepared to read directly from Kafka.
24- An analytics application needs to operate on GPB encoded data in order to benefit from GPB encoding efficiencies.
25- It is assumed, that due to the nature of high volume data, there would have to be dedicated applications provided, able to operate on such volumes of data.
Filip Krzywka4bb79b72018-09-25 10:57:17 +020026
27Extendability
28-------------
29
kjaniak53ba1702018-10-25 14:25:13 +020030HV-VES is designed to allow extending by adding new domain-specific proto files.
Filip Krzywka4bb79b72018-09-25 10:57:17 +020031
kjaniak53ba1702018-10-25 14:25:13 +020032The proto file (with the VES CommonHeader) comes with a binary-type **Payload** parameter, where domain-specific data should be placed.
33Domain-specific data are encoded as well with GPB. A domain-specific proto file is required to decode the data.
34This domain-specific proto has to be shared with analytics applications - HV-VES does not analyze domain-specific data.
Filip Krzywka4bb79b72018-09-25 10:57:17 +020035
Filip Krzywka12acf3e2019-03-19 15:53:15 +010036In order to support the RT-PM use-case, HV-VES uses a **perf3gpp** domain proto file. Within this domain, high volume data are expected to be reported to HV-VES collector.
kjaniak53ba1702018-10-25 14:25:13 +020037Additional domains can be defined based on existing VES domains (like Fault, Heartbeat) or completely new domains. New domains can be added when needed.
Filip Krzywka4bb79b72018-09-25 10:57:17 +020038
kjaniak53ba1702018-10-25 14:25:13 +020039GPB proto files are backwards compatible, and a new domain can be added without affecting existing systems.
Filip Krzywka4bb79b72018-09-25 10:57:17 +020040
kjaniak53ba1702018-10-25 14:25:13 +020041Analytics applications have to be equipped with the new domain-specific proto file as well.
Filip Krzywka12acf3e2019-03-19 15:53:15 +010042Currently, these additional, domain specific proto files can be added to hv-ves-client protobuf library repository (artifactId: hvvesclient-protobuf).
Filip Krzywka4bb79b72018-09-25 10:57:17 +020043
44Implementation details
45----------------------
46
47- Project Reactor is used as a backbone of the internal architecture.
48- Netty is used by means of reactor-netty library.
kjaniak53ba1702018-10-25 14:25:13 +020049- Kotlin is used to write concise code with great interoperability with existing Java libraries.
50- Types defined in Λrrow library are also used when it improves readability or general cleanness of the code.
51
52