Filip Krzywka | 4bb79b7 | 2018-09-25 10:57:17 +0200 | [diff] [blame] | 1 | .. This work is licensed under a Creative Commons Attribution 4.0 International License. |
| 2 | .. http://creativecommons.org/licenses/by/4.0 |
| 3 | |
kjaniak | 53ba170 | 2018-10-25 14:25:13 +0200 | [diff] [blame^] | 4 | .. _design: |
| 5 | |
Filip Krzywka | 4bb79b7 | 2018-09-25 10:57:17 +0200 | [diff] [blame] | 6 | Design |
| 7 | ====== |
| 8 | |
| 9 | |
| 10 | Compatibility aspects (VES-JSON) |
| 11 | -------------------------------- |
| 12 | |
kjaniak | 53ba170 | 2018-10-25 14:25:13 +0200 | [diff] [blame^] | 13 | HV-VES Collector is a high-volume variant of the existing VES (JSON) collector, and not a completely new collector. |
| 14 | HV-VES follows the VES-JSON schema as much as possible. |
Filip Krzywka | 4bb79b7 | 2018-09-25 10:57:17 +0200 | [diff] [blame] | 15 | |
kjaniak | 53ba170 | 2018-10-25 14:25:13 +0200 | [diff] [blame^] | 16 | - 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 Krzywka | 4bb79b7 | 2018-09-25 10:57:17 +0200 | [diff] [blame] | 20 | |
| 21 | Analytics applications impacts |
| 22 | |
kjaniak | 53ba170 | 2018-10-25 14:25:13 +0200 | [diff] [blame^] | 23 | - 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 Krzywka | 4bb79b7 | 2018-09-25 10:57:17 +0200 | [diff] [blame] | 26 | |
| 27 | Extendability |
| 28 | ------------- |
| 29 | |
kjaniak | 53ba170 | 2018-10-25 14:25:13 +0200 | [diff] [blame^] | 30 | HV-VES is designed to allow extending by adding new domain-specific proto files. |
Filip Krzywka | 4bb79b7 | 2018-09-25 10:57:17 +0200 | [diff] [blame] | 31 | |
kjaniak | 53ba170 | 2018-10-25 14:25:13 +0200 | [diff] [blame^] | 32 | The proto file (with the VES CommonHeader) comes with a binary-type **Payload** parameter, where domain-specific data should be placed. |
| 33 | Domain-specific data are encoded as well with GPB. A domain-specific proto file is required to decode the data. |
| 34 | This domain-specific proto has to be shared with analytics applications - HV-VES does not analyze domain-specific data. |
Filip Krzywka | 4bb79b7 | 2018-09-25 10:57:17 +0200 | [diff] [blame] | 35 | |
kjaniak | 53ba170 | 2018-10-25 14:25:13 +0200 | [diff] [blame^] | 36 | In order to support the RT-PM use-case, HV-VES includes a **perf3gpp** domain proto file. Within this domain, high volume data are expected to be reported to HV-VES collector. |
| 37 | Additional domains can be defined based on existing VES domains (like Fault, Heartbeat) or completely new domains. New domains can be added when needed. |
Filip Krzywka | 4bb79b7 | 2018-09-25 10:57:17 +0200 | [diff] [blame] | 38 | |
kjaniak | 53ba170 | 2018-10-25 14:25:13 +0200 | [diff] [blame^] | 39 | GPB proto files are backwards compatible, and a new domain can be added without affecting existing systems. |
Filip Krzywka | 4bb79b7 | 2018-09-25 10:57:17 +0200 | [diff] [blame] | 40 | |
kjaniak | 53ba170 | 2018-10-25 14:25:13 +0200 | [diff] [blame^] | 41 | Analytics applications have to be equipped with the new domain-specific proto file as well. |
| 42 | Currently, these additional, domain specific proto files can be added to respective repos of HV-VES collector. |
Filip Krzywka | 4bb79b7 | 2018-09-25 10:57:17 +0200 | [diff] [blame] | 43 | |
| 44 | Implementation 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. |
kjaniak | 53ba170 | 2018-10-25 14:25:13 +0200 | [diff] [blame^] | 49 | - 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 | |