From c138c406613a69e46a151e6a164430555894213e Mon Sep 17 00:00:00 2001 From: Vasil Vasilev Date: Thu, 5 Oct 2023 17:29:12 +0300 Subject: [PATCH 1/3] Implement benchmark-tool, based on k6-runner Signed-off-by: Vasil Vasilev --- benchmark-tool/README.md | 367 ++++++++++++++ benchmark-tool/kubernetes/README.md | 210 ++++++++ .../kubernetes/k6-ditto-benchmark-test.yaml | 330 +++++++++++++ benchmark-tool/kubernetes/mmock.yaml | 34 ++ benchmark-tool/mmock/default.yaml | 19 + benchmark-tool/mmock/live_messages.yaml | 22 + benchmark-tool/test-cluster.env | 59 +++ benchmark-tool/test-local.env | 82 +++ benchmark-tool/test/common.js | 124 +++++ benchmark-tool/test/device-live-message.js | 24 + benchmark-tool/test/http-util.js | 383 +++++++++++++++ benchmark-tool/test/k6-test.js | 201 ++++++++ benchmark-tool/test/kafka-util.js | 130 +++++ benchmark-tool/test/modify-thing.js | 20 + benchmark-tool/test/read-thing.js | 24 + benchmark-tool/test/search-thing.js | 24 + benchmark-tool/test/str-util.js | 17 + benchmark-tool/test/warmup.js | 46 ++ .../_posts/2023-08-23-ditto-benchmark.md | 465 ++++++++++++++++++ .../800/gateway.png | Bin 0 -> 50994 bytes .../device-live-messages-scenario/800/gc.png | Bin 0 -> 68708 bytes .../modify-things-scenario/800/outbound.png | Bin 0 -> 26101 bytes .../read-things-scenario/3000/gateway.png | Bin 0 -> 65994 bytes .../read-things-scenario/3000/gc.png | Bin 0 -> 40135 bytes .../search-things-scenario/1800/gateway.png | Bin 0 -> 59170 bytes .../search-things-scenario/1800/gc.png | Bin 0 -> 64539 bytes 26 files changed, 2581 insertions(+) create mode 100644 benchmark-tool/README.md create mode 100644 benchmark-tool/kubernetes/README.md create mode 100644 benchmark-tool/kubernetes/k6-ditto-benchmark-test.yaml create mode 100644 benchmark-tool/kubernetes/mmock.yaml create mode 100644 benchmark-tool/mmock/default.yaml create mode 100644 benchmark-tool/mmock/live_messages.yaml create mode 100644 benchmark-tool/test-cluster.env create mode 100644 benchmark-tool/test-local.env create mode 100644 benchmark-tool/test/common.js create mode 100644 benchmark-tool/test/device-live-message.js create mode 100644 benchmark-tool/test/http-util.js create mode 100644 benchmark-tool/test/k6-test.js create mode 100644 benchmark-tool/test/kafka-util.js create mode 100644 benchmark-tool/test/modify-thing.js create mode 100644 benchmark-tool/test/read-thing.js create mode 100644 benchmark-tool/test/search-thing.js create mode 100644 benchmark-tool/test/str-util.js create mode 100644 benchmark-tool/test/warmup.js create mode 100644 documentation/src/main/resources/_posts/2023-08-23-ditto-benchmark.md create mode 100644 documentation/src/main/resources/images/blog/benchmark/device-live-messages-scenario/800/gateway.png create mode 100644 documentation/src/main/resources/images/blog/benchmark/device-live-messages-scenario/800/gc.png create mode 100644 documentation/src/main/resources/images/blog/benchmark/modify-things-scenario/800/outbound.png create mode 100644 documentation/src/main/resources/images/blog/benchmark/read-things-scenario/3000/gateway.png create mode 100644 documentation/src/main/resources/images/blog/benchmark/read-things-scenario/3000/gc.png create mode 100644 documentation/src/main/resources/images/blog/benchmark/search-things-scenario/1800/gateway.png create mode 100644 documentation/src/main/resources/images/blog/benchmark/search-things-scenario/1800/gc.png diff --git a/benchmark-tool/README.md b/benchmark-tool/README.md new file mode 100644 index 0000000000..d7aa9069c8 --- /dev/null +++ b/benchmark-tool/README.md @@ -0,0 +1,367 @@ +The benchmark-tool is used to run benchmark tests on ditto. + +It is implemented using the load-testing tool [k6](https://github.com/grafana/k6) with the [xk6-kafka extension](https://github.com/mostafa/xk6-kafka). + +[MMock](https://github.com/jmartin82/mmock) is used to mock http responses, it exposes 2 endpoints that are configurable via mmock/default.yaml and mmock/live_messages.yaml. Default values are /:thingId and /live_messages and they are used to publish [modified twin events](https://eclipse.dev/ditto/protocol-specification-things-create-or-modify.html#event-1) and [device live messages](https://eclipse.dev/ditto/protocol-twinlive.html#live) sent via HTTP POST request. + +###### The benchmark test consists of 4 tests available to run, called scenarios: + +- **READ_THINGS** - read things via HTTP ( get things by id ) + +- **SEARCH_THINGS** - search things via HTTP ( get things by applying search filter ) + +- **MODIFY_THINGS** - Modify things by sending ditto protocol [modify messages](https://eclipse.dev/ditto/protocol-specification-things-create-or-modify.html#create-or-modify-a-thing) to specfic kafka topic. Ditto kafka connection is reading from this topic and creates [modify commands](https://eclipse.dev/ditto/basic-signals-command.html#modify-commands). [Ditto HTTP push connection](https://eclipse.dev/ditto/connectivity-protocol-bindings-http.html) is configured in ditto, which forwards the [modified twin events](https://eclipse.dev/ditto/protocol-specification-things-create-or-modify.html#event-1) from topic **/things/twin/events?filter=eq(topic:action,'modified')** to a monster mock endpoint, which replies with HTTP status code 204. + +- **DEVICE_LIVE_MESSAGES** - Send [live messages](https://eclipse.dev/ditto/protocol-twinlive.html#live) to things via HTTP. [Ditto HTTP push connection](https://eclipse.dev/ditto/connectivity-protocol-bindings-http.html) connection is configured in ditto, which sends events from topic **/things/live/messages** to a monster mock endpoint, which replies with predefined ditto protocol message. + +Also, there is a special scenario called **WARMUP**, which is used to warmup the system, by executing a single read request for each thing, which will cause them to get cached. + +# Getting started: + +## K6 is configurable via environment variables and the following must be set, in order to run the test(sample variables in [test-local.env](https://github.boschdevcloud.com/bosch-iot-things/ditto/blob/master/benchmark-tool/test-local.env) file): + +## K6 test related + +| Name | Description | +| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| SETUP_TIMEOUT | Specify how long the k6 setup() function is allow to run before it's terminated | +| TEARDOWN_TIMEOUT | Specify how long the k6 teardown() function is allowed to run before it's terminated | +| THINGS_NAMESPACE | Namepsace to use for created ditto things | +| THINGS_ID_TEMPLATE | Things id template, f.e. 'my-thing-{0}' | +| THINGS_START_INDEX | Things start index, used in template, f.e.  if start index is 1, created things have name of: 'my-thing-1', 'my-thing-2', etc. | +| CREATE_THINGS_BATCH_SIZE | Creating things is done via implicitThingCreationMapper via kafka connection. The kafka messages are sent in batches and this variable sets the batch size. | +| CREATE_THINGS | If the test should create things, before executing the scenarios (0/1) | +| DELETE_THINGS | If the test should delete the things, after executing the scenarios (0/1) | +| KAFKA_PRODUCER_LOGGER_ENABLED | K6 kafka producer logger enabled (0/1) | +| KAFKA_CONSUMER_LOGGER_ENABLED | K6 kafka consumer logger enabled (0/1) | +| CREATE_DITTO_CONNECTIONS | If the test should create the needed for scenarios ditto connections, before executing the scenarios | +| DELETE_DITTO_CONNECTIONS | If the test should delete the needed for scenarios ditto connections, after executing the scenarios | +| SCENARIOS_TO_RUN | Array of scenarios names that should run, available options is: WARMUP, DEVICE_LIVE_MESSAGES, SERACH_THINGS, READ_THINGS, MODIFY_THINGS | +| LOG_REMAINING | Log the remaining things that need to be created. Useful for debugging purposes | +| BATCH_SIZE | Max number of simultaneous connections of a k6 http.batch() call, which is used for warming up things | + +## Ditto related + +| Name | Description | +| ------------------------------- | ---------------------------------- | +| DITO_API_URI | Ditto api url | +| DITTO_AUTH_CONTEXT_HEADER | Authorization context header name | +| DITTO_AUTH_CONTEXT_HEADER_VALUE | Authorization context header value | + +## Kafka related + +| Name | Description | +| ----------------------- | -------------------------------- | +| KAFKA_BOOTSTRAP_SERVERS | Array of kafka bootstrap servers | + +## Scenarios related + +###### WARMUP + +| Name | Description | +| ------------------- | -------------------------------------------------------------------------------------------- | +| WARMUP_MAX_DURATION | The maximum duration of warmup scenario. After, the scenario will be forcefully stopped | +| WARMUP_START_TIME | Time offset since the start of the test, at which point this scenario should begin execution | +| WARMUP_VUS | An integer value specifying the number of VUs to run concurrently | + +###### Every other scenario has the same config variables, created by suffixing the variable name with the name of the scenario, f.e. SEARCH_THINGS_DURATION + +| Name | Description | +| ------------------ | -------------------------------------------------------------------------------------------------- | +| _DURATION | Total scenario duration. | +| _PER_SECOND | Number of requests to execute per second. For kafka scenarios number of kafka messages per second. | +| _PRE_ALLOCATED_VUS | Number of VUs to pre-allocate before scenario start to preserve runtime resources. | +| _MAX_VUS | Maximum number of VUs to allow during the scenario run. | +| _START_TIME | Time offset since the start of the test, at which point this scenario should begin execution. | + +###### Ditto kafka connections + +| Name | Description | +| ------------------------------------------- | ----------------------------------------------------------------------------- | +| KAFKA_CONNECTION_QOS | Ditto kafka connection qos value (0/1) | +| KAFKA_CONNECTION_CUSTOM_ACK | Ditto kafka connection custom acknowledge name | +| KAFKA_SOURCE_CONNECTION_CLIENT_COUNT | Ditto source (consumer) kafka connection client count | +| KAFKA_TARGET_CONNECTION_CLIENT_COUNT | Ditto target (producer) kafka connection client count | +| CREATE_UPDATE_THING_SOURCE_TOPIC | Kafka topic for sending create/update messages to ditto source connection | +| CREATE_UPDATE_THING_SOURCE_TOPIC_PARTITIONS | Number of partitions for the create/update kafka topic | +| CREATE_UPDATE_THING_REPLY_TOPIC | Kafka topic for ditto target connection, replying with 'thing created' events | +| CREATE_UPDATE_THING_REPLY_TOPIC_PARTITIONS | Number of partitions for the create/update reply kafka topic | +| CREATE_UPDATE_THING_CONSUMER_GROUP_ID | K6 kafka consumer group id | + +###### Ditto HTTP Push connection + +| Name | Description | +| ---------------------------------- | ------------------------------------------------------------------------- | +| HTTP_PUSH_CONNECTION_CLIENT_COUNT | Ditto HTTP push connection client count | +| HTTP_PUSH_CONNECTION_PARALLELISM | Ditto HTTP push connection parallelism | +| PUSH_ENDPOINT_URI | Ditto HTTP push connection endpoint uri | +| PUSH_ENDPOINT_EVENTS_MODIFIED_PATH | Ditto HTTP push connection target address for thing modified event | +| PUSH_ENDPOINT_LIVE_MESSAGE_PATH | Ditto HTTP push connection target address for things live messages events | + +## Test lifecycle + +The test consists of 4 lifecycle stages: **init**, **setup**, **VU code** and **teardown** + +**Init** + +1. Parses all environment variables + +2. Creates global kafka producer + +**Setup** + +1. Creates kafka topics if **CREATE_DITTO_CONNECTIONS** env var is **1** + +2. Creates ditto connections ( kafka and http push connections ) if **CREATE_DITTO_CONNECTIONS** env var is **1** + +3. Creates things, if **CREATE_THINGS** env var is **1** + +**VU code** - the stage at which the scenarios get executed + +**Teardown** + +1. Deletes things, if **DELETE_THINGS** env var is **1** + +2. Deletes ditto connections ( ditto kafka, ditto http push connections ) if **DELETE_DITTO_CONNECTIONS** env var is **1** + +3. Deletes kafka topics if **DELETE_DITTO_CONNECTIONS** env var is **1** + +## Creating things + +To create things, the following env variables must be set: + +```bash +CREATE_THINGS=1 +CREATE_DITTO_CONNECTIONS=1 +``` + +**Thing creation will run before any scenario is ran.** + +The benchmark-test tool creates two ditto kafka connections, 'source' and 'target', 'source' is configured with implicitThingCreation payload mapper, which reads from a topic(configurable by **CREATE_UPDATE_THING_SOURCE_TOPIC** env var), and 'target' listens for [thing created]([Things - Create-Or-Modify protocol specification • Eclipse Ditto™ • a digital twin framework](https://eclipse.dev/ditto/protocol-specification-things-create-or-modify.html#event)) event and writes to another topic(configurable by **CREATE_UPDATE_THING_TARGET_TOPIC** env var). Then the test creates a kafka producer, which sends the 'create thing' messages to the 'source' topic and a kafka consumer, which reads the [thing created]([Things - Create-Or-Modify protocol specification • Eclipse Ditto™ • a digital twin framework](https://eclipse.dev/ditto/protocol-specification-things-create-or-modify.html#event)) events and verifies the things are created. + +The kafka 'source' connection looks like the following: + +```json +{ + "id": "4cd191cc-aabb-4965-a1b4-dfe8ae8674bc", + "name": "kafka-source", + "connectionType": "kafka", + "connectionStatus": "open", + "uri": "tcp://192.168.16.2:19092", + "sources": [ + { + "addresses": [ + "create-update" + ], + "consumerCount": 1, + "qos": 0, + "authorizationContext": [ + "nginx:ditto" + ], + "enforcement": { + "input": "{{ header:device_id }}", + "filters": [ + "{{ entity:id }}" + ] + }, + "headerMapping": {}, + "payloadMapping": [ + "implicitThingCreation", + "ditto" + ], + "replyTarget": { + "enabled": false + } + } + ], + "targets": [], + "clientCount": 1, + "failoverEnabled": true, + "validateCertificates": true, + "processorPoolSize": 1, + "specificConfig": { + "saslMechanism": "plain", + "bootstrapServers": "192.168.16.2:19092, 192.168.16.3:19092, 192.168.16.4:19092" + }, + "mappingDefinitions": { + "ditto": { + "mappingEngine": "Ditto", + "options": { + "thingId": "{{ header:device_id }}" + }, + "incomingConditions": { + "sampleCondition": "fn:filter(header:ditto_message,'exists')" + } + }, + "implicitThingCreation": { + "mappingEngine": "ImplicitThingCreation", + "options": { + "thing": { + "thingId": "{{ header:device_id }}", + "_policy": { + "entries": { + "DEVICE": { + "subjects": { + "nginx:ditto": { + "type": "does-not-matter" + } + }, + "resources": { + "policy:/": { + "revoke": [], + "grant": [ + "READ", + "WRITE" + ] + }, + "thing:/": { + "revoke": [], + "grant": [ + "READ", + "WRITE" + ] + }, + "message:/": { + "revoke": [], + "grant": [ + "READ", + "WRITE" + ] + } + } + } + } + }, + "definition": "org.eclipse.ditto:coffeebrewer:0.1.0", + "attributes": { + "location": "test location", + "model": "Speaking coffee machine" + }, + "features": { + "coffee-brewer": { + "properties": { + "brewed-coffees": 0 + } + } + } + } + }, + "incomingConditions": { + "behindGateway": "fn:filter(header:create_thing, 'exists')" + } + } + }, + "tags": [] +} +``` + +The kafka 'target' connection looks like the following: + +```json +{ + "id": "21076098-28e9-416c-8ef0-6c86b5758c27", + "name": "kafka-reply", + "connectionType": "kafka", + "connectionStatus": "open", + "uri": "tcp://192.168.16.2:19092", + "sources": [], + "targets": [ + { + "address": "create-update-reply/{{ thing:id }}", + "topics": [ + "_/_/things/twin/events?filter=eq(topic:action,'created')" + ], + "authorizationContext": [ + "nginx:ditto" + ], + "headerMapping": {} + } + ], + "clientCount": 1, + "failoverEnabled": true, + "validateCertificates": true, + "processorPoolSize": 1, + "specificConfig": { + "saslMechanism": "plain", + "bootstrapServers": "192.168.16.2:19092, 192.168.16.3:19092, 192.168.16.4:19092" + }, + "tags": [] +} +``` + +## Running the test + +###### Running the test locally + +Prerequisites: + +- Running ditto + +- Running kafka cluster with topic deletion enabled + +- Running Monster mock instance ( config for mmock is inside the mmock directory ) + +- xk6 kafka extension binary + +First export all the environment variables, needed for the test: + +```bash +set -a +. test.env +``` + +Then, to run the test: + +```bash +${xk6-kakfa-bin} run test/k6-test.js +``` + +Logs and results are on the terminal standart output. + +###### Running the test inside kubernetes cluster + +Prerequisites: + +- Running kubernetes cluster + +- Running kafka cluster with topic deletion disabled + +- Running ditto inside the cluster, using the ditto helm chart https://github.com/eclipse-ditto/ditto/tree/master/deployment/helm/ditto + +- Deploy the k6 operator [GitHub - grafana/k6-operator: An operator for running distributed k6 tests.](https://github.com/grafana/k6-operator)[GitHub - grafana/k6-operator: An operator for running distributed k6 tests.](https://github.com/grafana/k6-operator) + +- Create config map for mmock from the config files inside **mmock** directory: + + ```bash + kubectl create configmap mmock-config --from-file mmock/ + ``` + +- Running Monster mock instance inside the cluster (kubernetes resource inside kubernetes directory) + +Needed kubernetes resources lie inside the kubernetes directory. + +- **k6-test-configmap-cr.yaml** - custom k6 resource, includes all env variables needed for the test, that are inside test.env file + +- **mmock-pvc.yaml** - Persistent volme claim for monster mock, use to copy the mmock configuration to the created PV, in order to mount it inside the mmock instance. + +- **mmock.yaml** - Pod definition for monster mock + +K6 custom resource gets the source code for the test from a config map, that must be created: + +```bash + kubectl create configmap k6-test --from-file test/ +``` + +K6 custom resource reads env variables from config map that must be created: + +```bash +kubectl create configmap k6-ditto-benchmark --from-env-file test-cluster.env +``` + +After all is set, create the k6 custom resource for the test: + +```bash +kubectl create -f k6-ditto-benchmark-test.yaml +``` + +Logs of the k6 test can be inspected from the pod **k6-ditto-benchmark-test-1-xxxx** diff --git a/benchmark-tool/kubernetes/README.md b/benchmark-tool/kubernetes/README.md new file mode 100644 index 0000000000..06df279c04 --- /dev/null +++ b/benchmark-tool/kubernetes/README.md @@ -0,0 +1,210 @@ +This benchmark is done via the load-testing tool k6 - https://github.com/grafana/k6 with the xk6-kafka extension - https://github.com/mostafa/xk6-kafka + +Monster mock is used to mock http responses, it exposes 2 endpoints that are configurable via mmock/default.yaml and mmock/live_messages.yaml. Default values are /:thingId and /live_messages and they are used to publish modified things events and device live messages sent via HTTP POST request. + +The k6 benchmark test consists of 5 tests available to run, called scenarios: + +- DEVICE_LIVE_MESSAGES - Send live messages to things via HTTP. Ditto HTTP push connection is configured in ditto, which sends events from topic _**/_/things/live/messages** to a monster mock endpoint, which replies with predefined ditto protocol message. + +- SEARCH_THINGS - search things via HTTP ( get things by applying filter ) + +- READ_THINGS - read things via HTTP ( get things by id ) + +- MODIFY_THINGS - Modify things by sending kafka messages to specfic topic. Ditto kafka connection is reading from this topic and processes the messages. Ditto HTTP push connection is configured in ditto, which sends events from topic **_/_/things/twin/events?filter=eq(topic:action,'modified'** to a monster mock endpoint, which replies with HTTP status code 204. + +Also, there is a special scenario called Warmup, which is used to warmup the system, by executing a single read request for each thing, which will cause them to get cached. + +# Getting started: + +## ## K6 is configurable via environment variables and the following must be set, in order to run the test: + +## K6 test related + +| Name | Description | +| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| SETUP_TIMEOUT | Specify how long the k6 setup() function is allow to run before it's terminated | +| TEARDOWN_TIMEOUT | Specify how long the k6 teardown() function is allowed to run before it's terminated | +| THINGS_NAMESPACE | remove?Namepsace to use for created ditto things | +| THINGS_ID_TEMPLATE | remove?Things id template, f.e. 'my-thing-{0}' | +| THINGS_START_INDEX | remove?Things start index, used in template, f.e.  if start index is 1, created things have name of: 'my-thing-1', 'my-thing-2', etc. | +| CREATE_THINGS_BATCH_SIZE | Creating things is done via implicitThingCreationMapper via kafka connection. The kafka messages are sent in batches and this variable sets the batch size. | +| CREATE_THINGS | If the test should create things, before executing the scenarios (0/1) | +| DELETE_THINGS | If the test should delete the things, after executing the scenarios (0/1) | +| KAFKA_PRODUCER_LOGGER_ENABLED | K6 kafka producer logger enabled (0/1) | +| KAFKA_CONSUMER_LOGGER_ENABLED | K6 kafka consumer logger enabled (0/1) | +| CREATE_DITTO_CONNECTIONS | If the test should create the needed for scenarios ditto connections, before executing the scenarios | +| DELETE_DITTO_CONNECTIONS | If the test should delete the needed for scenarios ditto connections, after executing the scenarios | +| SCENARIOS_TO_RUN | Array of scenarios names that should run, available options is: WARMUP, DEVICE_LIVE_MESSAGES, SERACH_THINGS, READ_THINGS, MODIFY_THINGS | +| LOG_REMAINING | Log the remaining things that need to be created. Useful for debugging purposes | +| BATCH_SIZE | Max number of simultaneous connections of a k6 http.batch() call, which is used for warming up things | + +## Ditto related + +| Name | Description | +| ------------------------------- | ---------------------------------- | +| DITO_API_URI | Ditto api url | +| DITTO_AUTH_CONTEXT_HEADER | Authorization context header name | +| DITTO_AUTH_CONTEXT_HEADER_VALUE | Authorization context header value | +| DEVICE_FEATURE_NAME | remove? | +| DEVICE_FEATURE_PROPERTY | remove? | +| DEVICE_ID_HEADER | remove? | +| CREATE_THING_HEADER | remove? | +| DITTO_MESSAGE_HEADER | remove? | + +## Kafka related + +| Name | Description | +| ----------------------- | -------------------------------- | +| KAFKA_BOOTSTRAP_SERVERS | Array of kafka bootstrap servers | + +## Scenarios related + +###### WARMUP + +| Name | Description | +| ------------------- | -------------------------------------------------------------------------------------------- | +| WARMUP_MAX_DURATION | The maximum duration of warmup scenario. After, the scenario will be forcefully stopped | +| WARMUP_START_TIME | Time offset since the start of the test, at which point this scenario should begin execution | +| WARMUP_VUS | An integer value specifying the number of VUs to run concurrently | + +###### Every other scenario has the same config variables, created by suffixing the variable name with the name of the scenario, f.e. SEARCH_THINGS_DURATION + +| Name | Description | +| ------------------ | -------------------------------------------------------------------------------------------------- | +| _DURATION | Total scenario duration. | +| _PER_SECOND | Number of requests to execute per second. For kafka scenarios number of kafka messages per second. | +| _PRE_ALLOCATED_VUS | Number of VUs to pre-allocate before scenario start to preserve runtime resources. | +| __MAX_VUS | Maximum number of VUs to allow during the scenario run. | +| __START_TIME | Time offset since the start of the test, at which point this scenario should begin execution. | + +###### Ditto kafka connections + +| Name | Description | +| ------------------------------------------- | ----------------------------------------------------------------------------- | +| KAFKA_CONNECTION_QOS | Ditto kafka connection qos value (0/1) | +| KAFKA_CONNECTION_CUSTOM_ACK | Ditto kafka connection custom acknowledge name | +| KAFKA_SOURCE_CONNECTION_CLIENT_COUNT | Ditto source (consumer) kafka connection client count | +| KAFKA_TARGET_CONNECTION_CLIENT_COUNT | Ditto target (producer) kafka connection client count | +| CREATE_UPDATE_THING_SOURCE_TOPIC | Kafka topic for sending create/update messages to ditto source connection | +| CREATE_UPDATE_THING_SOURCE_TOPIC_PARTITIONS | Number of partitions for the create/update kafka topic | +| CREATE_UPDATE_THING_REPLY_TOPIC | Kafka topic for ditto target connection, replying with 'thing created' events | +| CREATE_UPDATE_THING_REPLY_TOPIC_PARTITIONS | Number of partitions for the create/update reply kafka topic | +| CREATE_UPDATE_THING_CONSUMER_GROUP_ID | K6 kafka consumer group id | + +###### Ditto HTTP Push connection + +| Name | Description | +| ---------------------------------- | ---------------------------------------------------------------------------------------------- | +| HTTP_PUSH_CONNECTION_CLIENT_COUNT | Ditto HTTP push connection client count | +| HTTP_PUSH_CONNECTION_PARALLELISM | Ditto HTTP push connection parallelism | +| PUSH_ENDPOINT_URI | Ditto HTTP push connection endpoint uri | +| PUSH_ENDPOINT_EVENTS_MODIFIED_PATH | Ditto HTTP push connection target address for thing modified event | +| PUSH_ENDPOINT_LIVE_MESSAGE_PATH | Ditto HTTP push connection target address for things live messages events | + +## Test lifecycle + +The test consists of 4 lifecycle stages: **init**, **setup**, **VU code** and **teardown** + +**Init** + +1. Parses all environment variables + +2. Creates global kafka producer + +**Setup** + +1. Creates kafka topics if **CREATE_DITTO_CONNECTIONS** env var is **1** + +2. Creates ditto connections ( ditto kafka, ditto http push connections ) if **CREATE_DITTO_CONNECTIONS** env var is **1** + +3. Creates things, if **CREATE_THINGS** env var is **1** + +**VU code** - the stage at which the scenarios get executed + +**Teardown** + +1. Deletes things, if **DELETE_THINGS** env var is **1** + +2. Deletes ditto connections ( ditto kafka, ditto http push connections ) if **DELETE_DITTO_CONNECTIONS** env var is **1 + +3. Deletes kafka topics if **DELETE_DITTO_CONNECTIONS** env var is **1 + +## + +## Running the test + +###### Running the test locally + +Prerequisites: + +- Running ditto + +- Running kafka cluster with topic deletion enabled + +- Running Monster mock instance ( config for mmock is inside the mmock directory ) + +- Having the xk6 kafka extension binary + +First export all the environment variables, needed for the test: + +```bash +set -a +. test.env +set +a +``` + + Then, to run the test: + +```bash +{xk6-kakfa-bin} run test/k6-test.js +``` + +###### Running the test inside kubernetes cluster + +Prerequisites: + +- Running kubernetes cluster + +- Running kafka cluster with topic deletion disabled + +- Running ditto inside the cluster, using the ditto helm chart https://github.com/eclipse-ditto/ditto/tree/master/deployment/helm/ditto + +- Deploy the k6 operator [GitHub - grafana/k6-operator: An operator for running distributed k6 tests.](https://github.com/grafana/k6-operator)[GitHub - grafana/k6-operator: An operator for running distributed k6 tests.](https://github.com/grafana/k6-operator) + +- Create config map for mmock from the config files inside **mmock** directory: + + ```bash + kubectl create configmap mmock-config --from-file mmock/ + ``` + +- Running Monster mock instance inside the cluster (kubernetes resource inside kubernetes directory) + + + +Needed kubernetes resources lie inside the kubernetes directory. + +- k6-test-configmap-cr.yaml - custom k6 resource, includes all env variables needed for the test, that are inside test.env file + +- mmock-pvc.yaml - Persistent volme claim for monster mock, use to copy the mmock configuration to the created PV, in order to mount it inside the mmock instance. + +- mmock.yaml - Pod definition for monster mock + +K6 custom resource gets the source code for the test from a config map, that must be created: + +```bash + kubectl create configmap k6-test --from-file test/ +``` + +K6 custom resource reads env variables from config map that must be created: + +```bash +kubectl create configmap k6-ditto-benchmark --from-env-file test-cluster.env +``` + +After all is set, create the k6 custom resource for the test: + +```bash +k create -f k6-ditto-benchmark-test.yaml +``` + +Logs of the k6 test can be inspected from the pod **k6-ditto-benchmark-test-1-xxxx** diff --git a/benchmark-tool/kubernetes/k6-ditto-benchmark-test.yaml b/benchmark-tool/kubernetes/k6-ditto-benchmark-test.yaml new file mode 100644 index 0000000000..e26093a3bd --- /dev/null +++ b/benchmark-tool/kubernetes/k6-ditto-benchmark-test.yaml @@ -0,0 +1,330 @@ +# Copyright (c) 2023 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License 2.0 which is available at +# http://www.eclipse.org/legal/epl-2.0 +# +# SPDX-License-Identifier: EPL-2.0 +# +apiVersion: k6.io/v1alpha1 +kind: K6 +metadata: + name: k6-ditto-benchmark-test + namespace: ditto-benchmark +spec: + parallelism: 1 + script: + configMap: + name: k6-test + file: k6-test.js + arguments: --include-system-env-vars + runner: + image: mostafamoradian/xk6-kafka:latest + resources: + requests: + cpu: 2 + memory: 16000Mi + env: + - name: CREATE_DITTO_CONNECTIONS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: CREATE_DITTO_CONNECTIONS + - name: DELETE_DITTO_CONNECTIONS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: DELETE_DITTO_CONNECTIONS + - name: HTTP_PUSH_CONNECTION_CLIENT_COUNT + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: HTTP_PUSH_CONNECTION_CLIENT_COUNT + - name: HTTP_PUSH_CONNECTION_PARALLELISM + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: HTTP_PUSH_CONNECTION_PARALLELISM + - name: SCENARIOS_TO_RUN + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: SCENARIOS_TO_RUN + - name: AUTHORIZATION_HEADER_VALUE + valueFrom: + secretKeyRef: + name: k6-test-secret + key: AUTHORIZATION_HEADER_VALUE + - name: PRODUCE_THINGS_BATCH_SIZE + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: PRODUCE_THINGS_BATCH_SIZE + - name: BATCH_SIZE + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: BATCH_SIZE + - name: DELETE_THINGS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: DELETE_THINGS + - name: LOG_REMAINING + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: LOG_REMAINING + - name: CREATE_THINGS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: CREATE_THINGS + - name: SETUP_TIMEOUT + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: SETUP_TIMEOUT + - name: TEARDOWN_TIMEOUT + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: TEARDOWN_TIMEOUT + - name: THINGS_COUNT + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: THINGS_COUNT + - name: THINGS_START_INDEX + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: THINGS_START_INDEX + - name: MODIFY_THINGS_DURATION + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: MODIFY_THINGS_DURATION + - name: MODIFY_THINGS_PER_SECOND + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: MODIFY_THINGS_PER_SECOND + - name: MODIFY_THINGS_PRE_ALLOCATED_VUS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: MODIFY_THINGS_PRE_ALLOCATED_VUS + - name: MODIFY_THINGS_MAX_VUS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: MODIFY_THINGS_MAX_VUS + - name: MODIFY_THINGS_START_TIME + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: MODIFY_THINGS_START_TIME + - name: READ_THINGS_DURATION + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: READ_THINGS_DURATION + - name: READ_THINGS_PER_SECOND + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: READ_THINGS_PER_SECOND + - name: READ_THINGS_PRE_ALLOCATED_VUS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: READ_THINGS_PRE_ALLOCATED_VUS + - name: READ_THINGS_MAX_VUS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: READ_THINGS_MAX_VUS + - name: READ_THINGS_START_TIME + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: READ_THINGS_START_TIME + - name: SEARCH_THINGS_DURATION + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: SEARCH_THINGS_DURATION + - name: SEARCH_THINGS_PER_SECOND + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: SEARCH_THINGS_PER_SECOND + - name: SEARCH_THINGS_PRE_ALLOCATED_VUS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: SEARCH_THINGS_PRE_ALLOCATED_VUS + - name: SEARCH_THINGS_MAX_VUS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: SEARCH_THINGS_MAX_VUS + - name: SEARCH_THINGS_START_TIME + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: SEARCH_THINGS_START_TIME + - name: DEVICE_LIVE_MESSAGES_DURATION + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: DEVICE_LIVE_MESSAGES_DURATION + - name: DEVICE_LIVE_MESSAGES_PER_SECOND + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: DEVICE_LIVE_MESSAGES_PER_SECOND + - name: DEVICE_LIVE_MESSAGES_PRE_ALLOCATED_VUS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: DEVICE_LIVE_MESSAGES_PRE_ALLOCATED_VUS + - name: DEVICE_LIVE_MESSAGES_MAX_VUS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: DEVICE_LIVE_MESSAGES_MAX_VUS + - name: DEVICE_LIVE_MESSAGES_START_TIME + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: DEVICE_LIVE_MESSAGES_START_TIME + - name: KAFKA_BOOTSTRAP_SERVERS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: KAFKA_BOOTSTRAP_SERVERS + - name: CREATE_UPDATE_THING_SOURCE_TOPIC + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: CREATE_UPDATE_THING_SOURCE_TOPIC + - name: CREATE_UPDATE_THING_SOURCE_TOPIC_PARTITIONS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: CREATE_UPDATE_THING_SOURCE_TOPIC_PARTITIONS + - name: CREATE_UPDATE_THING_REPLY_TOPIC + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: CREATE_UPDATE_THING_REPLY_TOPIC + - name: CREATE_UPDATE_THING_REPLY_TOPIC_PARTITIONS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: CREATE_UPDATE_THING_REPLY_TOPIC_PARTITIONS + - name: CREATE_UPDATE_THING_CONSUMER_GROUP_ID + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: CREATE_UPDATE_THING_CONSUMER_GROUP_ID + - name: CREATE_UPDATE_THING_CONSUMER_MAX_WAIT_TIME_S + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: CREATE_UPDATE_THING_CONSUMER_MAX_WAIT_TIME_S + - name: CREATE_UPDATE_THING_CONSUMER_SESSION_TIMEOUT_TIME_S + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: CREATE_UPDATE_THING_CONSUMER_SESSION_TIMEOUT_TIME_S + - name: KAFKA_PRODUCER_LOGGER_ENABLED + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: KAFKA_PRODUCER_LOGGER_ENABLED + - name: KAFKA_CONSUMER_LOGGER_ENABLED + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: KAFKA_CONSUMER_LOGGER_ENABLED + - name: KAFKA_CONNECTION_QOS + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: KAFKA_CONNECTION_QOS + - name: KAFKA_CONNECTION_CUSTOM_ACK + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: KAFKA_CONNECTION_CUSTOM_ACK + - name: KAFKA_CONNECTION_CONSUMER_CONSUMER_COUNT + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: KAFKA_CONNECTION_CONSUMER_CONSUMER_COUNT + - name: KAFKA_TARGET_CONNECTION_CLIENT_COUNT + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: KAFKA_TARGET_CONNECTION_CLIENT_COUNT + - name: KAFKA_SOURCE_CONNECTION_CLIENT_COUNT + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: KAFKA_SOURCE_CONNECTION_CLIENT_COUNT + - name: KAFKA_SOURCE_CONNECTION_PROCESSOR_POOL_SIZE + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: KAFKA_CONNECTION_PROCESSOR_POOL_SIZE + - name: DEVICE_NAMESPACE + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: DEVICE_NAMESPACE + - name: DEVICE_ID_TEMPLATE + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: DEVICE_ID_TEMPLATE + - name: DITTO_BASE_URI + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: DITTO_BASE_URI + - name: DITTO_AUTH_CONTEXT + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: DITTO_AUTH_CONTEXT + - name: PUSH_ENDPOINT_URI + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: PUSH_ENDPOINT_URI + - name: PUSH_ENDPOINT_LIVE_MESSAGE_PATH + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: PUSH_ENDPOINT_LIVE_MESSAGE_PATH + - name: PUSH_ENDPOINT_EVENTS_PATH + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: PUSH_ENDPOINT_EVENTS_PATH + - name: THINGS_WARMUP_MAX_DURATION + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: THINGS_WARMUP_MAX_DURATION + - name: THINGS_WARMUP_START_TIME + valueFrom: + configMapKeyRef: + name: k6-ditto-benchmark + key: THINGS_WARMUP_START_TIME diff --git a/benchmark-tool/kubernetes/mmock.yaml b/benchmark-tool/kubernetes/mmock.yaml new file mode 100644 index 0000000000..0140fdb936 --- /dev/null +++ b/benchmark-tool/kubernetes/mmock.yaml @@ -0,0 +1,34 @@ +# Copyright (c) 2023 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License 2.0 which is available at +# http://www.eclipse.org/legal/epl-2.0 +# +# SPDX-License-Identifier: EPL-2.0 +# +apiVersion: v1 +kind: Pod +metadata: + name: mmock + namespace: ditto-benchmark + labels: + app.kubernetes.io/name: mmock +spec: + volumes: + - name: config-volume + configMap: + defaultMode: 420 + name: mmock-config + containers: + - name: mmock + image: jordimartin/mmock:latest + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8083 + name: "mmock" + volumeMounts: + - mountPath: /config/ + name: config-volume diff --git a/benchmark-tool/mmock/default.yaml b/benchmark-tool/mmock/default.yaml new file mode 100644 index 0000000000..829da1d4d2 --- /dev/null +++ b/benchmark-tool/mmock/default.yaml @@ -0,0 +1,19 @@ +# Copyright (c) 2023 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License 2.0 which is available at +# http://www.eclipse.org/legal/epl-2.0 +# +# SPDX-License-Identifier: EPL-2.0 +# +request: + method: POST + path: "/:thingId" +response: + statusCode: 204 +control: + priority: 1 + diff --git a/benchmark-tool/mmock/live_messages.yaml b/benchmark-tool/mmock/live_messages.yaml new file mode 100644 index 0000000000..b78c07e272 --- /dev/null +++ b/benchmark-tool/mmock/live_messages.yaml @@ -0,0 +1,22 @@ +# Copyright (c) 2023 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License 2.0 which is available at +# http://www.eclipse.org/legal/epl-2.0 +# +# SPDX-License-Identifier: EPL-2.0 +# +request: + method: POST + path: "/live_message" +response: + statusCode: 200 + headers: + Content-Type: + - application/vnd.eclipse.ditto+json + body: '{"topic": "{{request.body.topic}}","status": 200,"value": "ok","path": "{{request.body.path}}","headers": {"correlation-id": "{{request.body.headers.correlation-id}}","content-type": "application/json"}}' +control: + priority: 2 diff --git a/benchmark-tool/test-cluster.env b/benchmark-tool/test-cluster.env new file mode 100644 index 0000000000..57585f00ce --- /dev/null +++ b/benchmark-tool/test-cluster.env @@ -0,0 +1,59 @@ +BATCH_SIZE=1000 +CREATE_DITTO_CONNECTIONS=1 +CREATE_THINGS=0 +CREATE_UPDATE_THING_CONSUMER_GROUP_ID=group-create-update +CREATE_UPDATE_THING_CONSUMER_MAX_WAIT_TIME_S=10 +CREATE_UPDATE_THING_CONSUMER_SESSION_TIMEOUT_TIME_S=10 +CREATE_UPDATE_THING_REPLY_TOPIC=create-update-reply +CREATE_UPDATE_THING_REPLY_TOPIC_PARTITIONS=2 +CREATE_UPDATE_THING_SOURCE_TOPIC=create-update +CREATE_UPDATE_THING_SOURCE_TOPIC_PARTITIONS=2 +DELETE_DITTO_CONNECTIONS=1 +DELETE_THINGS=0 +DEVICE_ID_TEMPLATE=test-thing- +DEVICE_LIVE_MESSAGES_DURATION=10m +DEVICE_LIVE_MESSAGES_MAX_VUS=20000 +DEVICE_LIVE_MESSAGES_PER_SECOND=1000 +DEVICE_LIVE_MESSAGES_PRE_ALLOCATED_VUS=20000 +DEVICE_LIVE_MESSAGES_START_TIME=1m +DEVICE_NAMESPACE=org.eclipse.ditto +DITTO_AUTH_CONTEXT=nginx:ditto +DITTO_BASE_URI=http://eclipse-ditto-gateway.ditto-benchmark.svc.cluster.local:8080/api/2 +HTTP_PUSH_CONNECTION_CLIENT_COUNT=2 +HTTP_PUSH_CONNECTION_PARALLELISM=2 +KAFKA_BOOTSTRAP_SERVERS=bitnami-kafka:9092 +KAFKA_CONNECTION_CONSUMER_CONSUMER_COUNT=1 +KAFKA_CONNECTION_CUSTOM_ACK= +KAFKA_CONNECTION_PROCESSOR_POOL_SIZE=1 +KAFKA_CONNECTION_QOS=0 +KAFKA_CONSUMER_LOGGER_ENABLED=0 +KAFKA_PRODUCER_LOGGER_ENABLED=0 +KAFKA_SOURCE_CONNECTION_CLIENT_COUNT=2 +KAFKA_TARGET_CONNECTION_CLIENT_COUNT=1 +LOG_REMAINING=0 +MODIFY_THINGS_DURATION=15m +MODIFY_THINGS_MAX_VUS=10000 +MODIFY_THINGS_PER_SECOND=2200 +MODIFY_THINGS_PRE_ALLOCATED_VUS=10000 +MODIFY_THINGS_START_TIME=0s +PRODUCE_THINGS_BATCH_SIZE=1000 +PUSH_ENDPOINT_EVENTS_PATH= +PUSH_ENDPOINT_LIVE_MESSAGE_PATH=/live_message +PUSH_ENDPOINT_URI=http://mmock-service.ditto-benchmark.svc.cluster.local:80 +READ_THINGS_DURATION=3m +READ_THINGS_MAX_VUS=4000 +READ_THINGS_PER_SECOND=2000 +READ_THINGS_PRE_ALLOCATED_VUS=4000 +READ_THINGS_START_TIME=1m +SCENARIOS_TO_RUN=MODIFY_THINGS +SEARCH_THINGS_DURATION=3m +SEARCH_THINGS_MAX_VUS=8000 +SEARCH_THINGS_PER_SECOND=2100 +SEARCH_THINGS_PRE_ALLOCATED_VUS=8000 +SEARCH_THINGS_START_TIME=1m +SETUP_TIMEOUT=3600s +TEARDOWN_TIMEOUT=3600s +THINGS_COUNT=100000 +THINGS_START_INDEX=1 +THINGS_WARMUP_MAX_DURATION=20m +THINGS_WARMUP_START_TIME=0s diff --git a/benchmark-tool/test-local.env b/benchmark-tool/test-local.env new file mode 100644 index 0000000000..199dcc26f2 --- /dev/null +++ b/benchmark-tool/test-local.env @@ -0,0 +1,82 @@ +SETUP_TIMEOUT=360s +TEARDOWN_TIMEOUT=360s + +CREATE_THINGS=1 +THINGS_COUNT=10 +THINGS_START_INDEX=1 + +CREATE_DITTO_CONNECTIONS=1 +DELETE_DITTO_CONNECTIONS=0 + +SCENARIOS_TO_RUN="" + +THINGS_WARMUP_MAX_DURATION=2m +THINGS_WARMUP_START_TIME=0s +THINGS_WARMUP_VUS=10 + +MODIFY_THINGS_DURATION=10s +MODIFY_THINGS_PER_SECOND=100 +MODIFY_THINGS_PRE_ALLOCATED_VUS=100 +MODIFY_THINGS_MAX_VUS=200 +MODIFY_THINGS_START_TIME=0s + +READ_THINGS_DURATION=30s +READ_THINGS_PER_SECOND=50 +READ_THINGS_PRE_ALLOCATED_VUS=500 +READ_THINGS_MAX_VUS=1000 +READ_THINGS_START_TIME=0s + +SEARCH_THINGS_DURATION=30s +SEARCH_THINGS_PER_SECOND=50 +SEARCH_THINGS_PRE_ALLOCATED_VUS=1 +SEARCH_THINGS_MAX_VUS=1 +SEARCH_THINGS_START_TIME=0s + +DEVICE_LIVE_MESSAGES_DURATION=5s +DEVICE_LIVE_MESSAGES_PER_SECOND=1000 +DEVICE_LIVE_MESSAGES_PRE_ALLOCATED_VUS=5000 +DEVICE_LIVE_MESSAGES_MAX_VUS=5000 +DEVICE_LIVE_MESSAGES_START_TIME=0m + +KAFKA_BOOTSTRAP_SERVERS=172.25.0.2:9094 + +CREATE_UPDATE_THING_SOURCE_TOPIC=create-update +CREATE_UPDATE_THING_SOURCE_TOPIC_PARTITIONS=1 +CREATE_UPDATE_THING_REPLY_TOPIC=create-update-reply +CREATE_UPDATE_THING_REPLY_TOPIC_PARTITIONS=1 +CREATE_UPDATE_THING_CONSUMER_GROUP_ID=group-create-update +CREATE_UPDATE_THING_CONSUMER_MAX_WAIT_TIME_S=10 +CREATE_UPDATE_THING_CONSUMER_SESSION_TIMEOUT_TIME_S=10 + +KAFKA_PRODUCER_LOGGER_ENABLED=0 +KAFKA_CONSUMER_LOGGER_ENABLED=0 + +KAFKA_CONNECTION_QOS=0 +KAFKA_CONNECTION_CUSTOM_ACK=thing-created-reply-sent +KAFKA_SOURCE_CONNECTION_CLIENT_COUNT=1 +KAFKA_TARGET_CONNECTION_CLIENT_COUNT=1 +KAFKA_CONNECTION_PROCESSOR_POOL_SIZE=1 + +#DELETE? +KAFKA_CONNECTION_CONSUMER_CONSUMER_COUNT=1 +KAFKA_CONNECTION_PROCESSOR_POOL_SIZE=1 + + +HTTP_PUSH_CONNECTION_CLIENT_COUNT=1 +HTTP_PUSH_CONNECTION_PARALLELISM=1 + +DEVICE_NAMESPACE=org.eclipse.ditto +DEVICE_ID_TEMPLATE=test-thing- + +DITTO_BASE_URI=http://localhost:8080/api/2 +DITTO_AUTH_CONTEXT=nginx:ditto + +PUSH_ENDPOINT_URI=http://127.0.0.1:8083 +PUSH_ENDPOINT_EVENTS_PATH= +PUSH_ENDPOINT_LIVE_MESSAGE_PATH=/live_messages + +#TO DELETE +LOG_REMAINING=0 +DELETE_THINGS=0 +BATCH_SIZE=100 +PRODUCE_THINGS_BATCH_SIZE=100 diff --git a/benchmark-tool/test/common.js b/benchmark-tool/test/common.js new file mode 100644 index 0000000000..0e2c19fa68 --- /dev/null +++ b/benchmark-tool/test/common.js @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +import { + Writer, + Connection +} from 'k6/x/kafka'; + +import { + SchemaRegistry, +} from 'k6/x/kafka'; + +// KAFKA RELATED +export const BOOTSTRAP_SERVERS = __ENV.KAFKA_BOOTSTRAP_SERVERS.split(','); + +export const CREATE_UPDATE_THING_SOURCE_TOPIC = __ENV.CREATE_UPDATE_THING_SOURCE_TOPIC; +export const CREATE_UPDATE_THING_SOURCE_TOPIC_PARTITIONS = parseInt(__ENV.CREATE_UPDATE_THING_SOURCE_TOPIC_PARTITIONS); +export const CREATE_UPDATE_THING_REPLY_TOPIC = __ENV.CREATE_UPDATE_THING_REPLY_TOPIC; +export const CREATE_UPDATE_THING_REPLY_TOPIC_PARTITIONS = parseInt(__ENV.CREATE_UPDATE_THING_REPLY_TOPIC_PARTITIONS); +export const CREATE_UPDATE_THING_CONSUMER_GROUP_ID = __ENV.CREATE_UPDATE_THING_CONSUMER_GROUP_ID; + +let producer = undefined; +producer = new Writer({ + brokers: BOOTSTRAP_SERVERS, + topic: CREATE_UPDATE_THING_SOURCE_TOPIC, + connectLogger: __ENV.KAFKA_PRODUCER_LOGGER_ENABLED == 1, +}); +// if (__VU === 1) { +// // execute only once +// createThingsTopicsIfNotAvailable(); +// } + +export const KAFKA_CREATE_UPDATE_PRODUCER = producer; + +export const KAFKA_CONNECTION_QOS = parseInt(__ENV.KAFKA_CONNECTION_QOS); +export const KAFKA_CONNECTION_CUSTOM_ACK = __ENV.KAFKA_CONNECTION_CUSTOM_ACK; +export const KAFKA_CONNECTION_CONSUMER_CONSUMER_COUNT = parseInt(__ENV.KAFKA_CONNECTION_CONSUMER_CONSUMER_COUNT); +export const KAFKA_SOURCE_CONNECTION_CLIENT_COUNT = parseInt(__ENV.KAFKA_SOURCE_CONNECTION_CLIENT_COUNT); +export const KAFKA_TARGET_CONNECTION_CLIENT_COUNT = parseInt(__ENV.KAFKA_TARGET_CONNECTION_CLIENT_COUNT); +export const KAFKA_CONNECTION_PROCESSOR_POOL_SIZE = parseInt(__ENV.KAFKA_CONNECTION_PROCESSOR_POOL_SIZE); + +// KAFKA RELATED + +// HTTP PUSH CONNECTION +export const HTTP_PUSH_CONNECTION_CLIENT_COUNT = parseInt(__ENV.HTTP_PUSH_CONNECTION_CLIENT_COUNT); +export const HTTP_PUSH_CONNECTION_PARALLELISM = parseInt(__ENV.HTTP_PUSH_CONNECTION_PARALLELISM); +// HTTP PUSH CONNECTION + +// DITTO RELATED +export const DEVICE_NAMESPACE = __ENV.DEVICE_NAMESPACE; +export const DEVICE_ID_TEMPLATE = `${DEVICE_NAMESPACE}:${__ENV.DEVICE_ID_TEMPLATE}`; +export const THINGS_COUNT = parseInt(__ENV.THINGS_COUNT); +export const BATCH_SIZE = parseInt(__ENV.BATCH_SIZE); +export const PRODUCE_THINGS_BATCH_SIZE = parseInt(__ENV.PRODUCE_THINGS_BATCH_SIZE); + +export const THINGS_START_INDEX = parseInt(__ENV.THINGS_START_INDEX); +export function GET_THING_ID(index) { + return DEVICE_ID_TEMPLATE + (index + THINGS_START_INDEX); +} + +export const DEVICE_FEATURE_NAME = 'coffee-brewer'; +export const DEVICE_FEATURE_PROPERTY = 'brewed-coffees'; +export const DEVICE_ID_HEADER = 'device_id'; +export const CREATE_THING_HEADER = 'create_thing'; +export const DITTO_MESSAGE_HEADER = 'ditto_message'; +// DITTO RELATED + +// K6 RELATED +export const schemaRegistry = new SchemaRegistry(); +// K6 RELATED + +// SCENARIOS RELATED +export const THINGS_WARMUP_VUS = parseInt(__ENV.THINGS_WARMUP_VUS); +// SCENARIOS RELATED + +export function createThingsTopicsIfNotAvailable() { + let connection; + try { + connection = new Connection({ address: BOOTSTRAP_SERVERS[0] }); + let availableTopics = connection.listTopics(); + console.log(availableTopics); + if (availableTopics.indexOf(CREATE_UPDATE_THING_SOURCE_TOPIC) === -1) { + console.log(`creating topic ${CREATE_UPDATE_THING_SOURCE_TOPIC}`); + connection.createTopic({ + topic: CREATE_UPDATE_THING_SOURCE_TOPIC, + numPartitions: CREATE_UPDATE_THING_SOURCE_TOPIC_PARTITIONS + }); + } + + if (availableTopics.indexOf(CREATE_UPDATE_THING_REPLY_TOPIC) === -1) { + console.log(`creating topic ${CREATE_UPDATE_THING_REPLY_TOPIC}`); + connection.createTopic({ + topic: CREATE_UPDATE_THING_REPLY_TOPIC, + numPartitions: CREATE_UPDATE_THING_REPLY_TOPIC_PARTITIONS + }); + } + } finally { + if (connection !== undefined) { + connection.close(); + } + } +} + +export function deleteTopics() { + let connection; + try { + connection = new Connection({ address: BOOTSTRAP_SERVERS[0] }); + connection.deleteTopic(CREATE_UPDATE_THING_SOURCE_TOPIC); + connection.deleteTopic(CREATE_UPDATE_THING_REPLY_TOPIC); + } finally { + if (connection !== undefined) { + connection.close(); + } + } +} diff --git a/benchmark-tool/test/device-live-message.js b/benchmark-tool/test/device-live-message.js new file mode 100644 index 0000000000..49fed00cd7 --- /dev/null +++ b/benchmark-tool/test/device-live-message.js @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +import { sendLiveMessageToThing } from "./http-util.js"; +import { randomIntBetween } from 'https://jslib.k6.io/k6-utils/1.4.0/index.js'; +import { fail } from 'k6'; +import * as common from './common.js' + +export function sendDeviceLiveMessage() { + let thingId = common.GET_THING_ID(randomIntBetween(common.THINGS_START_INDEX, common.THINGS_COUNT - 1)); + let response = sendLiveMessageToThing(thingId, 'subject', null); + if (response.status != 200) { + fail(`Failed to send live message to thing ${thingId}; Response: ${JSON.stringify(response)}`); + } +} diff --git a/benchmark-tool/test/http-util.js b/benchmark-tool/test/http-util.js new file mode 100644 index 0000000000..abc67719ec --- /dev/null +++ b/benchmark-tool/test/http-util.js @@ -0,0 +1,383 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +import { sleep } from 'k6'; +import http from 'k6/http'; +import * as common from './common.js'; +import { formatString } from './str-util.js' + +const DITTO_BASE_URI = __ENV.DITTO_BASE_URI; + +const DITTO_CONNECTIONS_URI = `${DITTO_BASE_URI}/connections`; +const DITTO_THINGS_URI = `${DITTO_BASE_URI}/things`; +const DITTO_POLICIES_URI = `${DITTO_BASE_URI}/policies`; +const DITTO_SEARCH_THINGS_URI = `${DITTO_BASE_URI}/search/things` + +const DITTO_THINGS_MESSAGES_URI_FORMAT = `${DITTO_THINGS_URI}/{0}/inbox/messages/{1}` + +const PUSH_ENDPOINT_URI = __ENV.PUSH_ENDPOINT_URI; +const PUSH_ENDPOINT_EVENTS_PATH = __ENV.PUSH_ENDPOINT_EVENTS_PATH +const PUSH_ENDPOINT_LIVE_MESSAGE_PATH = __ENV.PUSH_ENDPOINT_LIVE_MESSAGE_PATH; + +const AUTH_CONTEXT = __ENV.DITTO_AUTH_CONTEXT; + +const REQUEST_HEADERS = { + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'x-ditto-pre-authenticated': AUTH_CONTEXT, + 'Authorization': __ENV.AUTHORIZATION_HEADER_VALUE + }, + tags: { name: 'grouped' } +}; + +const DEVICE_FEATURE = { + [common.DEVICE_FEATURE_NAME]: { + 'properties': { + [common.DEVICE_FEATURE_PROPERTY]: 0 + } + } +}; + +export function createHttpPushConnection() { + let connectionBody = constructHttpPushConnection(common.HTTP_PUSH_CONNECTION_CLIENT_COUNT, common.HTTP_PUSH_CONNECTION_PARALLELISM); + let resp = http.post(DITTO_CONNECTIONS_URI, JSON.stringify(connectionBody), REQUEST_HEADERS); + let connection = resp.json(); + + return connection; +} + +export function createKafkaSourceConnection(customAckConnectionId) { + let connectionBody = constructKafkaSourceConnection(customAckConnectionId); + let resp = http.post(DITTO_CONNECTIONS_URI, JSON.stringify(connectionBody), REQUEST_HEADERS); + let connection = resp.json(); + + return connection; +} + +export function createKafkaTargetConnection() { + let connectionBody = constructKafkaTargetConnection(); + let resp = http.post(DITTO_CONNECTIONS_URI, JSON.stringify(connectionBody), REQUEST_HEADERS); + let connection = resp.json(); + + return connection; +} + +export function waitForConnectionToOpen(connectionId) { + let connectionOpen; + while (true) { + let connectionStatus = http.get(`${DITTO_CONNECTIONS_URI}/${connectionId}/status`, REQUEST_HEADERS).json(); + + connectionOpen = 1; + connectionStatus.clientStatus.forEach((client) => { + connectionOpen &= (client.status === 'open' && client.statusDetails === 'CONNECTED'); + }); + + if (connectionStatus.sourceStatus != undefined) { + connectionStatus.sourceStatus.forEach((source) => { + connectionOpen &= (source.status === 'open' && source.statusDetails === 'Consumer started.'); + }); + } + + if (connectionStatus.targetStatus != undefined) { + connectionStatus.targetStatus.forEach((target) => { + let statusOpenCheck = target.status === 'open' && target.statusDetails === 'Producer started.'; + let statusUnknownCheck = target.status === 'unknown' && (target.statusDetails.match('.* on-demand') !== undefined); + connectionOpen &= statusOpenCheck || statusUnknownCheck; + }); + } + + if (connectionOpen === 1) { + break; + } + + sleep(1); + } +} + +export function getThing(id) { + return http.get(DITTO_THINGS_URI + '/' + id, REQUEST_HEADERS); +} + +export function getThingsBatch(ids) { + let requests = []; + ids.forEach(id => { + requests.push({ + 'method': 'GET', + 'url': DITTO_THINGS_URI + '/' + id, + 'params': REQUEST_HEADERS + }); + }) + + return http.batch(requests); +} + +export function searchThingById(id) { + return http.get(DITTO_SEARCH_THINGS_URI + getSearchByThingIdFilter(id), REQUEST_HEADERS); +} +export function searchThingByFeature(value) { + let uri = DITTO_SEARCH_THINGS_URI + getSearchByFeatureFilter(value); + return http.get(DITTO_SEARCH_THINGS_URI + getSearchByFeatureFilter(value), REQUEST_HEADERS); +} + +export function searchThingsBatch(ids) { + let requests = []; + ids.forEach(id => { + requests.push({ + 'method': 'GET', + 'url': DITTO_SEARCH_THINGS_URI + getSearchByThingIdFilter(id), + 'params': REQUEST_HEADERS + }); + }) + + return http.batch(requests); +} + +export function sendLiveMessageToThing(id, subject, message) { + return http.post(formatString(DITTO_THINGS_MESSAGES_URI_FORMAT, id, subject), message, REQUEST_HEADERS); +} + +export function sendLiveMessageToThingsBatch(ids, subject, message) { + let requests = []; + ids.forEach(id => { + requests.push({ + 'method': 'GET', + 'url': formatString(DITTO_THINGS_MESSAGES_URI_FORMAT, id, subject), + 'body': message, + 'params': REQUEST_HEADERS + }); + }) + return http.batch(requests); +} + +export function deleteThing(id) { + return http.del(DITTO_THINGS_URI + '/' + id, null, REQUEST_HEADERS); +} + +export function deletePolicy(id) { + return http.del(DITTO_POLICIES_URI + '/' + id, null, REQUEST_HEADERS); +} + +export function deleteConnection(id) { + return http.del(DITTO_CONNECTIONS_URI + '/' + id, null, REQUEST_HEADERS); +} + +function getSearchByFeatureFilter(value) { + return `?filter=eq(features/${common.DEVICE_FEATURE_NAME}/properties/${common.DEVICE_FEATURE_PROPERTY},${value})`; +} + +function getSearchByThingIdFilter(id) { + return `?filter=eq(thingId,'${id}')`; +} + +function constructHttpPushConnection(clientCount, parallelism) { + let connectionBody = { + 'name': 'http-push-connection', + 'connectionType': 'http-push', + 'connectionStatus': 'open', + 'uri': PUSH_ENDPOINT_URI, + 'clientCount': clientCount, + 'specificConfig': { + 'parallelism': parallelism + }, + 'sources': [], + 'targets': [ + { + 'address': `POST:${PUSH_ENDPOINT_LIVE_MESSAGE_PATH}`, + 'topics': [ + '_/_/things/live/messages' + ], + 'authorizationContext': [AUTH_CONTEXT] + } + ], + 'tags': ['benchmark'] + }; + + let thingModifiedTarget = { + 'address': `POST:${PUSH_ENDPOINT_EVENTS_PATH}/{{ thing:id }}`, + 'topics': [ + '_/_/things/twin/events?filter=eq(topic:action,\'modified\')' + ], + 'authorizationContext': [AUTH_CONTEXT] + }; + + if (common.KAFKA_CONNECTION_QOS) { + if (common.KAFKA_CONNECTION_CUSTOM_ACK != '') { + thingModifiedTarget['issuedAcknowledgementLabel'] = `{{connection:id}}:${common.KAFKA_CONNECTION_CUSTOM_ACK}`; + } + } + + connectionBody['targets'].push(thingModifiedTarget); + + return connectionBody; +} + +function constructKafkaSourceConnection(customAckConnectionId) { + let kafkaConnection = constructKafkaConnection('kafka-source', common.KAFKA_SOURCE_CONNECTION_CLIENT_COUNT); + + kafkaConnection.sources = [ + constructConnectionSource(common.CREATE_UPDATE_THING_SOURCE_TOPIC, AUTH_CONTEXT, + common.DEVICE_ID_HEADER, common.KAFKA_CONNECTION_CONSUMER_CONSUMER_COUNT, common.KAFKA_CONNECTION_QOS, + customAckConnectionId, common.KAFKA_CONNECTION_CUSTOM_ACK) + ]; + + kafkaConnection.mappingDefinitions = { + 'implicitThingCreation': { + 'mappingEngine': 'ImplicitThingCreation', + 'options': { + 'thing': constructThingTemplate() + }, + 'incomingConditions': { + 'behindGateway': `fn:filter(header:${common.CREATE_THING_HEADER}, 'exists')` + } + }, + 'ditto': { + 'mappingEngine': 'Ditto', + 'options': { + 'thingId': `{{ header:${common.DEVICE_ID_HEADER} }}` + }, + 'incomingConditions': { + 'sampleCondition': `fn:filter(header:${common.DITTO_MESSAGE_HEADER},'exists')` + } + } + }; + return kafkaConnection; +} + +function constructKafkaTargetConnection() { + let kafkaConnection = constructKafkaConnection('kafka-reply', common.KAFKA_TARGET_CONNECTION_CLIENT_COUNT); + kafkaConnection.targets = [ + constructConnectionTarget(common.CREATE_UPDATE_THING_REPLY_TOPIC, AUTH_CONTEXT) + ]; + + return kafkaConnection; +} + +function constructKafkaConnection(name, clientCount) { + return { + 'name': name, + 'connectionType': 'kafka', + 'connectionStatus': 'open', + 'uri': 'tcp://' + common.BOOTSTRAP_SERVERS[0], + 'clientCount': clientCount, + 'processorPoolSize': common.KAFKA_CONNECTION_PROCESSOR_POOL_SIZE, + 'specificConfig': { + 'saslMechanism': 'plain', + 'bootstrapServers': common.BOOTSTRAP_SERVERS.join() + }, + 'tags': ['benchmark'] + } +} + +function constructConnectionSource(sourceTopic, authContext, inputHeader, consumerCount, qos, customAckConnectionId, customAck) { + let connectionSource = { + 'addresses': [ + sourceTopic + ], + 'consumerCount': consumerCount, + 'qos': qos, + 'authorizationContext': [ + authContext + ], + 'enforcement': { + 'input': `{{ header:${inputHeader} }}`, + 'filters': [ + '{{ entity:id }}' + ] + }, + 'payloadMapping': [ + 'implicitThingCreation', + 'ditto' + ], + 'replyTarget': { + 'enabled': false + } + }; + + if (qos === 1) { + if (customAckConnectionId !== undefined && (customAck != undefined && customAck != '')) { + connectionSource['acknowledgementRequests'] = { + 'includes': [`${customAckConnectionId}:${customAck}`] + }; + connectionSource['declaredAcks'] = [ + `{{connection:id}}:${customAck}` + ]; + } + } + + return connectionSource; +} + +function constructConnectionTarget(replyTopic, authContext) { + let connectionTarget = { + 'address': `${replyTopic}/{{ thing:id }}`, + 'topics': [ + '_/_/things/twin/events?filter=eq(topic:action,\'created\')' + + ], + 'authorizationContext': [ + authContext + ] + }; + + return connectionTarget; +} + +function constructThingTemplate() { + return { + 'thingId': `{{ header:${common.DEVICE_ID_HEADER} }}`, + '_policy': constructThingPolicy(), + 'definition': 'org.eclipse.ditto:coffeebrewer:0.1.0', + 'attributes': { + 'location': 'test location', + 'model': 'Speaking coffee machine' + }, + 'features': DEVICE_FEATURE + } +} + +function constructThingPolicy() { + return { + 'entries': { + 'DEVICE': { + 'subjects': { + [AUTH_CONTEXT]: { + 'type': 'does-not-matter' + } + }, + 'resources': { + 'policy:/': { + 'revoke': [], + 'grant': [ + 'READ', + 'WRITE' + ] + }, + 'thing:/': { + 'revoke': [], + 'grant': [ + 'READ', + 'WRITE' + ] + }, + 'message:/': { + 'revoke': [], + 'grant': [ + 'READ', + 'WRITE' + ] + } + } + } + } + } +} diff --git a/benchmark-tool/test/k6-test.js b/benchmark-tool/test/k6-test.js new file mode 100644 index 0000000000..7c0844d953 --- /dev/null +++ b/benchmark-tool/test/k6-test.js @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +export { modifyThing } from './modify-thing.js' +export { searchThing, searchThingBatch } from './search-thing.js' +export { readThing } from './read-thing.js' +export { warmup } from './warmup.js' +export { sendDeviceLiveMessage } from './device-live-message.js' +import * as common from './common.js' +import { sendCreateThingsAndPolicies } from './kafka-util.js'; + +import { + Reader +} from 'k6/x/kafka'; + +import { + createHttpPushConnection, + createKafkaSourceConnection, + createKafkaTargetConnection, + deleteConnection, + deletePolicy, + deleteThing, + waitForConnectionToOpen, +} from './http-util.js'; + +export const options = { + setupTimeout: __ENV.SETUP_TIMEOUT, + teardownTimeout: __ENV.TEARDOWN_TIMEOUT, + + // will set later + scenarios: {}, + + batch: common.BATCH_SIZE, + batchPerHost: common.BATCH_SIZE, +}; + +let WARMUP = 'WARMUP'; +let MODIFY_THINGS = 'MODIFY_THINGS'; +let SEARCH_THINGS = 'SEARCH_THINGS'; +let READ_THINGS = 'READ_THINGS'; +let DEVICE_LIVE_MESSAGES = 'DEVICE_LIVE_MESSAGES'; + +let availableScenarios = {}; + +availableScenarios[WARMUP] = { + executor: 'per-vu-iterations', + maxDuration: __ENV.THINGS_WARMUP_MAX_DURATION, + exec: 'warmup', + startTime: __ENV.THINGS_WARMUP_START_TIME +}; + +availableScenarios[MODIFY_THINGS] = { + executor: 'constant-arrival-rate', + duration: __ENV.MODIFY_THINGS_DURATION, + rate: __ENV.MODIFY_THINGS_PER_SECOND, + timeUnit: '1s', + preAllocatedVus: __ENV.MODIFY_THINGS_PRE_ALLOCATED_VUS, + maxVUs: __ENV.MODIFY_THINGS_MAX_VUS, + exec: 'modifyThing', + startTime: __ENV.MODIFY_THINGS_START_TIME +}; + +availableScenarios[SEARCH_THINGS] = { + executor: 'constant-arrival-rate', + duration: __ENV.SEARCH_THINGS_DURATION, + rate: __ENV.SEARCH_THINGS_PER_SECOND, + timeUnit: '1s', + preAllocatedVus: __ENV.SEARCH_THINGS_PRE_ALLOCATED_VUS, + maxVUs: __ENV.SEARCH_THINGS_MAX_VUS, + exec: 'searchThing', + startTime: __ENV.SEARCH_THINGS_START_TIME +}; + +availableScenarios[READ_THINGS] = { + executor: 'constant-arrival-rate', + duration: __ENV.READ_THINGS_DURATION, + rate: __ENV.READ_THINGS_PER_SECOND, + timeUnit: '1s', + preAllocatedVus: __ENV.READ_THINGS_PRE_ALLOCATED_VUS, + maxVUs: __ENV.READ_THINGS_MAX_VUS, + exec: 'readThing', + startTime: __ENV.READ_THINGS_START_TIME +}; + +availableScenarios[DEVICE_LIVE_MESSAGES] = { + executor: 'constant-arrival-rate', + duration: __ENV.DEVICE_LIVE_MESSAGES_DURATION, + rate: __ENV.DEVICE_LIVE_MESSAGES_PER_SECOND, + timeUnit: '1s', + preAllocatedVus: __ENV.DEVICE_LIVE_MESSAGES_PRE_ALLOCATED_VUS, + maxVUs: __ENV.DEVICE_LIVE_MESSAGES_MAX_VUS, + exec: 'sendDeviceLiveMessage', + startTime: __ENV.DEVICE_LIVE_MESSAGES_START_TIME +}; + +let scenariosToRun = __ENV.SCENARIOS_TO_RUN !== undefined ? __ENV.SCENARIOS_TO_RUN.split(/\s*,\s*/) : undefined; +if (scenariosToRun !== undefined) { + scenariosToRun.forEach(scenario => { + if (availableScenarios[scenario] !== undefined) { + options.scenarios[scenario] = availableScenarios[scenario]; + } + }); +} + +export function setup() { + let httpPushConnection, kafkaTargetConnection, kafkaSourceConnection, consumer; + + if (__ENV.CREATE_DITTO_CONNECTIONS == 1) { + let httpPushConnectionId = undefined; + if (shouldCreateHttpPushConnection()) { + httpPushConnection = createHttpPushConnection(); + waitForConnectionToOpen(httpPushConnection.id); + } + + if (shouldCreateKafkaSourceConnection()) { + common.createThingsTopicsIfNotAvailable(); + kafkaSourceConnection = createKafkaSourceConnection(httpPushConnectionId); + waitForConnectionToOpen(kafkaSourceConnection.id); + } + } + + if (shouldCreateKafkaTargetConnection()) { + consumer = new Reader({ + brokers: common.BOOTSTRAP_SERVERS, + groupID: common.CREATE_UPDATE_THING_CONSUMER_GROUP_ID, + groupTopics: [common.CREATE_UPDATE_THING_REPLY_TOPIC], + connectLogger: __ENV.KAFKA_CONSUMER_LOGGER_ENABLED == 1, + maxWait: parseInt(__ENV.CREATE_UPDATE_THING_CONSUMER_MAX_WAIT_TIME_S) * 1000000000 + }); + + kafkaTargetConnection = createKafkaTargetConnection(); + waitForConnectionToOpen(kafkaTargetConnection.id); + + let thingIds = [] + for (let i = 0; i < common.THINGS_COUNT; i++) { + thingIds.push(common.GET_THING_ID(i)) + } + sendCreateThingsAndPolicies(thingIds, common.KAFKA_CREATE_UPDATE_PRODUCER, consumer); + console.log('created things'); + } + + return { + kafkaSourceConnection: kafkaSourceConnection, + kafkaTargetConnection: kafkaTargetConnection, + httpPushConnection: httpPushConnection + }; +} + +export default function () { + console.log('no scenarios to run configured'); +} + +export function teardown(config) { + console.log("TEARDOWN EXECUTING...") + if (__ENV.DELETE_THINGS == 1) { + for (let i = 0; i < common.THINGS_COUNT; i++) { + let thingId = common.GET_THING_ID(i); + deleteThing(thingId); + deletePolicy(thingId); + } + } + if (__ENV.DELETE_DITTO_CONNECTIONS == 1) { + if (config.httpPushConnection != undefined) { + deleteConnection(config.httpPushConnection.id); + } + + if (config.kafkaTargetConnection != undefined) { + deleteConnection(config.kafkaTargetConnection.id); + } + + if (config.kafkaSourceConnection != undefined) { + deleteConnection(config.kafkaSourceConnection.id); + } + + if (__ENV.CREATE_THINGS == 1 || options.scenarios[MODIFY_THINGS] !== undefined) { + common.deleteTopics(); + } + } +} + + +function shouldCreateHttpPushConnection() { + return scenariosToRun.indexOf(DEVICE_LIVE_MESSAGES) !== -1 || scenariosToRun.indexOf(MODIFY_THINGS) !== -1 +} + +function shouldCreateKafkaSourceConnection() { + return __ENV.CREATE_THINGS == 1 || scenariosToRun.indexOf(MODIFY_THINGS) !== -1 +} + +function shouldCreateKafkaTargetConnection() { + return __ENV.CREATE_THINGS == 1; +} diff --git a/benchmark-tool/test/kafka-util.js b/benchmark-tool/test/kafka-util.js new file mode 100644 index 0000000000..41c93a7a5a --- /dev/null +++ b/benchmark-tool/test/kafka-util.js @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +import * as common from './common.js'; +import { randomIntBetween } from 'https://jslib.k6.io/k6-utils/1.4.0/index.js'; + +import { + SCHEMA_TYPE_JSON, + SCHEMA_TYPE_STRING +} from 'k6/x/kafka'; + +const DITTO_COMMANDS_MODIFY_TOPIC_PATH = 'things/twin/commands/modify'; +const THING_PERSISTED_ACK = 'twin-persisted'; + +const DEVICE_FEATURE_PATH = `features/${common.DEVICE_FEATURE_NAME}/properties/${common.DEVICE_FEATURE_PROPERTY}` + +export function sendCreateThingsAndPolicies(thingIds, producer, consumer) { + console.log('create ' + common.THINGS_COUNT + ' things') + let messages = []; + let batchNum = 0; + thingIds.forEach(thingId => { + let headers = { + [common.DEVICE_ID_HEADER]: thingId, + [common.CREATE_THING_HEADER]: 1 + }; + + messages.push({ + headers: headers, + key: common.schemaRegistry.serialize({ + data: thingId, + schemaType: SCHEMA_TYPE_STRING + }), + value: null + }); + + if (messages.length === common.PRODUCE_THINGS_BATCH_SIZE) { + console.log('produce batch of messages..'); + producer.produce({ messages: messages }); + let from = batchNum * common.PRODUCE_THINGS_BATCH_SIZE; + consumeAndValidateThingsCreated(new Set(thingIds.slice(from, from + common.PRODUCE_THINGS_BATCH_SIZE - 1)), consumer); + messages = []; + batchNum++; + } + }); + if (messages.length > 0) { + producer.produce({ messages: messages }); + consumeAndValidateThingsCreated(new Set(thingIds.slice(batchNum * common.PRODUCE_THINGS_BATCH_SIZE)), consumer); + } +} + +export function consumeAndValidateThingsCreated(thingIdsSet, consumer) { + while (thingIdsSet.size > 0) { + try { + let messages = consumer.consume({ limit: 1 }); + messages.forEach(message => { + let consumedEvent = common.schemaRegistry.deserialize({ + data: message.value, + schemaType: SCHEMA_TYPE_JSON, + }); + let thingId = consumedEvent.value.thingId; + thingIdsSet.delete(thingId); + if (__ENV.LOG_REMAINING == 1) { + console.log('things remaining:'); + console.log([...thingIdsSet]); + } + }); + } catch (readTimeoutExc) { + console.log('timed out waiting for kafka message') + throw readTimeoutExc; + } + } +} + +export function sendModifyThing(producer, thingId) { + producer.produce({ + messages: [{ + headers: { + [common.DEVICE_ID_HEADER]: thingId, + [common.DITTO_MESSAGE_HEADER]: 1, + }, + value: common.schemaRegistry.serialize({ + data: constructModifyThingMessage(common.DEVICE_NAMESPACE, thingId.split(':')[1], DEVICE_FEATURE_PATH, randomIntBetween(1, 1000)), + schemaType: SCHEMA_TYPE_JSON + }) + }] + }) +} + +export function sendModifyThings(producer, thingIds) { + let messages = []; + thingIds.forEach(thingId => { + let headers = { + [common.DEVICE_ID_HEADER]: thingId, + [common.DITTO_MESSAGE_HEADER]: 1 + }; + + messages.push({ + headers: headers, + key: common.schemaRegistry.serialize({ + data: thingId, + schemaType: SCHEMA_TYPE_STRING + }), + value: common.schemaRegistry.serialize({ + data: constructModifyThingMessage(common.DEVICE_NAMESPACE, thingId.split(':')[1], DEVICE_FEATURE_PATH, randomIntBetween(1, 1000)), + schemaType: SCHEMA_TYPE_JSON + }) + }); + }); + producer.produce({ messages: messages }); +} + +function constructModifyThingMessage(namespace, thingId, featurePath, value) { + return { + 'topic': `${namespace}/${thingId}/${DITTO_COMMANDS_MODIFY_TOPIC_PATH}`, + 'headers': { + 'requested-acks': [THING_PERSISTED_ACK] + }, + 'path': featurePath, + 'value': value + }; +} diff --git a/benchmark-tool/test/modify-thing.js b/benchmark-tool/test/modify-thing.js new file mode 100644 index 0000000000..563c8da037 --- /dev/null +++ b/benchmark-tool/test/modify-thing.js @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +import { randomIntBetween } from 'https://jslib.k6.io/k6-utils/1.4.0/index.js'; +import { sendModifyThing } from './kafka-util.js'; +import * as common from './common.js' + +export function modifyThing() { + let thingId = common.GET_THING_ID(randomIntBetween(common.THINGS_START_INDEX, common.THINGS_COUNT - 1)); + sendModifyThing(common.KAFKA_CREATE_UPDATE_PRODUCER, thingId); +} diff --git a/benchmark-tool/test/read-thing.js b/benchmark-tool/test/read-thing.js new file mode 100644 index 0000000000..42baceb0ee --- /dev/null +++ b/benchmark-tool/test/read-thing.js @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +import { randomIntBetween } from 'https://jslib.k6.io/k6-utils/1.4.0/index.js'; +import { fail } from 'k6'; +import { getThing } from './http-util.js'; +import * as common from './common.js' + +export function readThing() { + let thingId = common.GET_THING_ID(randomIntBetween(common.THINGS_START_INDEX, common.THINGS_COUNT - 1)); + let response = getThing(thingId); + if (response.status != 200) { + fail(`Failed to read thing ${thingId}; Response: ${JSON.stringify(response)}`); + } +} diff --git a/benchmark-tool/test/search-thing.js b/benchmark-tool/test/search-thing.js new file mode 100644 index 0000000000..ff126f4513 --- /dev/null +++ b/benchmark-tool/test/search-thing.js @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +import { randomIntBetween } from 'https://jslib.k6.io/k6-utils/1.4.0/index.js'; +import { fail } from 'k6'; +import { searchThingByFeature, searchThingById } from './http-util.js'; +import * as common from './common.js' + +export function searchThing() { + let thingId = common.GET_THING_ID(randomIntBetween(common.THINGS_START_INDEX, common.THINGS_COUNT - 1)); + let response = searchThingById(thingId); + if (response.status != 200) { + fail(`Failed to search things with feature value of ${value}. Response: ${JSON.stringify(response)}`); + } +} diff --git a/benchmark-tool/test/str-util.js b/benchmark-tool/test/str-util.js new file mode 100644 index 0000000000..b2ea680506 --- /dev/null +++ b/benchmark-tool/test/str-util.js @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +export function formatString(str, ...args) { + return str.replace(/{([0-9]+)}/g, function (match, index) { + return typeof args[index] == 'undefined' ? match : args[index]; + }) +}; diff --git a/benchmark-tool/test/warmup.js b/benchmark-tool/test/warmup.js new file mode 100644 index 0000000000..e017eab197 --- /dev/null +++ b/benchmark-tool/test/warmup.js @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +import { getThingsBatch } from './http-util.js'; +import * as common from './common.js' + +export function warmup() { + console.log(`WARMING UP ${common.THINGS_COUNT} THINGS IN BATCH BY ${common.BATCH_SIZE}`); + + let thingIds = []; + for (let i = 0; i < common.THINGS_COUNT; i++) { + thingIds.push(common.GET_THING_ID(i + common.THINGS_START_INDEX)); + + if (thingIds.length === common.BATCH_SIZE) { + let responses = getThingsBatch(thingIds) + responses.forEach(response => { + if (response.status != 200) { + console.log(`Failed to warmup thing.`); + console.log(response); + } + }); + thingIds = []; + } + } + + if (thingIds.length > 0) { + let responses = getThingsBatch(thingIds) + responses.forEach(response => { + if (response.status != 200) { + console.log(`Failed to warmup thing.`); + console.log(response); + } + }); + } + + console.log("WARMED UP THINGS"); +} diff --git a/documentation/src/main/resources/_posts/2023-08-23-ditto-benchmark.md b/documentation/src/main/resources/_posts/2023-08-23-ditto-benchmark.md new file mode 100644 index 0000000000..5083c330c7 --- /dev/null +++ b/documentation/src/main/resources/_posts/2023-08-23-ditto-benchmark.md @@ -0,0 +1,465 @@ +--- +title: "Eclipse Ditto Benchmark" +published: false +permalink: 2023-08-23-ditto-benchmark.html +layout: post +author: vvasilevbosch +tags: [blog] +hide_sidebar: true +sidebar: false +toc: true + +--- + +This blog post is presenting a benchmark of Eclipse Ditto. It consists of a few scenarios to cover most important ditto functionalities, test the performance and provide a tuning guide. This benchmark is done via the [benchmark-tool](https://github.com/bosch-io/ditto/tree/master/benchmark-tool), based on [k6](https://k6.io/) load testing tool + +## Setup and used tools + +- EKS cluster using [m5.4xlarge](https://aws.amazon.com/ec2/instance-types/m5/) nodes. + +- Deployed Ditto using [ditto's official helm chart](https://artifacthub.io/packages/helm/eclipse-iot/ditto). + +- Deployed [bitnami]([Helm Charts to deploy Apache Kafka in Kubernetes](https://bitnami.com/stack/kafka/helm)) kafka helm chart. + +- Deployed [MMock](https://github.com/jmartin82/mmock) instance - used as a 'dummy' receiver for ditto events and device commands. + +- [k6](https://k6.io/) - load testing tool, used to implement the benchmark scenarios. + +- Deployed [k6-operator]([GitHub - grafana/k6-operator: An operator for running distributed k6 tests.](https://github.com/grafana/k6-operator)) - Kubernetes operator for running distributed k6 tests. + +- [MongoDB](https://cloud.mongodb.com/) instance of type [M50](https://www.mongodb.com/docs/atlas/manage-clusters/#nvme-considerations) + +## Scenarios + +The benchmark test consists of 4 test scenarios that can be executed independently and in parallel: + +- [READ_THINGS](#read-things) - read things via HTTP ( get things by id ) + +- [SEARCH_THINGS](#search-things) - search things via HTTP ( get things by applying search filter ) + +- [MODIFY_THINGS](#modify-things) - Modify things by sending ditto protocol kafka messages to specfic topic. Ditto kafka connection is reading from this topic and processes the messages. Ditto HTTP push connection is configured in ditto, which sends events from topic **/things/twin/events?filter=eq(topic:action,'modified')** to a monster mock endpoint, which replies with HTTP status code 204. + +- [DEVICE_LIVE_MESSAGES](#device-live-messagescommands) - Send live messages to things via HTTP. Ditto HTTP push connection is configured, which sends events from topic **/things/live/messages** to a monster mock endpoint, which replies with predefined ditto protocol message. + +## Preparation + +1 000 000 things are created with the [benchmark-tool](https://github.boschdevcloud.com/bosch-iot-things/ditto/tree/feature/ditto-benchmark-test) by sending Ditto protocol messages to the topic that a Ditto Kafka connection is configured to read from. This connection has an [implicitThingCreation mapper](https://eclipse.dev/ditto/connectivity-mapping.html#implicitthingcreation-mapper) configured. + +The thing template, configured in the connection mapper looks like the following: + +```json +{ + "thing": { + "thingId": "{{ header:device_id }}", + "_policy": { + "entries": { + "DEVICE": { + "subjects": { + "nginx:ditto": { + "type": "does-not-matter" + } + }, + "resources": { + "policy:/": { + "revoke": [], + "grant": [ + "READ", + "WRITE" + ] + }, + "thing:/": { + "revoke": [], + "grant": [ + "READ", + "WRITE" + ] + }, + "message:/": { + "revoke": [], + "grant": [ + "READ", + "WRITE" + ] + } + } + } + } + }, + "definition": "org.eclipse.ditto:coffeebrewer:0.1.0", + "attributes": { + "location": "test location", + "model": "Speaking coffee machine" + }, + "features": { + "coffee-brewer": { + "properties": { + "brewed-coffees": 0 + } + } + } + } +} +``` + +Example created thing looks like the following: + +```json +{ + "thingId": "org.eclipse.ditto:test-thing-1", + "policyId": "org.eclipse.ditto:test-thing-1", + "definition": "org.eclipse.ditto:coffeebrewer:0.1.0", + "attributes": { + "location": "test location", + "model": "Speaking coffee machine" + }, + "features": { + "coffee-brewer": { + "properties": { + "brewed-coffees": 0 + } + } + } +} +``` + +## Warmup + +Before executing the scenarios, a special 'warmup' scenario is executed. It is making 'GET' requests so that entities are loaded in memory and caches are populated in order to provide optimal performance. + +Heap memory needed according to number of things: + +- 10 000 hot things ~1.8GB for things service and ~1GB for policies service. + +- 100 000 hot things - ~3.5GB for things service and ~3GB policies + +- 300 000 hot things - ~5GB for things service and ~5GB for policies service + +- 1 000 000 hot things - ~16GB for things service and ~15GB for policies service + +The size varies, depending on the size of the things and policies. + +The scenarios are run with 100 000 warmed up things. + +## Scenarios run + +All services use the following java vm options: + +`-XX:InitialHeapSize=5g` + +`-XX:MaxHeapSize=5g` + +`-XX:MaxRAMPercentage=75` + +`-XX:ActiveProcessorCount=16` + +The scenarios run for 10 minutes each, screenshots are taken from Grafana, from exposed ditto metrics. + + + +### Read things + +This scenario executes HTTP GET requests for reading things by id, like so: + +``` +${DITTO_BASE_URI}/things/org.eclipse.ditto:test-thing-1 +``` + +The tests show that with single instance of each service, it is possible to perform ~2800 reads/s. Attempting more, results in high garbage collection time and drop in performance which can be seen in the "GC" and "Gateway Traces" dashboards. + + + + + + +
{% include image.html file="blog/benchmark/read-things-scenario/3000/gateway.png" alt="Gateway" %}{% include image.html file="blog/benchmark/read-things-scenario/3000/gc.png" alt="Garbage Collection Time" %}
+ +Scaling gateway to 2 instances results in only ~3500 reads/s, because of high GC time for things service - ~5s. Scaling things service to 2 instances results in ~5600 reads/s. A maximum of 8400 reads/s was possible with 3 gateways and 2 things instances. + +| Setup | 1 instance of each service | 2 gateway, 1 instance each else | 2 gateway, 2 things, 1 instance each else | 3 gateway, 2 things, 1 instance each else | +|:--------------------------- |:-------------------------- | ------------------------------- |:----------------------------------------- |:----------------------------------------- | +| Reads/s | ~2800 | ~3500 | ~5600 | ~8400 | +| Command Processing Time(ms) | ~80 | ~2000 | ~50 | ~70 | + +### Search things + +This scenario executes HTTP GET requests for searching things by id like so: + +``` +${DITTO_BASE_URI}/search/things?filter=eq(thingId, 'org.eclipse.ditto:test-thing-1') +``` + +In this scenario, things-search service is used to perform a search query for things, based on the provided filter. + +The tests show that with single instance of each service, it is possible to perform ~1700 searches/s. Attempting more results in high garbage collection time and drop in performance, as can be seen in "GC" and "Gateway Traces" dashboards. + + + + + + +
{% include image.html file="blog/benchmark/search-things-scenario/1800/gateway.png" alt="Gateway" %}{% include image.html file="blog/benchmark/search-things-scenario/1800/gc.png" alt="Garbage Collection Time" %}
+ +With single instance of things service and 2 instances of gateway service, a maximum of ~2400 searches/s can be performed, with high GC time for things service - ~3s. Scaling things to 2 instances results in ~3400 searches/s. Scaling to 3 gateways does not show expected performance, because the nodes things pods run on have high CPU usage - ~90%. To perform more searches, nodes with more CPUs are needed. + +| Setup | 1 instance of each service | 2 gateway, 1 instance each else | 2 gateway, 2 things, 1 instance each else | 3 gateway, 2 things, 1 instance each else | +|:--------------------------- |:-------------------------- | ------------------------------- |:----------------------------------------- |:------------------------------------------| +| Searches/s | ~1700 | ~2400 | ~3400 | ~4900 | +| Command Processing Time(ms) | ~70 | ~100 | ~50 | ~100 | + +### Modify things + +This scenario sends ditto protocol kafka messages, which cause twin modifies. + +Example message: + +``` +device_id:org.eclipse.ditto:test-thing-1,ditto_message:y!{"topic":"org.eclipse.ditto/test-thing-1/things/twin/commands/modify","path":"features/coffee-brewer/properties/brewed-coffees","value":"10"} +``` + +In this scenario, connectivity service is used to create a ditto kafka connection, which reads messages from the provided topic, maps them to a ditto modify command and forwards it to things service. The things service then executes mongodb update query and generates the [thing modified event]([Things - Create-Or-Modify protocol specification • Eclipse Ditto™ • a digital twin framework](https://eclipse.dev/ditto/protocol-specification-things-create-or-modify.html#event)), which is pushed to the MMock service instance via an HTTP Push connection. Also, the kafka connection is configured with [qos=1]([Apache Kafka 2.x protocol binding • Eclipse Ditto™ • a digital twin framework](https://eclipse.dev/ditto/connectivity-protocol-bindings-kafka2.html#quality-of-service)), which means if there is no acknowledgement that the thing is persisted, the operation will be retried. + +The HTTP Push connection looks like the following: + +```json +{ + "id": "a70c0749-261a-474b-9fb2-8fff7bd84fb4", + "name": "http-push-connection", + "connectionType": "http-push", + "connectionStatus": "open", + "uri": "http://mmock-service:80", + "sources": [], + "targets": [ + { + "address": "POST:/{{ thing:id }}", + "topics": [ + "_/_/things/twin/events?filter=eq(topic:action,'modified')" + ], + "authorizationContext": [ + "nginx:ditto" + ], + "headerMapping": {} + } + ], + "clientCount": 1, + "failoverEnabled": true, + "validateCertificates": true, + "processorPoolSize": 1, + "specificConfig": { + "parallelism": "1" + }, + "tags": [ + "benchmark" + ] +} +``` + +The kafka connection looks like the following: + +```json +{ + "id": "4cd191cc-aabb-4965-a1b4-dfe8ae8674bc", + "name": "kafka-source", + "connectionType": "kafka", + "connectionStatus": "open", + "uri": "tcp://bitnami-kafka:9092", + "sources": [ + { + "addresses": [ + "create-update" + ], + "consumerCount": 1, + "qos": 0, + "authorizationContext": [ + "nginx:ditto" + ], + "enforcement": { + "input": "{{ header:device_id }}", + "filters": [ + "{{ entity:id }}" + ] + }, + "headerMapping": {}, + "payloadMapping": [ + "ditto" + ], + "replyTarget": { + "enabled": false + } + } + ], + "targets": [], + "clientCount": 1, + "failoverEnabled": true, + "validateCertificates": true, + "processorPoolSize": 1, + "specificConfig": { + "saslMechanism": "plain", + "bootstrapServers": "bitnami-kafka:9092" + }, + "mappingDefinitions": { + "ditto": { + "mappingEngine": "Ditto", + "options": { + "thingId": "{{ header:device_id }}" + }, + "incomingConditions": { + "sampleCondition": "fn:filter(header:ditto_message,'exists')" + } + } + }, + "tags": [ + "benchmark" + ] +} +``` + +By default, the ditto kafka consumer is throttled with limit of 100 number of messages/s per consumer. This is configured by the **KAFKA_CONSUMER_THROTTLING_LIMIT** env variable. This value is changed to 1000, since with the current setup, more than 500 messages can be processed. Single connectivity instance is able to perform ~800 modifies/s. However, "Outbound Message rates" panel shows failed published messages from our HTTP Push connection, and the following is observed from our connection logs: + +``` +Ran into a failure when publishing signal: Outgoing HTTP request aborted: There are too many in-flight requests. This can have the following reasons:\na) The HTTP endpoint does not consume the messages fast enough.\nb) The client count and/or the parallelism of this connection is not configured high enough. +``` + + + + + +
{% include image.html file="blog/benchmark/modify-things-scenario/800/outbound.png" alt="Outbound messages rates" %}
+ +Increasing the connection parallelism from 1(default) to 2 solves this issue and all outbound messages are sent without fails. + +```json +... +"connectionType": "http-push", +"specificConfig": { + "parallelism": "2" + }, +... +``` + +Attempting more modifies/s does not result in better performance, the ditto kafka connection consumes at the same rate of 800 messages/s. + + + +Scaling connectivity instance and changing our connection to have **clientCount** equal to number of connectivity instances solves the GC issue. Performing 1600 modifies/s also results in high garbage collection time(~2s) for things and things-search services. This is the maximum that can be achieved with single things and things-search services. Scaling things and things-search solves the GC issue. Further scaling of connectivity results in only ~1800 modifies/s, because MongoDB's write tickets get exhausted, as can be seen in the MongoDB 'Tickets Available' metric. Scaling MongoDB to higher CPU instance(M50 General, 8 cpu) solves the issue and ~2400 modifies/s are possible. + +| Setup | 1 instance of each service | 2 connectivity, 1 instance each else | 3 connectivity, 2 things, 2 things-search, 1 instance each else | 4 connectivity, 2 things, 2 things-search, 1 instance each else | +| --------------------------- | -------------------------- | ------------------------------------ | --------------------------------------------------------------- | --------------------------------------------------------------- | +| Modifies/s | ~800 | ~1600 | ~2400 | ~3200 | +| Signal Processing Times(ms) | ~15 | ~80 | ~10 | ~20 | +| ACK Times(ms) | ~40 | ~250 | ~50 | ~100 | + +### Device live messages(commands) + +This scenario executes HTTP POST requests to ditto's [live channel]([Protocol twin/live channel • Eclipse Ditto™ • a digital twin framework](https://eclipse.dev/ditto/protocol-twinlive.html#live)). An HTTP Push connection is subscribed for them and in turn pushes to a MMock instance that acts as a 'dummy' device receiver of live messages/commands and simply responds with pre-configured ditto response. + +The HTTP POST request looks like the following: + +``` +URL: ${DITTO_THINGS_URI}/org.eclipse.ditto:test-thing-1/inbox/messages/someSubject +Request Body: "anyMessage" +``` + +MMock pre-configured response looks like the following: + +```json +{ + "topic": "{{request.body.topic}}", + "status": "200", + "value": "ok", + "path": "{{request.body.path}}", + "headers": { + "correlation-id": "{{request.body.headers.correlation-id}}", + "content-type": "application/json" + } +} +``` + +The HTTP Push connection looks like the following: + +```json +{ + "id": "a70c0749-261a-474b-9fb2-8fff7bd84fb4", + "name": "http-push-connection", + "connectionType": "http-push", + "connectionStatus": "open", + "uri": "http://mmock-service:80", + "sources": [], + "targets": [ + { + "address": "POST:/live_messages", + "topics": [ + "_/_/things/live/messages" + ], + "authorizationContext": [ + "nginx:ditto" + ], + "headerMapping": {} + } + ], + "clientCount": 1, + "failoverEnabled": true, + "validateCertificates": true, + "processorPoolSize": 1, + "specificConfig": { + "parallelism": "1" + }, + "tags": [ + "benchmark" + ] +} +``` + +The tests show that a single connectivity instance is able to perform ~600 live messages/s. Attempting more results in high garbage collection time and high Command Processing Time, as can be seen in "GC" and "Gateway Traces" dashboards. + + + + + + +
{% include image.html file="blog/benchmark/device-live-messages-scenario/800/gateway.png" alt="Gateway" %}{% include image.html file="blog/benchmark/device-live-messages-scenario/800/gc.png" alt="Garbage Collection Time" %}
+ +Scaling the instances and increasing the value of connection **clientCount** solves the GC issue and doubles the messages/s. Performing more than 2400 live messages/s also results in high garbage collection time for things and gateway services and this is the maximum with single things and gateway services. Scaling things and gateway solves the issue and results in ~3000 live messages/s. + +| Setup | 1 instance of each service | 2 connectivity, 1 instance each else | 3 connectivity, 1 instance each else | 4 connectivity, 1 instance each else | 5 connectivity, 2 things, 2 gateway, 1 instance each else | +| --------------------------- | -------------------------- | ------------------------------------ | ------------------------------------ | ------------------------------------ | --------------------------------------------------------- | +| Live messages/s | ~600 | ~1200 | ~1800 | ~2400 | ~3000 | +| Command Processing Time(ms) | ~50 | ~50 | ~100 | ~240 | ~50 | +| Signal Processing Times(ms) | ~15 | ~15 | ~40 | ~90 | ~20 | + +## Additional tuning properties, not used in the scenarios + +Ditto 'tuning' environment variables, that were not mentioned, because those cases were never hit, while executing the scenarios. + +**THING_PERSISTENCE_ACTOR_MAILBOX_SIZE** - Used for special actor mailbox, which handles ThingModifyCommands, see org. +eclipse.ditto.things.service.persistence.actors.ThingPersistenceActorMailbox. If number of messages is more than +the mailbox capacity, modify command results in error, like the following: + +``` +Too many modifying requests are already outstanding to the Thing with ID 'org.eclipse.ditto:test-thing-1'. +``` + +**REMOTE_OUTBOUND_MESSAGE_QUEUE_SIZE** - See [https://doc.akka.io/docs/akka/current/general/configuration-reference.html](https://doc.akka.io/docs/akka/current/general/configuration-reference.html) + +```none + # Size of the send queue for outgoing messages. Messages will be dropped if + # the queue becomes full. This may happen if you send a burst of many messages + # without end-to-end flow control. Note that there is one such queue per + # outbound association. The trade-off of using a larger queue size is that + # it consumes more memory, since the queue is based on preallocated array with + # fixed size. + outbound-message-queue-size = 3072 +``` + +If this limit is hit, the following error log will appear: + +``` +Message [org.eclipse.ditto.things.model.signals.commands.modify.ModifyAttribute] from Actor +[akka://ditto-cluster/temp/thingProxy$AsP9C] to Actor[akka://ditto-cluster@10.0.157. +154:2552/system/sharding/thing#362290016] was dropped. Due to overflow of send queue, size [3072]. [10] dead letters +encountered, no more dead letters will be logged in next [5.000 min]. This logging can be turned off or adjusted +with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. +``` \ No newline at end of file diff --git a/documentation/src/main/resources/images/blog/benchmark/device-live-messages-scenario/800/gateway.png b/documentation/src/main/resources/images/blog/benchmark/device-live-messages-scenario/800/gateway.png new file mode 100644 index 0000000000000000000000000000000000000000..1d74a2f3551e7bb85f4f5896871188b11e564e3c GIT binary patch literal 50994 zcmeFZcT`l%_AZLsfD*TYA|N11Bs4ik6%d-7bCA&FOhc1Vkt86}NEVQsL2?EW$w_j~ zIp>^iweGWz`<=7z`B##@X7W1pQPV4?NLJl0v2vczcGD%|gA;XMTHn_DJ$bQ~ z|Jx?Zof{JSi3E|Z7%v|=OBTJ_t8!X$o;KhPEDjABEBvg3Np$dX2li&0Jihrj{CV{A zH}dJG%rolWmBV-O25zZ}f1G(W&wC(SGjvd5bV>dV8uo?ab`#p1F9tTHSw2$3AjN2G zx*|CWGB+8A^MQ+nOI@+#l#vb%?aCWdVPQF_u<$g&|UCk7_yS|RU z%lpa2GWfmaHoN;)j=T>ehc{B|UO0*sG$?lSnHTMu*( zx3>2g8w;zt&UswIKDMC6KjCkK*HcV9jGHKecbu}v6@Ua_dWgRrdp?D?A z@bnEDq4EbgAMg7)M6{0-ipUPPaJfA~v{=g}Ud*XIxlTvbgnNNrTgkB-if5(p7zYky z+H~{xvFk(}qZfiD>y5X5ce;^V6ke-Zop$mAtZ>w@5Bolu!O<&9y(cCSlRPB2~hlK zmlwQ86*Eyh{80sNEc~nVi1Co$&d`WgLFD-#O@L1V z6ee)E4KEWD0)b#eurXTO88fl)@bEA(vof)=LO>0Oy|Wcu&k15>Pl;;cXB#3gdjmUD z8@Q>p)k9R9divH5Z~+PmaQ)#w`e$h)E&XTnR`!2L0my^NNzaCfg^`)b(vs=dJM7`2 zj-Zi0I`nVvuvY@>lt}?*Z|z`b026hDS-~lPZNkvt&--m0>@0o^$IyTYW&yJVRqer3 zS^n}!F{rfMpLd`{U~Fn>^W!cc?7!56n;QL7Sbymo>dKGd{Mr$4`=9OprS?C@{-ZLe zB`wV>Vr}4n>K;@?fCBY=UPEgGQ$yY#Z}kkg4Y&FMjSLfG~7 zxj48Cx%F8&U_Y8NG~j)1ZD*+mrqk3?<vJV`co~0!rY#PvxKj6s(NQ|16QS(1RO+ z8w4n%OsyQ8{&_*k)Dor$*F#B@g_DPag_VQm>-N@0aD<*6?5Q!3BajtP&mXdS z`1r>}(f+kI!UTqz1t2g8GY{ln1;+HpfSFJ>;~yjDXZjbJ@c*dri;)5M{VW5<3)n)Y zKaJrZGDDf2|AVhT=Hmb06F}4deaL?#-~Wp1zvB9jB=8?q{;ziZS6u&*1pcGS|JAPl z*TjYKPj?Dt1yB$II7@6QM!Ue#x}h&ACW3Z}`uS9y779vk*@&y#qoHBqp?u{a!SnOmRx#G!S8%20_TBhTOvYU8 zHmVoxt?YEm7bnbZ99zr*BY}o?hG}H+8|uxq>!`o4f4qNs1-yNT{`o!C=~y|;z<_dl z#{zX#_746*xqaK%m{xbUyao1;qHpbujn8l0+P1j$<0C2lgN1A0-P9!dj|PAL@syh= zCgd-V_-DzbT8-Orf2#7SamhsitTn67-1>9El{u4p7Qao^ZhIf%JBQ_^FXRvzaaUW% zKQ)`kF1}GcC^lYspb)fDOj`a9SMWjlt$0reU!@kVfDjAIQ_B&qZh{F#rTk~}wIAb> zg)WY?F$uc*m22s7&vne{%^j9|6dhLkBC4yaf3vz_GM|~k>$0|m$rJqBb)B9n9?2rJ zeO8Ei1#`Xge5;FT&$s1NPvW5G-V>Pp8v;V+4Xr5>($X!QrG+B?J<;5HnKjY;Iy5q* zu4bzwY$K=EhyAQz5C*9qa=vi3geR0T+23Kj-3j$B}3DXlr1L&#tau+;>#Asw5 zaK!2+i?d*_UDin8GbJo7-M5^m(8(HP@SHmdXVT7F9Xw}uY4>H?>yoFZr|&pCmUlha z_>N4$?5|YyEH>+wsXle=AFo6liCzU$<8kaznyYmzjNEIbcTgHDd^3=%nQ(NpCtHeJ zO^_Lu72ev@BZ2Hobk-ycOO=ipfFhBKtb*UQYxMo8T3AYxCY)v=(noG@PjFqtZr`4c zVszc3nN?1);~)`mRD1R6ic9$lJrUc8X1wf?Qqw!KmXKX;#71D}xrfTa!a}B6LIJPC z(j$8|dx-jpdr3LAzyB=^92^BLtugya)uf~({0DBTw6t9`Un&r*NpIdbxz{#}A=%;0 zzL}>h<|Fy`F<&Xa_GOA{29fNh+`!q$`1UQ?(}8d>SGRvB{+{XgFM7PL8-a;QN%2l3 zGBTYzq=#WMv$Mr69d`Y>%Bu12PPEQ%9DEpQsdgir%2K0NvPt&r(I!)4)%U}?ck7jz<`Hp3yxFy9x!Up?8qv?5dEF(v+rotP z@)Oz?Gdk`%n|mymwa(o`h6L=G0XlyEcKFH2ewLJO?Y0YLN^+`MLuN|UKv;Nq>b%hT z)}q(!Zq13)H)EGd+g+?QNt9kI0U73ue%8R;6uPfj?oz&R${=6LC}3|PcN8aJIa1Qr z(ZOLqqE&3wFVm)a_I~+kK~z+EPme<3nB~ozWeKl@T`p-(S0;2FO*fe;^5MR^~j-ae zZ;vy*AflR!aN5TOZx^d4(~^^y>Te4l!L9(MyTCN=iVLT@>y{yxx~r2B;<3~^U`Z^U z*3i&kR-ej2r=D2E0D**k{FtpT8n8MpcvZPTgs|b8i0SBov_`Q}dEoP;36HGu8#wnf zMTOc`y-u*hm~^ik#|dPJ1}tXjPS(+BrdGY)nCLE@ltmmb1%$~B3|&`|i+))k1>Qqs3%5nwwq2Kn6g&0C#&9uN zawW?&k(br3c2U1_<-+VtMbTk-;CYC=tm9D6CF#3@JztKBX;1Bhgt|=m>JlXK4#(x` zu$`Tqim#)#AqcfcY?lX2>6;SHmT?2+P? zRulG>BmYUM-3yP9U`Cya7a9w7daCypjOaA_6xnLFyKBx}IUGhr=G!841t%dr<-0W+ zWlj^6UBqmT$ul$h4l8@Nst-npFX)9q3s_E&2JGBrzUsJsSpbW=FYJzKZLd^WUQ>2+(|Fv^zmyaU|e8)xcw>6Q|B zCLw)!rw7fwg=No#g*lAYZlboRiRv58NuPb6J$qJUx6ishTq%q+G>(vTpCn1v$m^4T z_Uttd8BaP;Q92gd?fk>hT2d7*gXrLJM$P1)m_f7sw~&$DHW}#{LE2tRSET!mFPF2y zw@`ba@~1D7gcpTvVXNg@xuKzjRJ3$-biK~UJ9p*G%rc){EJkdsa0o32_#1#V!(ePo z;Lf9$i4qjO>ScPHDr1J`ppIF0m9)>M=}59S&ZXlM0;X8SeKQUY`-^*2b{FLw20^osS@XcJTqf6h16e)mo$Q+3n9a=7B@;f8mn zdu1n`d}0yRa`8!CmiDL&1{T)$Tmhjhqo9$?V9TS$tE)cNRn(J(X>*GRQROV9-X=;x zMK`zX@be-OT3RTPfLWCUzO3h`p&WB24$B?|UtF?2A8B*t;?_2lIYcG{GZoD}O4j>^>vD11oH3ZjeRpCHNsFB?aq-mmn$2bLzJdJzYZ9@=v~C zSNEs4D30UOD`!*C)0Ut+BfeHJJ@p<&;>Aep=4 ztJA%|>M>GoUb!;pstpuY@i4a<#vEySaac&^I&n3EQCqGq0wdIn zqU2<%^74w5&DBF)%KgFmK79iN!}vCxr-;oZF#RxgB4EI&rH||^d@QF{W>Pye2irP3 zbvAKH$R#D)e09)WU0s2JGp#!;oZs}+-h^)&xQvHIs8YM1v@Bu-m!+k&-9w?fS;12Y zM#kLK%{<*rhjDC-p8Q#{xwW-K+jw_cO-)UR_J!B8XPah2-*0CseeGZDIXlh|i+=+KIyH!F`6VB@B@T55M4jx{Afiv;Eqm5EM7g0-h zH*`WbFvRlYZQC4CmOk2HBMf@3uC9@386(pgQTozuu@izDoTyRk zQobBTB1unQ-TkRsag^pfSG#|X7LN*A!dZgC*EO*M(#CGGW|yyY*(VppP%wtFmP8?7 z!O~&v=r%-)ziaPPrEK1novp{2#9X=OT{Sv#35U7~>Nn3+>z=7_I9)i8$MX?8J7a##$@yH&gYPjA#+Kh_tga_oo$~7%4h{?Lw9uZ7YCd-NMnkAV8qT<(rDal!uI&5CV)~H+SoK1?PO`*Z zdU{62=XdFq1`^2@04V7|CRaJ{Ebre4Dta;fv1!7(^t=knMXwU_!J~O0XOs(OZhqQK z7!#w(-z|6*AjAS{&~K=&t1g*=c?q?RFmPI243eCr&Jgo9v*lwrB~g< zr0%2d`*$HTw9pEh>8j--`$c!<0z*?^5s%v{?odO4(jt>x51&ab3LLHG2L-L;F_978 z1#ZFP{Z&3SQtyD)iHWC1Mn;6BFYX6D?{(2P=&c8!DWT%h9VcDRz;%-^IgAniqmxh%KHwcorjUn&Hk#&)+Eyv(8gN0sbN4PFD5V z?Yi_(A?C_a2D-i{5j28Pb@$U!q>1SB)Y|Xd5QsbH<*C?yUtdv^)o5AmS})6CX-e#P z64^^3HC+)A00z9mggh@!PZQG~ki-_bEuUNt6YQRsPx@YzPZH26sbyqjR5+fSodky7 z>CciihAJd+O@>qLuXU>mxbAg)u0h{aIV?L}4|VEszk&Ajis9&|qtyWQl)ZZVIEN|` zF|ih*sYc<+aVYY&*Jh?$IffmgEp%FK_K|hzdlcMZL--(($W0-yZDX7J?LEPX>}*_~ zbNfy`!q}w6Zls4*L_!<%+BI&_(3%Ua+ab531~bgTi0P(X&pFIB7wZ3O^~@~N*+ zX}p@4>hk5PgtYq}rd%j8lufA3fH}0T{S&*v$YiG^veEs*e`fZQzmJ-n{9HTKL#sqC zO@?eR%Rxsmh^V+P+ms%1q8A6e$qYQ2cV=IvbX;;ggi&*r*Y7C|yygC~E+OZ{(bK64 zp-qAaA&WWOlBR_E(_+)z3arKPswkcZ0P(^MLXV%CfL(BT_I5lNdqt|uDP8X|&cX82 z7p5>;b8~arllWL;7|g*_Fv`n(8`mCY9j}RGZQsd5c_qYLd7%ICh%jmZcjWLJ$R zLf6>PE(COhugraR;&C#Gck7DtFq9H!tq$nb42q7HDJ(8l1eQXnLP?#PhK7D>0Xr%x zDnn}7E)~`qMwG@r^^3Yd}9|}kT14m|0>;*sG z5iPbJ6a}Vh#PyQoLiu)Y@o61}WZL&znr2Z-+N-B;mFq0E zTH)NQt2cdk(Y;vC@At;jPB9)He`RZP8|(T@Db$Jp{81JP?Sf7J`t@;@;t2EBmKOEN z&bUWVKtlwK6s>#;_6Z&sSSMD_Hn9z(Q&wqHWpHLB+jBfUfIt;0OJe61R&rhTbs|6? z+B@1WyAQ1=^F=8I&y?zY-Lvs%f-}@Z!)4ETbJa_q;n7Hi9Ueh>cSgzkGqhz@R8&Sj z+XjKzE{2UhFSZ(%@w!o!2W)q!a-5KJ7gr^AWNgf1mIeqmii<=;2}qIS*Gk0 ztC)}bgk>H}kW`=9VdtooOAQRD*f}^1TGx_Dd2YpU#Yc0Pk^|xl0~c3uxIm`@u^E>b zw^e<@q*L(_Xqnk$2@3xjTEdbBbzOIdH(%m9e~yff&g3vxO_y9m%n5iD$b96^%v8?G zF!b+P>CQ4p<=z4g7&ejN+4tsPvA}-G>lkLIU7AYg^UQxATNIo63&n)M8ZjMM zv+mnl4+p+UP>IEOIuNqZ0Y8*ZtIY4tof+voS0{yXk_Y{X&cx2n%1Xda7dwnT*Dgn1 z7`_b_zibeY9%zS;QSo(PPt{kw%1L@slkvMH9StOMu8J02ch>pAO zua8t~>&(-y%x7{G*$+BupUl1n7C>dTG`jWcSE*N}zx8hgHDXi}WXfLD`EGf8r(KdK z1H5(O+;s1JJF@iD9oX_OwM}gJXsl34$zEXhx&hmvT%&azQ_%dL{DkqWlgEWj`FIxNg7PQC+Zxx3F4FKo0Q_&3l}*I`8l8h(=2rDc8-VMd)iSZO zTbbAx6rE+Ghudpz)f3pY!JIDE;np8LuK}n;j2b0zfr`U$FJUX`labQ|TrAmG!35y^ z(P=f;!$-Uj5EMCq{eZb|ZxZ+xZCP%j{ki*@9uxV>h>fvK)0M8MpSjY&~6tTF& zsR|e1kAp=ea1ew=+BDoC3ehYIEiMi+>WTse(6h$z5f2Y^wpvL3O9%1FP(s$*yO3N! zB@F_o5*dDMyL`yn{K=?8qpf{y^4v_wwNo`mqbMvOOY>y(>x5^aH?UFr{c~MmNMs@) z2r}*FGd0Rgtb7Is&Xk>;A{$+URe-Z!;jo+$fq~x>sICZ~F+8F1l#O1?sjgj9$%%I8 zFIU6`cBH%1KJ`3l)oE!t>eS`7eWeI3lL1@`U-LJ#_s}^0 zWB8^{`m%bOzpfi)mwrQkjp8nYdo@|rtvcW$uvJyB7RnW+rx{7dr^yPPiUa%(t0W9Q zGYQnmQPhQKaJevcG5+SXZPSd0HWkw7wo^WXH?u!#jXp1*99h+>+Se#;UU;@I15^~C z+7&Ooq$2x6&g0Wbr$-S6R#v%j0u%kf3oL+1p?&H7LN1H;QVigYRA6Z;9G9u{cJ3A% zt;=c@z@L_sZ2=6-s} zOb+@wC5nr|lqZ2wPWP?p7bsus$z{UIKuVfXdox!34OGk$`TWUwx=CI;hznjJqprt4G_LXp)-}?IxJcy5a8xRmiHC|>bU2Zol1Xov8 z+-=>M&g|*uC7_;ubyD{*9o5%Ek?uwleH8wm?q*s!=vx#jd@q$ zOGnIFNBbS{gV&B!pV2M1n_uxH!v}_1*w-!Duh|BoQ!o|McBEZt#>;Njl$%4u{UY7M z((>-@+vKjNW2rEb2M_Q`Lyo_vZ!SowPJbl@QH8fvO|m^Z@!?B@?zo=Y2mM(dJo@O& zZ1?TjEn(p=!e7LJ-*ELdMa;Js=RS|AsYUJGjEt(#FfoTm7ga<=BHKG4?4BEU-1%3o zj$`eq0*?a!4pH{ekrQf_y6h7z^)1f==uHWz#|pb+1s?|P|_S^dJZez%191o3x4Ew>TrMQ`3b zu-E)Yw<2K!Un}{4gjjzudA|zf?}DcPTQU9J4E~&p|8xd_hJ%0YhP=i zE2g=zSAS#L2TwWinPiDP&b1fAWhMw#DTHEja(Pl#CAh`ZYdxHqJ z+K9UM9w%uALOs>4o;40@71&vO6I0VCj*V`^Bg3Wu|KkSz2+i|6ek>Emo0|&Jxg4FR zpro8TZ@B*m9Z1XY%Kv9g!2e#ie=e!Nvqit^_P-=Q{GBcOKfTC)bmS#LU_-A)NK8!S zO26f&8~em42wg$AboqULq-f()XROO(kR$-M$WrU;W=DQ?tsrExiA|dO)my-jU4mW} z(hD$qZ4Gs+hhvG$@mdB9u3E&hHWtC6@0R zwE(92-{Oy@+3wA@$x9zz#9A)EA0{9&j9Z;u1-M;5@`^I<`N+}MKMZsoLwrpo!mChL z?yL-+@NCoj@#Cd;L|kU6sL-x#ZEmpINaXSdFJF)Tmmb0nTi*rOk6~#W6WA_uFls8Q z1wWF9w6r`;V=8~x@LNVv#r%VxnD1ll08iG|HXoS`+(EOcmk9;M#mXWgZ`RiBW5OM5 zY~-9o7KD>(V%W3+G)&j`rbF$&ZJrv5x`zU14Wl6;ApqmBu;lYBl(0%NOESxX-?r@e zs9MWx5FuZ7z*$(h7cGSF$GE%qo(jdmkSEjuqc8|OyG+%*S5z(IkYIiR5Q&(VBpjGu zTcd~{4!|cQ%mCqL^T7=g05Mnc;lwD_pZ|TCaGMo!lPWB3KOF*FmA2RUvr?=z_ ziasmoE4+RreE`xJhRU7`-*A5jn)wiJ)`voxfvsw>)6;qy)kfX`Ga-SC1PlW^FzP=* zQyi^zvEv9{xksLhVQeo z_(D;zqu@$Fww)-TirL|6o=}CXdzNJ7A7ix{u}OA9_ye5js5z8Zxw3oS#g0Z&f$Hx= zy=LNFs_SA{iF*6ebh*mQ%FNoAZjF?B=H0n-hZV9qH}`?k$7J(8{jZDYcu!PBWbWf9 zZp4IYM@)%Iyv|kl!WykRyPcncf&ytpc37D5yP+!#5C;3dz;ekF%(oz@WZHb{t_<=k z%&K=XT^v1CH?ddK`uh5$+HRnuFZz-5^6~t|0u+W@9G2t*7G1e*!4eLlR2{KglDWAX zcD9Z%u!Ev~@q9QcAe?ViPgl+5R8|wqqFdtVs8Ony^6XiLBDntYQ(2yQuvl%IqM_lN zs@nVYbErawm$I#>6MKK>j{e=&^1pRQ|GO%#1CjoxtKy+~ffLeu^xtiN$Yj96WEpjg zu-?Z4G;%r!8q$LZn^yVSJ^(^=T0_FmlZx#6SwSG$7lI2OJy-O}#@4Yvv0=9ew(5hG zrkbgy%#k_RcUphrafeA?GE-UxNEZM}fuA-0ZhO=u1MM_JpH8o=qypa3_@{R+;3(n` z^+zUCis5Fs9b=$cXbs!#0R$D*FMH(b&^9IEK)z$Y%KAj5FyIz}i>D9}(XM#zVx5kP z={7a3f(;+Uo*v=`QxNeU2@lT~r~*#HZK1QTL9&+Z2Q1D)_YMfi;w{H`nkh-MZC+wQWgjUE{zWN_NDaljhwDBf6juXL%E@mkp(|;4Nc9z zti1S|qobomJbWQW?ey=ib><{uD{>#7|aE^a8iSL zr%>eC)!Yn~jtXS*NV)9<6zO zeZkxeU<2S=BtQgzB=gl(pH@I@-@bjjptQ?UV}QKW>+5FibBbPP92|_`o31nTX3Y1g zpst?7Iczm)${G5w>fW4Et8tt@gng>eK6YsA(D2A#22~jDc~+AD=l(1u^dUo`fezyq zwu+luRcGv>G6-^^BD5gIvRWbOU1$7Z7}X!-04nuh2c!li=W5mL<>hT9`}Zn?X*jqj z(3A{kR0?bDkNn}7lN~p8$$@+h^VUB96Pu&Q>KbaaEVNHUAGxN9)t9sJf=H8*R175) zC=pjIx3ki}cm8*Db*DE8I^}B-=vmhBb*zz4!CfO3QJ|cFt9dNn+IF7=uOYm-5#+sP z2r=p!2?GrB1Bn>PY2^NmTW<8uH{O^GCX1SiIPxDfQ1;G1HrO*1g00*QnL~lp`vTQ< z>3Mm1>sdjToQw6A&3s3wEC3lGKA5GFqti(Rkk`wPq(9Q(3kU>hi9uU`2k)j>7>2H? z2mFfz7;hQ{Y+dH_;t>#PI~N{A?IF~UsG&%}RvWqVDf`-9!H!ku2OUJT19$+%vf z2&tV~?Dv_mvj#*E0<;kS)rRR9$@eB@aX&J(pOSRC5v}?q&+wkpPaH zo`n_~TUpX-Ik6YN{adW&Z2eR)uwi+YE!*=Pi5tAb$)MPWvXp`7tFaDfDEI zC>e2zP*xifaM&EtjO9E0zDF23yd_KM%MT-mLZPU{Zd4xphYxd7i+l@?3cy=MrRfvO zknwL_Ew<=ZLC&qrWNv+K@8bO^;HpvYg9{=CNWdC@Xq(WPzRk}ULSlS8mB+MMdl-Vs zV4CyICL1;m&&{>sS3LTyz31y!1&}D!&DBeD8;|MBdC%U%mUbx=a2BJR`cd1PCIMD}dH0UVf}onsF` z{>|Vt21r2f1x%G8I}tUMtV&3tUne)AvhHcLfH5yIM@(mdbKw9621d^|UTr>0;W2}@ zmKG}CYJa0&7dZ0KeAeM0tsPcxRH%NBK}{UlSE1}0#vm_|kdP3)&Zdpn_?=*Q|1gCL z#HMv$z2YKsxrtM7!C+uuz;1m}8hyV0OjJ~qj+61ZurKzDq&xULsQf*84i4qhgUt|M zv2LtIQ8BTYni|LT%+#(UjWn5fxs9=M4!twOV|1-Skg+a_tcenozjrSj5Q4%E>phZ~ z1jnCk!Tf_XHRU89Y3|O8>*cx^|JK#F7_;DPd;k7-RCIZ@L^|5>I1xa&w8Kf_gpi~O z<5{EL$q2xktd9a&ooz!#J9j|jv%2?O8~eeSWa;LZ0`O8mMubquc2r%Xdn@-GZH&oq zRV>J>Ga1-(CgQNm{`m1DyZH$}NaQe9V+1S=h_lghaEJmYn%8dc{o8vGz{2n=l}I^5 z6(l4Ia7ahe04q|cS2)cO!-c{NlG1V9+J&iIq3*d_DB7|$BI`?IhfyK>Pr3obGsC-0 z`rc`4f}D1b;gOL7)W|6*De>>!OKpo_l0Y6@RA@E`NEV=)Bum%HNu8OQg>Uz4TJ%}) zwy~zPtr&f(1<>XLXayv)DOHcqTMQY$G=5y*4-N%H)f|AFy{;yi9$+ygkam1?D*6hj zJjA{tD5kTMli5gMo}r#z#?CyQS=R)K9XK`c@|+heoqA~t?$V#6BboKV0n)`bDv%neDBWaD%vDs+SpDDici=| z0NN|aFYW~q&moiHGmmn^WeQYQwc!UqFPRLKDh@k!y-fHKpT){^LXoIjb57X5_%;87 z@WrprzNDch$P?CfIh~uamwRUE|(&5t!0d}w0#_to?|Chfl?S8C$VwL@wMYx zqbJ0Y2nbLbLWW3SRXrReRs7&~itFtmq!e!DJuhhUO5Z~}F}*rqu4i6y_(LWwR3hjm zvfO}l{3IFYhk(u$RlM8U_G2?7su7Y4xlB;xjEq&7a>&~P8^~h=3FKFgGqqb0o}qO; z8l5DKttDFSU{!tR@MgT9U6kxp4!?NTn9MyMJE8mz;?q|0brmCSLOH|b;Hloeg6X_R zVf>7Yh5T4lteyL!`Meds9J%0mn9cHgi)y0g7p9O^WIr`@o8X`=w{^6DR#`E>iIZ;m z#FU4Fh~VgE|w(SMVM9UHh7LIRK8 zDj^-VS0n;3loh5#)m>G>Sa{?^V$x_g+GVJc6&T$tY6lX(0Zer37(arMoc6w)H5uOD;bi^_j_y_1mmx+nSY-QL7iaml6X z2&(rbv@wQ)^3aG57d7V(}|&w=373|sa-7dr>?>4&G-G1C%-#fPf8=Zq1x3qP_>==OjKen1^v#W zCj$7W$L>&F$Ml*GAFMJ%GT0fbV;9jKlIbM6^ zTUely1yTEu?rpz8!M(^7MBQ!3B*XprO6d$o{-bY5Cp#{*?NgOmof2|&UTo^+uX?BM z~-xpr;pjab7y!)11StmoMo)dV^YI!#L((%+Ij)MgB} zTc#c@oQkPmYsFx62>Ovv9AK}=| zmloFNSMoc99fJv6N|HGqacVTh{dkr^=X})8H8|lr)71wyc6CW^Y*L!Wc;#E3!4|Q9 z%rX)hDZ5F@=_I%TBYN5YZ0wz=2!w23d=UC`HYn`6;EE-v#{3@t=)a%eZ{Gjz)0BP>-voeV?Kn-+=a-@fx>nb)SL*4ENf#tu6%w1>e<+;cPcW>T=sJu%mf+ zTJ6wu(=k=9(;aHO~7 z2an*J8PsFY&7aF1$ba$b+1}EGuiMk(o0z!9?L)f5#jZ4H;Mhu{@gd^o&6`tOA;M=z zyK=cYL1hNRwbKg=oqlAOpESD$KdUKhm`RYUUt6nN;nvdqgVFv!H(Wp|DMM> z*0`6-q?yW(R_VA|mIj-&=E{o!BQmrSoT%Ab>-Jrg2&1NLX@Biq7{zA20O|2t zY@B!B25zUn*!jZac-=Fy!wAjI{oJYAo(rIv=8xrUQEZ44yxI;j&pn?0%z+|V&#mts zf@_0d;x$v36P9|41wafVZI?LD4y2F?Ucx^M*kBPIk>uy+SDjmN-Eiv;rs%qtv>GFD zW$R!^@5yCeWbKQ4>%3Lp1}Aam=2a{+G*WJWB%@Ez-3oS7orqhZji0T~%}zHF#E%|4 zcyPSdo2QmRyfb@P@#rY2%N7p*R#z9|L5A~Ur*9kXl*2*56t@^OSUGyR;Rw4_ znU_$$HBmDkSAXpbS(4}Uk-vedPL^^ZBgk=YwIS|}A^jv3wMeVDaO|pcaPGKU;qT`s zzA%ups`;&bl<F@v2LxJCX+zD~ z3^B4DTD5Bx+{7z2mS=fm)cYu}mPGvYU5?3QKK0ewmCN`+Nbfa_ENbr$9}J~Z)r`7g zW!^n_<>Y$2@^6KZSsnzOX17G3j5d~zFcfi7q z+wfa7!tilP1LtuUO@ra#;V8t!#Y;j(0%oiBKK5Jil{sgWN^~bZVsYHVr&G>0V_H3x z5yBu~)V~}DwH2r(3(XJTVU@B}FHdfs-U6Oul6<|9+g@GTf$8hlJKMcmlTkdDQw{V(y7u>)=cI@pKjqbbs3&~ zxW2c1egy{yXE~SnOS>uN@=y&XUSr3LmAUf1Z25>m-kO#*!T`e4CPN7!)q#uBEz0pz86~`9)bp#fWU*UqTmuT)^fpt)<>+bfCDooSojNt+HKrEQ_5h7QsRBCZ{ zy$z_RUtra9DJiVcQfqQV?%2!q*V)4#zvWT-;@$J0_A1dii9e3Ajk$7mUJyBu0U*cE z?**_~Xg5tvr1XFL?yKS3Y8WYDv2l-f>1Bm26V@fkWeiawVs<4&ID5s_T6I=id)#C! zodZiEhKBC%T%TV&@~0FL72D|?-DEQuU}w~>_!3=A zzo|Lz)wrV}C+!P@NW#0JEhWTwL7nhltwb${w;iKWy(RiCK z$2Bz`*9==4yA8z9oN{Jk%F4=mYI@r~Jl1*JB}CkQK%%)muBDo*m7v)r^WpLKgLqF~ zzrjhju%RJM++^T&ged8bnfh|jrm|>T-p~W*4ixHcz%DdV*8+S z+&>^-KI@fmhGrTmaHFeX<5myEa`#qtZ-mkJPk9{*>W%FA7j5pbVy|)~w5^UW?^+?o z#s!YfdY_(gu828qjLA$Qgi`n0)+5=SAAnHy^jLWz)>)m4-lHDXac^Cmq<)PlrY zxAXH^+|Ife--x}rA~!dz58v2(6z_H-m|CV*L&Ew|*cbP+@h0O*%`S_l%meAIgPgsk zftW#FM}wiQynR|q3JTdO>zY$m=~3p#x>pX!${d#VK>lgZnNGGEbRgxO+GF({9;tkm zvy)vlH#c{+Y8Rean!rZ0;?(1qQTGMoM#~#phlgp1yqaqZ?F|X_=tmB7!6Krf;Bw#y z+wyUj0RAPX)Y$4|AQ@k51EvZaY{mj*^50tvqJOC$_gY#?*Gvt5_wMU>z1KGpHZqSr z&eSq)A8e93TwyV}T&)Ilg>GQ2PzyP!>B6VqtO3{!{I(#k9hW6rJIB_~Ym@2fNjTsD zPVr^UQr>ak$+KU}czIl_9f=5AKMgm^QlOgxXM|4dg3-{eTK&Wm%O ze#BTKpR{LTZ8*b22L3=m=-C{M5!xBzN+Bwu3R8b4Fs5)iz2{ctZewqsq}0OtQ2-GR zPFmjv1i7x{y^%Co37JL{b|ei#XJ%&Rcx@MVxX4-9XSKxQSod3FV}a=|FV>B#0TpH57 zINW+@-1(&QBaieTY3xnhQg5$mA#B+3TWYl&mDgTep)?3mG&+^^ubCY5+_pRSRlhP8 z8jZKIuhxKXE9i{l>*&wAovl;(acABtTlmEbMnFRx8MNmG5+23~>H!p(v8xh{0NPI- z!KB-2Q$e6>@+K{f#(Z#eKc6bag9bs(IJA3(gFN2o=Cq8!I&&mlxxVzoeDKI7cw*wnyeuT1PFM2;9~z zwS44s8s68+JiBB=Sx6XE5)aPjurWx60>-Kk7v1GN$Wf#z8C#YkYfx|LGr1|wORk9} z=qtDDS4M5fyz1U>IEp^ksUJKXNYIUoi<@h~`*v}a9L#!P>SbEYRlk0HC>sOqI(+a_ zHlOSaAQ+IVG49BB!}FZSQg^x8)m_M_cflc$ceG(~>QH=KFrq>-QcA>9NQ1!u5`DYi;*Olpjew5Oxx|A5&`at*a{@ck&dU3&92E zyZ-EYp`~7TOO&k8G4dtD74FKhbOJImGC=&qZ=Aqd?mPjD+jQuY>5A>lmjTO|EBE*I z7ppEbR2zfhTBqyL?{m0(gQ(sIKt9gUauoj1e82)2E?hzxRd8BpqO0m5^Ws$x9}PN3_6JRuLVu-8McMTHaBY$e*%aQybmgcAE%TC z5lVXsX$MqE+`D904nICQv0dJw7TlO5ux26?Tt4IpBIbmFL-&`a;{e*e&}}9K*l;tv zV61$H87z{CJ&OJU#x>7ZgKs{V&Y&@H~&v0RW#d-JIcE@|YwaMCG0F-v;7bmy& zOLc$0QxWmoalGF5h{=(X^^x_`^_AkAAXWQYySid;)dtweDr5L2-43b2mxaLBzI%hP z^6va6+5KhU+R1tYEAz>vcw}$&vJ*mJXdTXF{k!|*a?=!fye;)w!TCPDUPMbcN6a}Q zt3P_7zA`*eS*x<#KqZ1nam~`j61);N7)8_hc0_PNq34e ztr13?xyN}Ie=CDwL=ZZN`X~`(RO;KT!dv3RoJVY$UX; zTvi>5_G?;9mEfbIfa8V~lIS4o?|-s%Q1x^k!CCTkkvB>`FD=9RS&$ zZ$T2xWQ{reS#{?XJ3`jWJD@zIcNO9$8Ej_GdN5&05r?5%V~2%76^Qt&Gt|?Cf6ExC z74&wHpgrf}@&=_^#hODimnAMZI7-09`Z8sr*FJjwc^g6Xhs9$shnFu&9*pGaL!6FX zKvMYQ{RWZ-DfQh5Xw+;0Fy{xBx2MCk>~>eXwX>J58fH^bK#;)ltW(g%#SGQ>;P_a( zcUM7FT1;*GyeH>ohL=0-LqXGIt77-D#+dYp*L|IL*VZ0T#k!17qK}~V4;B(o7 zQNuUZr#Z9!ZyHE?k#FJb+Z z-)%nJ4WbD=lxmZw`<9jfu0MNL;sYGw)y*dUCm0wlUEv+uN+?1?Cof!ADC*Bl9`fuUra{JHGM_Ctusv5f0(Gw z>W`J3C{$lwecG~iI=^~$abdMLct`lkX>%|Kj*VVo{)4^{(W6qRw2+%F+deBwBI2<< z;JI+UV$vT-tlwrUP$@^u?~UbNEL=G^&$?wcBOX@-b{;;az)|GK-n8SdC;)YaXXh9D zJ?1U8DgMBJ&>oPhd2Y>Rwe-vNoGi@!q5`sU@T2~IJMd?lAZWU+MJ<(1$8;c|q&JYH z9^6)at>k$4U|*$!1CRYmm4~-38$ey~Rfh$cfEh!^Bs-M=hTeF*P-`&y&A!E{&S?^n zWCG8Q?_~Mm>VWnB0%H5sOW%kk%&3Ah`aW%QuwLF0>*F6#zzHt0)81_L=f8gfp9KH& zUEnw2Mi%SSG{9f;p+*o+O1<6j`om7Wed{6g`vB%|vg%(R{?lP%`k*_?rH0JENt(_& zM8B9xgKb1WGd_J)+*e}K;+Z3x1tSp^ zrXwDYw;>g`Nnnvz0m+A##>fQhg|6RE_rF@QRz0)xMZY|*$}s6nA)!%T;EXGCc-gl( z3)^~En#s66wkic=uY}r=KbUdf-lE-lpI*3GK@SqSJ@H;=^P{X5v>Mb}qR~)Mc@u#{ z+-?+da-lNEj!$r7{P~5Ybyo6e;o}9lt*eOU@NBqB`n9dPHUAxG6~Vo%*4DRnH$=UF z0{G_ZTeWJ-hEH^6^h*|YxyQ()QJcb1gzB=V;chgRF99@CK(KTC@l&~!C!t8R5LvgA z-8rAqQdSR6YwL}pF6THI5HJRN1TFXNWBA;vNHiPU&;`5D7k__xu#5jnL+2w0XF2O^ zm&;cC**XB+0F@sf}|U*{qzjk(*6N=XP$)gk`s&bNcRW1zaJT*vg(6? zQ8d5hbUxYQQTXxX5T}2Bx-9QxLMDOdvB3D}{GUcc-isZw1{(O}_gx6Wxjo=(ZB8u@o+$jLCKcGqT zOs2`S|0>pn)d9E7FX~rg(;!l{x^UV(YzaTQk8i<3p>S;o#1(t`=2jY%-gH^ z{MdWJr1n~7N6irdSTY2!}_tjvG2f@wzRg@2T9xjk?@pvG}XJ-7|#6Q1lz6{hb(;W200Q<6CKG4SwXB$ zTjqpZE(o6iR!iNCH+H3ent)K6Wo2?ml4B|H=W)@W^X9?fd0vk7oj zcpPq+q^XxX4u$xE!qb5Kx?pB+?&*nt<8#7lbo3Cov1pB>U5Br24ETp$4!ti@2?r_} z?E%+;K>Oov2vB2#Z67{$JXl(8^msxT@YpFFr%MNL@uE~mV<9rnPT&29OVO@Vf;?kBGjW5^PU*36PeZuCfz0r}}px-t8 z&i-`e6WhY}_8S|UpVzMdWTN|!+YTyNeFLha=B>~k+`9(u7$78B^>i-_A@vh9#z9v)~9<8G#wsA!Tbmy&9Wlm0}Uj$!l}Nc z%^xR*>skgl%eZIf6Cgu!VRdz2!qewz3@Z++p40;Hjo=;zDEG^V6$x+en<_CSM?&|K zO?AbwVyKsw5>SEp}3Q+ zp2t)Gaf`HG?f(J13%acFZCg{7iZsJ;Yz7scV1DX=RD+>~qgw~f>dPM=hn|5vm$=H; z7zjYnMfc{*)Yq(&(etx2`Ep54yKR_no7SiGlC}g+=Qt&3J)jJ!iKZL+fxQK^y`8u2 z1QD0b=Y=+j*>Y)KUfxF!A8Pha&b@ZM02z~YUBHu_*`KT{1i7GU^)|G#&N(pmT?`=8 z&>mw+u3WD52$-5Qg$@n`8s!qU^RLm4m>V5>#}qDC8agHQPR-4%EPXSd~lRG$m)g1YL;Htw7j}1v#*t5VPTQ(SQyinTvGrTh7b(V4T-y8sJ?#~ zSiU^Gym$xOI44Pgx30JJV4}Q|TC^YCC4UI3N0gC~$&^uU1Pt%FVJkX);W81EMt!=tEp)Q^gzvP1}=}>NN{j)sAR53>`=4PU+8U#*5jWs z&Y|K7pO|o-t<*3B&jZ9d?tJxvq)M)@vgWU*@}stc=p105B?c~Y}`e?JIusO zOluSil>3AE(WLC_5f5;dI)_^F)yh!w#=6J8Jp|q^g2Ayo0nix5y|~s43k!cV+Ymk9 zA}n7fjwYSN;|8@J0~BYblm;1v4f7j!TrCt`5V)~uoER-QB=f&j3Bex?dU>`vP^?n$ znwxXqDo?2^l=lh0ySo+Qiu57hJn*p3ts;+vnc=t=T}88BfJwas(F5SvOuRhz(yQ~N zJDRsryf|Ro4aUBsA);U|9IY$Z*YyVToiX(7g3@!H>42Zw*W~g9`t~Y?{{97|PFs^t zozGK9@5vK5R_z@fr3;;R_r@iacThN&6K-8`#|&Oyt^sx$4h;I$xj)wFAp%kngwN*7 zb?xKK3rE{8Jnogx(*QIOgVBe#g8?pu{T#aZ;WUcvh5{gYFEv)*`D038Xn+XC`Mmqw z6FkT5D8s|0M+-+e;S`ipnwM{2 zpi}{r;B-Q*;rs5!hMo4s*SD7g#hD+$UcKD{U05(do7hw;05pe~k6of;gSoqlt1G~R zq@<*LeeA96(@D7z2GSI?w2vxAb(fKQ`+R}(xTz_AeOnFU28SS$7C^un*>DS!-aF~* zP2^ymbw=iy;RV{XlGT?rvw1~wfMXF3z77n}Ijut2ny&LqbVpLyIrsazGuN@gNU)QO z`kb8#o0?i5h>1GRo-p7dNzeRlZkbckzt zh{_LvR5n}3>l=*l>yH+7>j^dcr&Qr$=6i5w?%?@{JeBa%OSb?|&+Vf`4rf}xUBR7j zw*0xTH@6O70yw+IaevI%u&y7IK5KX9RCGLu*iQh$qhDL^_b2nm&o46X{+tOgo2-ZJ zP1fq(L&52jQm{MO!UMG3nN6e5`y91Eajd*O`BKH7W@AxzAV=gjxAoAdcWP(@7WKdj z0MVLd$ZW4snTq)%Yk<8Rp4+-#9EoN2#e5wzq9h|rP{@*j4L@vPO1m~@r_P9)d(V** zoc@Yy<|d}n(V%a()8K-ckKhYns~fJ^6Z~-o4()bNyON6<)%!RoDZQ3P7wLJq?H`Pk z+T#Gk6Ngwi>bxvg}KaHWjSoF~)K!#1#^P5jJZwPK+ zJKH698jC)Te!gNJ@7k=dr{{=zB8ELHoB42rC46WBeWFmTg%!tc*mU;D{RKb_Al3ln z7d6lLojAw}y`es8x(-QmF170X14M*7xlDJ$!jBz3hW1LH%6`*f0g?0cfg0Y2C^fw# z+HRjZEAEL&OD}BO*X%D2%+0Y}12ly|BbT3kUAE9Bp3W{SbCsv-^L0meWaW5k2G6BK ze|^rd3MjQ8rU-cGZ!ITs)iy!vV5^{}lY)vW1jLR(Hm5#VFpmjQK`0&$M>E7DQ=#$Z zmTQA<^&}^+>R@gdU?zf+!NgBfi7U?g3yy$m+v2DtK=tm}$lL<*ZNQBg0Mquh%~_)< z2ys^(>OVs64o*ue5RBt6=X>z@EG~>v!WvX(1qhRarQ0CK@y;KEfWWxH{+A#ikH~3g zNT6RhO0`$n`$3jMTFdP2Dj2A6@Lods+m#D;jfv%B;t01w28ArCU$du9Ka7s$yLllm zXNB$GkG=vN#Bi-*ZhNQNsfTumcVdG0Olu>eiJr_xT}Cx?7#F{f7s?me=3C zf3M^1vFp^>mBb5_hi}ws9rlAdb`o{aI>iTeTrDhYbVf<|N6MTegK77TUiYg z)QM815hI66QZe{|BmNWoijCa?clfkJ9n;LFCa-La!Kc57wyeoCLc@; zBVu;mqQc|f0I9&{n4i^1A-$87WE*-ZR~~|6=Or|NxiY2iKWq1Jke^Y#J_c+R0l=e~qtx3$iI;7EI)rTytI;O}D6D~16=#>QNO-)#ZccB3|iYRhHZ{Yg-e@X6Nf zyK5Zt`(N()2vs@E^CUtxyU$Tpaj%Y7Q7>TD;nH>NphwYIheW_X7rM zit5k23z}53Kcqbd?h{sC6dVEq7lHBh@G2F-{nj9rRV)16zEsBIC4tnlRByf3ogv<|3FZEVdVKtya5Rj1ysv zz){+*CwU8;Ljac-!OyKws89W_i|82Ls~9dF+jZeD;IzTAm8r> zp$n3U>>lf^RJsZ1J0l@kVEWbH=slk(6yDpQCxT-_kPi)_@vyPMM35!|N-;2#m{mO{ zAe-%lyzW`Fx98CyU(u4WK(%bKfOz)_F?M^SU~>8;(KBG+TA@8YwT>or@{R}h=XaA4 z0VBp`?-ULk9qn7Ci>i{JMq^R=ca#A~K-kqKcE$OLjSt2LMufJ71py#vcxWvsu?f#? zu0Evhr@;-&jq+WSU^A&YOTIMiQ|V_IeWC;cQ~B+?PoFxfC^KNU%bX=XK#O~V8L{iZ*a5!| z(8+WA7YK(qy(`-qyDvfB(?|Jy5MpKp0&#zRkZQ_n3k!ar(;{7Avhni~us`%XqTz%@9m|_0PGvj@h}fd zuQ#C?lKxxLI*<8}c ze8u`pr`KQ+flLc*mHN>K;azVBG}IqH?Ch3lao69iSAQ$4Az{xcMPIWoZ+q%fKfgjj zf5_fms-<5W1PmM)vr8fxkaHu(M*VAL!@Ehd5%9b~pBKRohgl3H9Dy+Aok{%K*k_dD zPitLK+Wez+fF(u%3RIR?XL9f`H^}iCQSZMjI{USIY#^-hfpNY&(iqk|i`mgzM%A3g zz(w|ZLhOj7yol90*FIvtI_Y^09OxHqZ3ohGNeF-}vp64aBN%CK595#tsq5A86JrG_ z6%97gp|f*$+?mPcEQP(9EgZ86c6JRj>~eI(9|#6#Y8)ACyxV(5^Q4@q;w7(>P08nIM#6kJ~(3MNHOn~XInZ%kt~@NA(eU|reZrcE+{N>fgqrh;aBZeB9Q)Ob zr8PTG$uUhFv^nJQe*RQqV{mC2r!B4Wu@lLCJJiwTw~1`r6)ixxKyZ|?`FKf9DAa6>R-dcei8mu~GUvk_sLF>YPh3&reU zKGgp9O@<#WEM&-%PDFSPm=lnb^y#9v>tg{nATZm3rsbCIE93D`Km`SO z1;R~Vyf~efWUG5$Ulp#iGD|>_ z_|%S%amXJ3ja}JxsS_hlm==d?>@ZzO4*H_ip)`_nb1|lpCrV<1SZa}%Z>YNy@n!Ev z?eESC%mTxws6EDlgNYQ`+WUYp%JWjSynm(j>uHFV!T^U`sHV78QOqu-KZ zeUPX;u#)1~h_X$SB-QW6w4!1d_My$wj;+(!tvKzT9c%O-sM*)zG0+) zwuv7#nMx{TNld>plzy#zcbvI?@EbOB9jfBP;D_3+%q9Q!yB-WO`G;-pYiOOG(2#TcML*b-1?NkOUlp=f>Yl%@^e0k zglO-X*M-vjc19VtzxapGhZZULA&zhR>YrRVlyAv6q;$mcL5}h0gAG$0aIN&Mf6YX8 z+-|({z3Ts&zat&qZC05XM9%L<8XLPQ$uLPMqW0wjwHIuQW!9;t2H!woBr)i?wsXVS zxHYjZtoQ3Om0lsM?w7-1-}-_&+S~l?XItmrbll=`TD}+T%h=Z4lm>Cvt#uh6^X^&H z$aOR@2kFkQRCbuTswbkcQZEVh_^r=DlyQp}lz=`44HxPW{77hG&1pr$PGhgKXvLNMJ1XBzbrGMJQO!-w;}JwDX2!(QO=lNG?9W zMDpuxZ|M^)r8E1Pvn<#o0R2`BW+x?dA+~&_p95O;(TcQUT2Zwt?HOW)t(u>x%0iF!B`6Kfgrujo7Svc4fB;1lV6cs#I>+N41O6^ zqGS|_`O|kV8DRL)v^#P%s-3Y)n@+M7`FYoT!H4r*k`SVfgh0zy*y4){>Uq~n3u0<~ zC7U$CcN|t1&?FZ<>5`I{6dn!bZKapD?%CSAM5P1Jo}~H3SAuHk!B(57FrWyMUv*P zCGcUDs9PDB?<5H1HGDsWCW3TNkv@OQv}TCwNJl=C??Irjf&5gW2D9T7!AEX%>Vw&z z29M_!rIup%U2K7Y%Jt@+#di*C>nJB-dYk^j$r2TXy(2s!>>PG*&n4hz&bHtt{?3W1 zABU>)Ps$)MddYwIy2Gz~CADia4O zhLHp<(@g3TpJ45;^$IR`=Max6IJkIc0^ZZ^NRB-#d`~+s^qAjAq?&JEkG^Ao+WJcC zS;qjS<(3dKcx1W1;rR$3850>(2GJb-9%G*Ko)wz?fnLS2N^7g~$J$p(>&B9X?KgUv z;muQB0_=06DZds)vCYYqT>|bqa6bvTsCM7j4Q}~3>n<)?Vzp-SER{O!A+I6TlFl=I zCjJ;C1fHE^mDFsM#7$?}g7j@a#V=Fc&5V{;RXpqpsGL_79i}za#I;kMJ$zT%Vittt zEA3W%S6!wKTwJ&Y8e@TGQs(z_dz2J#uay`M*=OgRC5W-8MeZGUR}GgJA`M_!lsDAd zx|4+~wUy9P>=!ysuqf1BIN;_e!6JpRW*zJI0!{f`*nQzs$-!7H^HN?>pIVi-94zRn z(Rn{?6cc1Aof9Vvf>X*F1@!6g@im6fxmdck#2m%p$l-z4S+r0~no!=3UJCxDTzjj} zcRi#r`?ufjv$Eak0#aLMYE{fQ|7&SDr1eg(XW!go*A-_3N9D znAQ`}Bs{*>0AT~Qp+Mrk+RpGkyI!AnD!8Q--kbyr#QvX{(S_!Dq;2w71w9YUPEhdm znW$N91AQF{7Qe~-)SGs)wPlx0i=YpruaPVGiXt79(^5wkrd-XKupi_D!dm8aMP4@{^cx zo$ao^CcGgQ6Q`zpqGtUMkXP-#%My!#{}y7^f-t+cb#`4ZR`qxHQF2HZg;+ZJsjZK; zX5DY-WNBo1%1Ru#!BmD~d@sqclM;?)NNCvjM!Pf5A2&2Gf{k6+@M*39%qtU8(rF=w z_sE~*unXJLpAZ{f@{*M?oV?u9J3W3O&(px#cE~Bukj&cVnb5i8zKIoi__V8BBLG9} zYx?6z@fWu>BMX*JrPkK$gWtWmi6BSMl|C1EI5IJK`O<4C|De52b&x4BaeG`lJM6C) zIr|dVL}{>{k@cnHyDg&Aw#6$_y%&ur12qSV*5;SjYEOq~15}N)R#Y&2#biWyFP(4= zl}8fU%Xl94YH>G6?PIT)2k8%sW8e(0M>?r7BfMu=5K8MdtCejZa}!)u$@hxnUOYEe z<*5mdOP+MHv0~d3QdUwKv#8)NnKtt3OMTQk^<l*hP|E-(H9CwA8sKHgIaF-Tweo;R)hKtf+j*JJc zx8;$`0iz6dZ-7U0OW!x2ygTSP_lV6N%%}%)xY@m2*fIJcwW!tDGR9t475h$ zx2e?OXV%ILd3J4c6$B)#d0#w&YA2?BHZn{CBY%jZkmCrmnlEmf%etxYw;DxQrP`yI z`z_g)xYOKLF+|}ROUkHg)}Ggu+Zl39kME~w4H2}wVc(L_>CT;G<5=UDJ_gYjj6k~T zp&#G5@9>o$vcpVtuZf|3WASe=SeIRyZ{Gpz{xfG?urzn)%z5fW%ptpIpyh5&^tS3p&d7RYhF0vo_G10JQvfx7+s=PWA##+s@M?11B|=X zp5(BCQb&@RFc{?Tnkm{Fd$eFmTeZ%Pg{)UF@(uaXHi5rdxBNR7yZf5rKc6LQHes5# zML1~34PuDJ9(*ah+x8~Y@^kDP&Cld;o50f<`~5tDCU&mthQao7EPV}ANa3FFdvUv< zWS2_8p)ov_vAvXjso=+IKRAOdC3beBKlA2nMA~P_pqO8JVhTyeoZG3eky7^t&z`H~ zrm*f-oRst1u}uhEmu;#qC?|zJ)55S(7oHXQ+@ZI8#NozH`H^HZtAG|5-A?i->UeNM8wqb0Z60GIy<64{7M7~O0MY4b_h1Tg3uB>nY%6e@2oe5)67#a`!-vl zjCETwtA2qMFAOt$0SuCvvG|5mApQtPqhL`mP`)tOWo>=Er;A|8v1cytjaEeAx5E>IuorC#jE@cx4QBU;yJK_r@RduzR4<@N^UN&$+mK(Aa z+9R2yO62M0($@DM@y52UT>F|#$2Y<-kOR2%llg+C5y{Bd!H}cI61KHsQNhgS-+3aN zMYxYIrxu9-Tz2$|>P8Ja&+?ee{!`!1{r>ow(KSpsSM11>0DKye28gz!DE9ZFB-gbb ze#@7!-)I60aDH>mp_1Ebm7y&nM{DYU@Cm>zL-|d~{5LGzf6biz_3U5&1FGz10Os29 zLHX33(4C~5H{#n8~m3{j*| zUXHLzHiVS$>%D}-%X{2i1tBM_=3Wzr`+KCT7jB&3A0JXBY_<9^5Z-w5M??Gf{bvEV zyyf5BBiIj+7I{p>RmivK<4>7ExhHcRio=YCHYj8J^vaB(a-^ikx-W1s%c$jnmR`u1 zQDk0TywmX-v->TAGSC#!^#^i+!gTPq$C#M{#ag;w74rjr%(@lIVeo3?`1R_Q8jWYC z{YrUqyiUO6KbAX0609UU`{bSQ_Ir@_tHTnD3FDOn^^tL}-Mm44P*HmN+uYwD_QKw# zD?BkVF^H@hNi0`BBaST1js!Cy^_nD`K7NL!#iIdUp??ub16sT)?I~{ncevxnTTC zc(+FjS^J(Kcmw>l&Uh1jbC8jdQcWsela!g(;Z|k}lFGy4<9)WvYkX>+nb(ReM7^}P z2ijD!hTtSqUOe!NDykUoE{a~6wgY7eh)5IRrKSF$itR|p;vNyF)gU`I{xyU+xh+;8Mtcd;joHgX@2}7f6A>>+kLn?*0~w`PcjZIGz9X=f9oW z_mSbh?KI?#neDbyZ4cCtRlCwfBjOumA1^c&@%lO%-J~fynj{LOQQs)$eE@P) z8)In=SJ(G+%EUqT>u^*7K@J=E6xqqU@A5dNX=*Oa>$Pte;0&mPfwf1IV?VHA`dh;Pqu_DkETCW_2NkRhpWnm!a%leALhXheJ zNuLJDBru8@ofx4YDrRScjB=?&K0y#GgbN%kPfCUKZ~w)8|b zFqkh_PYR-xtl`P#Aes#AuTUvC=LtBjXUKfP{^SVj_bn2(;7&Ub9R&#T2+*#3Z7nS< zT`Ha<+odX@^btsiva&urV|8(;q~C9MrZB^^wpY@UzZ(gckVRHV0nwt`5=P}*#WHUS zpnb{3LKx97H507RYo2$e!-GSy|gEh;O_CO?{ZC*$DYkwz^4D7R*do0R zy3Q(bVrd;g=_TNl1xOnqf8=jdz@z_UD*x>y{xhxrb^87}@^_Q?&vAr5Q~6)-|89N$ zIsV_Q&mB^qs|WGGzK$16)030G0gD8OIYH@Gke5OX#LwT0in`*VK6tn7I|}lrb;?wh zfv&3t??ulXzkp)iPn#(+AcY$Gdro>W$^tb8gPq#g3%9;pHK_6brp*V2ZE0~4#Pq+a zmMi7RONGkSM11O()yq__A+ygm8rvu@HidFXgn^VdOblxw4=g&l-=-9y`xe!!A{b^c zq)60KO~=RA{6x$5uUr6W5PMbZ%?W4053DA1?qVN^h@-n5z7qx-UDJfqE)Tp^$PExK z;vq@X($q|)t88$mO|k_OyG#HCK}uLBhm;1D2BAKK`)g~L7&P@NuSNEi7BLB&#Xtsp zI;khWY!;KLIX6gySh1EFzbuJqo)iFY_$ERR?`d-s6L*MI-6a4Ej_;`ah-&XIL@m<|?O^ zFDw+TT^w(6xh$o8@!ag1ntCTKE$zfo=@CT8Nh1b7EcAvzJnYKFKS!-fAn_ZYa0Xmq z@h;7PL{do!%d4GI8Mc($C!Acb!8Terq%FMi)%)MwJCHHMj(R-mE|wc%&>+U3n4-3) zhvrjBQF_B`#pF2*;LK$o?nRftLC61>Ci}m;CH+~)pPf7BrKw(JljPbzsLQHofvzvK zp@gM__F!}r>GeQ}@cYSIqn%p35|siV;;2wWe7(F&@;vW@O0`KSXx}FK`|>yA(tv#c zE*Y4Sl?5#y``_I*>Xy0y2$3oB0CI$xETt@_(7g9KnVs3{-7oZMSV!{JL%H9V8QDT7 z%eUi!ir2oSpD$->BXVT+?+pxL+1YzxIXaG(om~+mob{K@f;MDUTa-{!1*6<638cw( z$;=4;4#^xA{JH~|06z~8uiRfZHyIA&U;dVZA{fAXUZhfOO$^Y$&`^lDAV}^uvP?ya-~MpDsV)4D-t6s zmH+>2|5eLe6jD>sbc;V?0idyuAwmy&S%!`Nd*BFR+0pyE)3FLNa&8vPwI*9N_(dYO zy&@yToLmgpt)MTSLZeycl};x+-*Y4LXtT|}QRFC(V6((ZBJUDsp7P=5S8&@$XJz61 zwGF?vS;INrCMgU+E#2BCTH092Y)wxn#rTl>UO{J+NjHWyBGz!cu#+fPrL5Z2ib}iH3pJY)l;*C4Db5GP@gWKAZOH zh@V^cM$o0b+-1f5Z^6-AgTOv$-MRGZS2m0nDcdyuMPDrUb@^ewqA}m8RvoiHZ2;PR zxYqz~85L)c?!yd9u+!vTIeZY4S5(Xd&3?6NY=AC-n3)-IdDRZ_4v<}}y^g7=*_NjT z_7cI1Le|02F;8jW4xP&Ahp_i)PK<4>OX)43xS8&CWfJH|u(Y(44(9zDsFp4-9vt)z zqxk0;kI;P>mIWGn41p}eqw`8;o#KzSCtHS6Ne7P72Cx6km5?bwDn_p;Y|z&I?f(d4 zPukF=q+wRrK2Z0Zo10s`%1Rm3rppO6gYl~=C&GFr4*?)a&YA3$Jq%U3K(VU2I!7t^ z=HL`PWQ>kcy<8O37Nr02KqFT1{EWtoa=Q+hjT%#uHm0{3)&1(SIiNNn6#rod;B~f_ z16324?>XLvf#$0yv656?_UI$dB&g%i#G0Ow5&yr8A-owjNT?H+U=<4kwPuu{1)i9E zB;6Qr_$2UFP<8cyIFXf4u3~{10kqt;l!BIzPx|FcYRr$R&;G2c6dq(*sZx( zj^+jJ>>){izaCCAC_S4}z}lgs<&-39ireW9kN=Ea*45D6mu8R+HB9zk(_j;&B-<-zsTHQ+BVDVhhU z@hUO1IlgO1=FX!H*Xz;joZ{QM_TX|k`wZ{9?Yo#I76vE<-&qo{Q>jiQlKSq{IuAkok@&vhxg_*!r4om;P9c9?1<`3A; zj5^2{|LdAJo3Q8E&lReiA3px~mH~m!O6a(l@ znQHm}3GiEE?$foCOx`iUw(bwswc!kuxEGfB^72Lh@cgQ?^l5->%V?b{B=E|ivikU; zg2@(T-B1aT>jgvo5YxTDWD2?3V!jq|HsWFBrgQnAE>=MoJoi~(eQXEB4_J7JJKm?u|0I4X+5i*HsIsL_A#22Tsz(WTip_@_2T|3#e3N*XmS!z7f&nAiNwP z_yuFhQgtv#oG2(d`NU}EOhO-BAm=^BAO^hBxT`jO&>%WqMyIfK2j2fWcd>=iEdtsPg*s7kncHa*v8pvRIqZ8#6 zK-qgbI(Eygld>`L}Is$8i^LqbsSc(leGM^`6itV)}s%%v_c zb09%-p5y=qyFx3o%{vj7k;(dnm|g_a;DftP^^j6OEu574a;LOJfJ~2IKD#vRCuE4s z&t27vS(;DwtpnrM_QgLu!~owmP*}zmd9$!z9ZE+!p9>UBvd0Uc#?7rSF>mMGiozNHw5sTJ7!vU8+IL4m3-%-`Q1z85;8=ye(OowqDsU!cm(Qh%{M7taUE z4FYl~qUI2{oLDVw?K1scGe70e7aQB#X&fp)KXm*kgtu!9hz-ZG-k|Vu{dTF6``%DY zzEnw-=7-Qbz{wkftng|ZUkkY>Ztddoo)-gaSLfChbz2Y6l^{}?@B6L}P^7N4f(q3o zqG%aE)LnWjyuaJlvRNf81t;_vRXOOMr$`nSgR%{12grIH{pzb-b{k!Hu(vmujoz`g zwVPG8zKRx>K0xh42FfpvcQ^%1pF=VLUphFDm@{25XTVN6In%d_+g ztV^c~gbar?kz^}GmxI^s7^|rzfQIfr^|mYUNnGFe#nl(`)jcrW3*p18K)4D3<@ZMW zD)dtGh&6YIChj4*52zz1BuBvAG#*Jk=kd1yRdg3?|3wj=1`(>brM|N0uJ3 zzS7ydJUBWU1wSrtEhQLh2n%}y^@XCXEe6my+(2pRaU`vR#!be(_vib$Vd?q#lBRRT z@8G1?ziVGsXjQo!Mxt>oW zrvwzQ<$-M89-}g&mP}jZ+)E0ty5QGuEQ4(~@$@cVKTin|uH{$Zy{u&vJFqyF^`6QP z2(YO;Yo9FT|!nm1?uKuoFNH$5Yr zxPHf=k`YRRwphW#yX0C{VLuqnioKRddTj$T?g1oLwcJ;-xxTRVyL@tb3?xmu%XM;8 z#_-{+7LaC18`0OI*?I$;;Q#4TR~E$tkrYG`g}C2d+w)?}DgxLbE-wDQ0Kd$3rI!|2 zB84Uf2ubAw^9M*ntP8U~I@`@@)sf8JP@O@KdzU{gN4P-I3TXZ(og92Agzf)9e;{dm zi8fiG_U@o6=1kF)WwPt{JJ&v)Lrr3MD>i||tYHgSpX=SY^uAX6oQB8e#e*Hl5Ojma zEJAQ0DFoDd!yJkqZ`-dq4|DOI?k;iU#!bn%2Ou#Oma^m{WIU#JVFm{A3>#nYuKv!gI z0}`(Cruim{bsRY(3$HYZ8*e9W2nZ9cjedO?X79+c(dE40)vGbxz5ccp=vKmU(bd(^ z%{xnil;j1zjDx}9SI_XPW_>#D{qI}665vs6$_?(h}%Ngw5QJ zX%Gj(qEH_w4~Iqm(EP#DPaGz3Ud>WJDdOA1_kP7|k#5{NsgPtklGM9s0{{38?A8w#;0vEmXA>=7?}f|;7nEhA6B zIid4%BT>FZoj8VY^mH}kZmIFw+BRwGs`F8v4sz)JD2*OTi(J}Q!^zlIO*>Pr)3LA$ z6$v*BqZrvSkHB)5-Wjlq5DDKY(bK1OoDD!S@^##Cw~HDM-VRX^u*D-xTqXpKv#M{P zidY5LBvtQGLurl5o<+NbZ04i>2H2IPi*M5lNnq(e>*gfF7P^f&gL4$)y0%B8Hf+Z~2hd$g3%;>Wtv#gbFL(Zt!WRw{1S z8%+BiVFZswSf4*vE^O;@xyerG84G>I`lf3xP-)uZSe(CjHE9D!FfBu3)jao6~u$ccYG)y%)aH@Zl?iL1}o>Fmv@e_ zA0E3*k)`n4L>i~xjwV@FD=$yzL83iumYc${j8>PkcVydO@J#bBEJ)6Y*p|={lL*`Q z(kO?JUq0_Nzon$To_yRDR&b=vt=re%J!R*TRd~&&@VJdwAvE_^-cBo@F=nPzKH7n; zv6~ehdZ&p=pubPM_%?zf=VL`|2`je37PZvw)U|aN2K)-jw!A&BKG@!?lB`h_59+sK zQ2&srPQSCR{o4`ze7D=>Bt)KEDaW8-l``+0p>w^$LG}9S(aXxEN8s&^bM5i}o6Ncg zXgP!vXSCNij|mUmo(8sfRx0%OGi_jE7d|+Cv;0f52!lFkvxjrU=E5d`!mu|h9BfN; zReY;iX#57V7iIVydIzSv)&~&-Kh3VExt*@8bm_B=qcxlue!T?f!gzd(cKWtQLrflY zV#b1HQ~>n>Tb_#;DoOmbuV3@rIqf*W_LSR&p|`QUcT)1PC3uP}{E0ya8zkk)fffSoBc_+re`%yTa(`iX_v?j|0~=zRk`yvUVrQ9jd_U zZ|sdjb1&ciP;{%4q;Jq5!-*#I`*?ONb*dRsS66qk<3IXMuH|OG49IBa$P@{JD5@M# zS{{!u#IQMMwQ&nms^Ib=J6NyfmQ zzaAMKzp4_SmX_vpy8S&yftmy+Fht9s21?HrZv|&TK~Q#k;7!`oUH4pR^=TS%^3}%k z!$-*mBLf6x=QB7EN5!zC3*!RJUl8F%zT2}xVkijjw0H*%E__3rt~5*(N;b=eM;XS= z*~7=^(1>5F0hNGJn5*0d=J*HD)NE*SfG?`9?oE=mJ^fPG1&9~Nn#Y7t0Fje2x3t81 z<+7`!`^bQ`0vlUB`5lDMKGKV;ah)Jomss;NyePP+-GxgG3H|yz*zK3&aBx40ffXp~ zd?LINDneYh{CcnDlz+$`=yi1lJb6{n)Rbt zT-O&1>SHK|DT4QWazNj-3PSqF&h}q<0+WDK0bDJY!eSt8W7O)S{nKEdCyTII!oDb%JKnjY%XXBAZoAQra&B*fdY;0I2c#X2)Y4X8t@~S6JM4ccgvgBKnkyM} zm3V=;%54Y9Tu+ZgmQ2SQn2eoT#Rfg&QlJk{Xx5N~ZcjwyR6?qHO$9v&ftWX3s@NJK zNyyi0+i%7W>X$k8B!5~5fRfGrrTX~Be$WlUx) zS+ist#xi4gpZUGl_5Sz%VZD4^vwXhK=YHh+7O){ZVdxw-l$(EE>6nHApN%MCXM@k)&m5|3YO zVBfU1PNvn)yAIG*&i(bH)ON~%HKxE6>oWsioBI2O*1gmUuc6~b)+CzHS+BgA_Ku1* zG8(Yo;^UnK)`4dH;#JwkU0o#ByJ{kWHPu_>e|bG7Hu@YT4hILhr)Ui>^Rw)pl8udO zyS!qlJ(i|+gM#)3udD{jCgbDc+)n7-s*_SyR#s6{X>V_r>?%Fr({fU?Aulg6I3#?g zsnrc(T7gsKP6c>(?v%hW;=*f?xrUvPi(CMqoKqLoL=(&nR(#=x8g$9j`%zSlkJ zY^JaieVa2I>Fwh~`pGK;M16hWfp3Y#yf%-DHaO}%kf51i9BPODIX#iI_mVXk94eJ2zkgEVl&= zFDH6tnm@@GM!botN7`ejN6r-*F`r{`y6#<%c2|vd)pRuQ@D@ zpq1SDeXr!MT|()I8`sQdbSU`_wzgHAO{c}i3{)XFS%6w#yP-%g7VJS*$=(P2{HjEp zhg)evIx@y^N5k3XZ>8gnI5?MDTQuwoRf`4)LK2i$X|Vnp zDNW@S?$_)h2d~DMmfe;Oub=r#6R3N5A1mq25%J&Pj)M7aKCEf~x~b<)_>{{5?_f#D zQrG_Z=Ta~acM;U%t;Q$DSALczWe^C4@2+61)*nhNl!b2!5{D{nifV>8JTDwuWkhsb z4rr@pR~FAvd*c#ZVxyxo!1nLK_?2EO1Y)m$O{KKdl$AdC8r7C6O|tG^HPRHs?LXQ% zvp&+bwen=laAg1T&Uspjm?a*)c4K& ztHxnj(`PMC#xg=H17oS?=S9(zSE}Hs4s5k7m`{h+3){wGhU>0D24}u3T}et#&Jdi| zs9nla5S#)VSiH>gtIl`oX^SCfdV@AM1~92K#}m2bLh){3a}^DzJi6o*y;h%sX`mGN zVpEDOtn?D)6T~eF>lapQG zW}DU^psE}K3Tj+Bl8XaR8MWSdW0)2d1Ddcj)oZlI&@RXA+)fl7(|#DOUnsqqeX|Q<2SW&7sI0(JziC)X>|B9s}7$!(!Vp+%cm=UB0}lQ7@tKWM#(; z)%6vNDeT?*+lmWphm0N0cYt1jM1v#{NG8ZRNVNWiu;I+>%HFr9R`U0-UL6&_1zuCoAyh5T>T`q}q1slxz}q{bf{aSeOavjK4?cps=#2f}Um} z+t8V;-%~QWn^C_gD1D|ci$hOgHG2*W(EnR}JhbZUcAl)KL!BK&pHSw!FT3A{Y$@Mt z`|{;m-5*2O) zz@|YSOL0Rzk9+r1!SD!DcCz;}IP9j>Q|X}rEl$l;y-6UBtQCZ$AQ}+3 zEELHTuRG}h1WC`rmo#`04@ijemM{diM)n^FwksNWY$o>laiSAE&L3IVGU3avrK$lF zE_VHYry~D5582=uTo$X8wu#gHhsyv9D7m{AY)1LK;wHiJ6>9+;LrD63FAS9!6aIs^Z|B$jX6j4W!x*DlHK6WN8XAD1O^s3hsog}c<^ho z3u>f6JL2>d#31X%npfy5R=86fuzEb_R8$ZnMb=m`YLUsE7vaYhoxY;P{96*ufQ(?N z(a4vg<1KE7$$>gG6TjCAHYb^rS63s%XO_wMeCM!Y26MUl-?!ZU zOY9r^Rb74X>cY}*{9jYJoD47|gXPVC@dO3I%GE*kW26yMwz=IEq{n>Zy zUOC7cCq1}89c+^*t?(R_LSl>0+SQMfF?YI*A1zX>i)cz#kE5ehA6~L~wui6ckEpxX zHQuzw;jUe0P3IU5TfNvP$h0Iy#fpP*3hysX^AUo5QAsC?Ij~{GY-{fj5HUCEmW;w{ z@J0T&gB)ks6yK4WFkDnoo4kaa`B2yU#Z zhdE)hN{sD53K)S`bNk>yM}uNk2M8asV!MV7xaqKDX}WLjW~rQrRoLbhhY zJeW6a<7GCdWqB6B1~&LdKePQwh{wtlvNCjDt=w2^%tCv9Ko$Y+71b~KHjPb!{PDJ3 zQI!|&y1M2ygzWLyZ2Qyq*H$hUg;mk~8}MYm$Hu9sirYY%V#~{AinhJ5DfO&ch-iV~ zZ!EX#f#Jp}Z zpu>8)Qk8E(l=vXd%RZ=edQ<{D4nY%cJKn#&k)|Q40^Q8*56%HmLq&PVuNFz@9Yw^7 zoIFW6Ux)`zJuV?3mmt(ZDIQW2M-W}*`ih6>=JkQ70r~*91)vd?FG-fXSnvO(qOb}D z2DNU6^;YaiQI{Q2bTD|;cpn3%R)Qh|rx6SWqo=7g0}-p6xJI2eYQaBVK1?gS|8}Z# zhmk-|SNF+ku&%cQDc(77GwX1?KoYi*K?va9phb|6~2q(!|TYEOE{@TNu%U?6BdA1f(P;Q!wg*H*Wg# zN1o8MiCrapbETANpMXk=gznpBv%?f&iVcs(n~@&~u1Kf*yhPHTlLDEr@NQxCHs@B8 z-_|~w$rg9t*;e1TB+u2|)K@Bb*$~R-+;vHBaveeN&80_Ydj3FwQui&bQ8<@iC2RHV zh>^y(xx%B2IKvDLY<0DC?E6FqHyqHp^e8h=a%H-MlueUGOpKZY0yI=6iB&hYo z0zDu+WFKhiKD({PRaIpG_Z=q=QOqEJ?40exrsZ~QX{pyTV<5^Hg|V}%gAN@BMqdRw z>kV)%X`a&$0D*`9q_GRYP`H1$TFqLJ93xE+_@I4yE^bk5XW&c@dG8;_+t--x{=NsR zJF-^Vo^U?z$+IBjaGkYB=(zsd)YR0#^=U%0o>2ZyX1dg@O`p;Tm28EwX~d3-)#apz z)Sd&r9Qydj^bqzlVg!-JKZ|`4aWvmG8q@amGTw)}#<~kua72U7gp+bng0_r3C3VZU;_h@Crope4oPvclODG{T!StCGn3$EVy{=@*S-}OhvaIaAT{^%u-NXe$F^6|bP8&d$h6i zo3)JPCIIEg#UU{XJO$?%ss>{NjMXF=Ke&d;z|0DxMrtPIsT)=+=t?h+O|xSp6|B*H zN5@nINr#rU>C_P!D;o3iJY3H2&o6j>EL$obKR4FA0x*eWYFg~hVQKEZ>tdPk>wsS% zVEkH)y8Ri=KqC_RU3@EYM9I@m{_S}S(wVCEI~S(Id`CcuZO>lQE`UO(!o#8<&o8vy z*S@(B2PB6gve6=qb}d$%I3R;YqlF{WVLys^$#)`-sNP!$3knB*Ppbag?*f@KxDC9D z>%(0AjQq$GRPJ=AtKpnF>(+Th&k^6J<@ejqrm6VYfJT&7%W8e}Mc1nk^ly%v?PV0nCV)+mJz?L~+F}Y@kC`xXJ=FG}NN4K@FgnPOQ?&L^k zY2fYd+iqVSZmqmG;E*qCQukadgO!*-xXt)LC^f~lc|Y_kwSRI7F+8kMc3WmvGczyO zFyp;kTF@6N)kr8poA|TCd@+4@`GalmKd8JWO+AE#*=5o1dg-;yX*abCBx@U+lzG7) zsWqgabFv+e&e*+o+qNQBJXj7^H<7#rV<+HQ+<_DG)rqz*vN7PTUCvDas}JNhif<5r zTVLM#U-JV;3hLR}-h7V~6ejPWLwiN8cfP%-rT{Hiy=HJ6gm%3#dzPLS&u|zSy`~Rek=S z+p?Ae^bw85?ThVBt$VHg{P->f9$Tq?(Wo^v_@L%6_3;GL4+L2wu z@7gC?qS!Z3^zz;~1W_PlENQBfZ3^{vvlURXJ=nA-q#wZLaZ4J+ln;Fl!f)bb%g5%h zP{-OwbH@eMp4FETy`zL-tJ8+g%aX<{=fOnEU)_oA=aiqNDycn7OCZ=~!|uakR()1| zIF=7CHHDw2cFztJWoU?~=t~-kQX}N+vY~T8Hs#;lvCF&?sKhSrx+0>U8q&2-z-RXT zwjiqz#APU+7ZB_DCY40O>~IRT(hKD^8=Y8dBs3TBe92GaLe5!@L&4-HV@spE16PU? zHalko`e6#*YE$N!g|gMss;jH3N2^|0H46-^?deruoFol|omug6XpN2j;#4ush}Ww` zrK!D~yQg2C+qIb97wrjYE13Jx>W! z`3pxr&Qe`7KdCkrIAJibBZgt@sw}ahvPJyEC$P?B35IwYu=V1esGVRmOh!m66;n4xzOA$CszBeLAjY)zG#Xrlk zgGM9D>n6&Rbz_x0Z3t8cRDqzQyai|)K?OjYVr^`ko9aWv2bPxuoGk!`tpJ%Q3X7z5 zc-UcO>c(_Yi6ws@YildK07j|MewY@|!&Gx(Zah!gN=~mW;2Io#$k%!i9v;!?8RR%m z6KkNHkfi|;X6*tTqWYA*Bct!`JA~0%ouAc?>T87|;^~uDHzIm^^p!Cj96>ixs>o|J zWOZeVmwRrmdgBVmF=$;>z(SDc!4~PUb%KSpxv|dQ-N%BG_{*A>{)j!8b^6V7%H@Xm z9<9`SUnOlcOik`If8d!^aE%qNXo@ot2)=A6!QcA8_3**g(5A;SU&_2fe;j=6w7=&S zlf4ztRkNP%Gu8Qv)3Lp<`26Mb6~?!_`4m5hl09P7m1QUINy2Gmoq9X7Fqnoy>@@(_ zx$ym^gTxCxL6^g`4<0*sqmy$97wtjp|8mIri)v!`L{d)Yp@`}>1YH0iPQ@3m9m++?E{}3gbl;^_Fdl-bolBifq#U1 ze_lFu?mzLm>jSbKy@Td0#V`lHQ%czkXddH;*&3MQWMMnhloQ$O_3^QT6*6I(Q=A zocUw}tEYL%B~Gk9h%`Pi@w&@xIZx~51)V?e3m8skieCgkI$}}2)v+3Q!oB_ z@g!+hKQ3`+zy&G${GirWhJc{G>(XCFkN8wQQK$e)d+Mib)_PM0rr~)8A@q97=Qkha zW72$*Pe?T1s5{bQe9hhYm+FC+$a%S>U4I@pX5`W@j6>p5MKnV--j;l;`sSg=7$kO$ zk9KF^tyX~EY{4ci0<70>vQ- z1%+oEo>`yz122CcW0pQ|RC)1-NkslR!e4X2d&oTv$hU0hHeUT1dKCQL+M+`KnZ;c8 zj{{!rU}8y(wZiFS6@|mkvUY`xC9ubpl<6+Ai=$_5*LWb_I+ND17ySFLK9zhK6CeLk z@%nFkky17@k5pG5(hC%*Sw^q1I9yrlrs2@Lk}9fc-}HF4PRH`SK-zB3Z*mS_KcT@J zCr3zeGm}*DnsRgOh|)!8nn<6A?{#0P{E@k_+q6Ud#s4;2ntbW3`C3|jhCfYD&)nR+ zW*2vUttuF~;1ej0pqpNx z^n0J?Txk^STO^du;pb&uhqrhyic0oIo7tmoQP3#yb>^&A~5nSrd>*Lb(+2rRflZU4q&o;Lco*vZtvs=sc zlF|6sSj$W1@^_ll#MI;xGrfsbNz8k&*qd10@o(R7(fyI_Azs1b8GDXL?r{{;OpuAj zWX>)?0v_Ct$TV?uOgGtj=HB+{hfXmYp!+T#Zrx`N- zqj61Cl#?tX^bw*}3N>6^84d|#ncVm9s|Peb9{IFue^_*`jc-T7TBt~5FU>*Z!W(!K zH{C|r^G=>9m8zvy^mx9Hcz{m!)oHCiPd#_@f8EliQz>0`!-(fuR;KpH=M{Wn>Z^n` zG-rR+r!t9);u3S`NoFk@nTUzYIP)cO@>=zv-B8luWl>g9>dg0oBN{p6vYz>% literal 0 HcmV?d00001 diff --git a/documentation/src/main/resources/images/blog/benchmark/device-live-messages-scenario/800/gc.png b/documentation/src/main/resources/images/blog/benchmark/device-live-messages-scenario/800/gc.png new file mode 100644 index 0000000000000000000000000000000000000000..5bea061a9d49d19dacece9e532c10e01c3164139 GIT binary patch literal 68708 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


3=~M)j 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 K1WLbZd;cFP*LbY} literal 0 HcmV?d00001 diff --git a/documentation/src/main/resources/images/blog/benchmark/modify-things-scenario/800/outbound.png b/documentation/src/main/resources/images/blog/benchmark/modify-things-scenario/800/outbound.png new file mode 100644 index 0000000000000000000000000000000000000000..d5ac5e570e5425e927cae3fa59f7f9579a4e995d GIT binary patch literal 26101 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 literal 0 HcmV?d00001 diff --git a/documentation/src/main/resources/images/blog/benchmark/read-things-scenario/3000/gateway.png b/documentation/src/main/resources/images/blog/benchmark/read-things-scenario/3000/gateway.png new file mode 100644 index 0000000000000000000000000000000000000000..71b16c337618d9710560f0ae5c18bf40f2ad613f GIT binary patch literal 65994 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 g*kbLqo%Z$vjd;L%Rw= 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%0D=q>l+bloc1K$ z-g5v8mR8GCR8E~lx}5n&#;)u!F%jW;8NIPG9UXp&KQmI^?XS7HYB#!&;2JWcrK8ip z-tt?u=e2;OfWX9x@3ex|Xvqu6GU7(UN`nEP)zMz*;o(%d%Zvaqxdhn;)oa7iW$aQt zWHGPJ<9zO^nxWf~!Ys8@xo^|MfxpkmPxle;NeaSD@;&-mR;GpQ&yvL9floe4o!Da) z-Wsn&B-h#uKlMH(q=*vU{uN_2@I&2~-|2Nr(gQi5gL%4# zL1rRehVC(C8(!ggeXmOfsQe4m6a^HNgtv~34BIExdt*k7M?Q5LGBa_)@W1XC{Fs}A z-zVAqWO8++WV!QjrT8weiORAiAB{wVU|XHqxQUbuZ9@e$C#MQZ&!y|grBOL6?1|GD|WfhTb~3~PgYq5{`3>prC@JS4=05V01p)P{>d;F6`t^qeVWtb z9rsj^hk;8_6@nY)7KvJ3I%d1pAo>+)XPYhQ;E%nesQc2p;M9dM9@r3W+}&pBVYh)n1)y zt8DW$FBM+z2%wZY^f9nL(W4?RZtF+>Eg#zwtok;lQG4X#;zAx*o@uD6B19b>`6XLEn9P{KHRH6p_;8VRQxT!<9Doy*!?d3k;ngi zlfTUrLXR7*3!fVzrg8e|oyG9c$It2(zoQ|=P=(qcEHt?ULPNi}*ROLvJd8vScxSY^ zy4~H-Vf=P!K`VV|WrPI+JKI0>ZYUcIPvUZYxa;;&x~UkT5k#Buz@kaM)%2mO*WxrE z1XgV|GD=4w$n-u%`NtF)?%p7naKwIn-8=b$B&;sdg$?I8 z#*daA$)SSsv-cTJ&Q9}t&oN6BNX-i~-sKh!F?7y3S{v>eKyAh!OJy%dm0N%OjPzP= z?PDgv?INctHxRa02Z1auDXAz3k8HJjYc7jhZp*Av&~;7EY-}EY9O&=x1PBZk0$XuI zRv*sx*H#%Xa2z_G?xSF)Rnmxjn7>ZJ#hbK!JC%scx1x6n~Pd0hZ&6Xi= z$EC*jj<>H5lqTq;_<(7sXv)V}V27q_GS#gGfs_aPx2?YN13OX-Cu*Wv_C^3qWzYC! ztWc|jo`sfH?dLD(#*Sy)PVHi~aT`ZNraRTN+iEH)^w2ledC${ou&&T;?JLo#uo3^4 zP5eMT_I#qVDlrggc)d5oxv5u2%fm-wA+LK@JlFAx)Ed)jHpjg>j>wKb%P})E4+3{K z@LI*NXed{|%4x(2xi+ACaNtRLd?>el=%ceUCEJYrd0*eb&%5;TRxxBbdGqJex;v&E z!mg>MoPdA;`Wu;0Wi%()^O{rpV^D-@@~C-1#=FAN{Pau}s#X+akwdHumlexBa2pM# z4W`)geXv?=IXT);n$wRMqIgit#Kg4x#@B|cEp9343P_-gRqvAwTbJVtE?K7vx{Yd^ zr>bpyZ{OUvT&o*6To}u3v(tUNr1J1#7A|Jsv-jWbZI(M`v%&^9TgyZIY>`QERx?d6 ztVT+F-}w^CB2pCdAxsSBhP&R;O69k2$H@8|HTg7>NBAIHkNluE{f~*lG^Db(GOozp zCwVm!*-dyjk(2WXHh3MWH2hhCENg!m`|K=wcWFjWxM4r^bU#mlY**9cCXwT}CzX!b zC4rQ*9HL6PH8$!)C1yps`DFkMjFuacHJ^ZF!um%}pM>aCT_I#S{QV}S%bDxSa12Bt zol|mbzeSr0mnu8A+ix^-rxoCUp!kZOG;Rs=8r%G6s)!+uR@Q+&IU=jUc@F%>n%QNS zM@JKcr*}k{m{gFf>5MQSmZFoBxvkh`*SpL1FsFtTtZF0isy>7U0N&cHL@4|de&%!d z-d45I?(KWHtW#)>z3A?{Muk=Gk) zC5>kdeKY>k=`N~Q0j#wBS|u{vF8QM2q&FD?OXX-)MGS9_HjaQF{D#&Jy8vmg+4x7W z^1Eml1k`3%I|JI@sahmTdInR0d`Y*)PGo*V2T|p|Nm(tl?lMxOeUwo>s--`n573Y0 z_)B+n^?AI$j5T~#OcRT^f&o*(wH?M~)sTMpz1ES$@V-jxrAFGw zL%$QhR-f-mpCiwul-0Jguzyr--e+e!(E#&1`;Oxg)->~@QXVrKS1J(w{X5aU1c>n2 z4>hO8eU6bWkB5z#zFclOe)=uy#QGi~y#k9q`qN0#@WbD}3MsoU;@OV0uWq#JC%Dwf zo7X;2N^n`qfwvx)EE@V0Ju2th{>sw8f2OQYX&Lz<%x}1AIp)UUOpR?@VDQ+ghOzOM z_*w`@8taM7={@8r}G0QV>b^frc#Sv86Et z0^vG`^d0#zueN~ns&<_+yBjW*I{2e%$yV{f0*^qdBHVnFWq-_hyEC8heM&}RW!}oZ zs9#J^yl&Q;O6##3ARmy)bMOca3p;C1p8z0)h&3g@O_Z(wv%+d5i4;w3pVgo`4Az+` zo-+b`Dye06yuxIodwFPR=x`2fXlZ@Qa9E`e|F~SW)N-=Hwlb$b|8wg}iw^2XF+pvr z)?TeNshTI_tkpC$Z0Og1@KV{SZ?*H7oBre$Hf(VHWJ4u+)E2r?8HwBs-W=eY?FG&# zExW2}m!Nv9On*w^-odcuKsg*p=A@8k+ zXCQY|kc(#@MdXH6d-ZhDHhrGfY23p{wrrrd=}SB#ZrvT<&v3xNCrWqc<&Qa3(ZqJL z>3hch{@YQ>N9cN~g2>p!#6tbXhl?II(>2-vL!SLSuX@8Me5( zFFIPV@5)!`cXGSRdtb5o!KzShzWI{B#4G~RllVYFxV+xr%yZtdCq-BTmCbfCq!&4+ zM;1l}qPuT=y$3^~6@c90Q5ZT=o<8waUiRSui115qrPBv!@r5%%k!fH=3(2^%$Zs^b z=(Ui`2VHtGR`omoMZ>RWVQ}7L6ofqRG3a>>)fn5WQ{2bzl}S7A!h>xd z^Imx*@ZbR5Mv?N`!{@i^ zvR$d@;;aqdX`N-n+Hx!_e6ag*01n4W+Cj1+S3CnL&-%mwWVETan$R&%^^8ElcK=gkqh^^- z8M~H?hF*%wl)KFsJhg$5k3m<7qU~NpeN8_W6F__gb^Qg z*c$8kpv<88p?wQ76nKag?;Ts&`^m^IYYq#zNB4qKd&KaoL^YT1*C<@{%gL&Z7o3`R zWi1kNKe?tWr0OJ+a@)VSfjG{3`&R)B1&g6P;_=)k&x+D{^>12GT zJ!OEAZnyIB*q`n|qy)-O0&Dv;ebpM>qdI%t2wFP~ zN66j8#Fc>)K{^P;YUzzT&+*AgwS<9vv;oO(Y>nMi2`GqV(}yQp4YyM*0cJ|u?{wx< zby5eGwH)f)4bMFqYPCYj>JK$1a9I!I+OCq#lo$gr1}bJ@+Xp@kxk{p`j-L}r1*|@a zS4(15OgJGwWaKYwc?|FW^b^cHg`qN&sr;t>>PN%UhZ`$? zwu{(_(-=3sA6HyMW2_EPYG$l$FHQH;$p{KhDgazd60|jr^PdS26U!E%%nYXTQgv=k z%w^N%P3WF`El&@s-5@1u_+5ufi>7?*f`}1q5F-h0QD0AOF^a(bE$(n&O>;l$IrMl8 zhw>B#_1(W}*+n|OKOinP>zN$j<_9M(-LFlbyB(v^(2LrQEuj7yV#V6v>G6+W?|DePR`Du(`Ad*W2<>&_8LY; znE;TxZH$*mQ#KlclF7;Hsq}D$xWu)5Wfosi~*|gV=NG516m0zT5JgrI>>8R$;GlHsQ2ML z`{YDz3BKKpY!p2IrZuag8Iy;|sjA|s*Na$M2PxO!AXn(g@yWhOiI#!4!T#4NCI92M zQWTT!ISF9bPnns^XsEuJaxF&(rwwi|$N_)C5!}?nkRGA#)+@3;(=4YiXjsZX)8uY3$Zh->L=fYe2-4_fHOOK)0eMZnHM*61y4~B23k3DvL&CFOb+kv zaxR(lx3@Qf@*LG!z^5nom)>KY(t4*UWVicxj8EB&*NHS#0Z-2D3W~;Yv9XZGY4$KW zsF!Z>2y=4t@4>SDpypCcJklcMvMnmU@@!Ocf*N3E*z8#OtnzZIH4jPAryVq3T+~#) z@>E0Z1-OJnG8@ZhPkltvK|<^F>-NjAm^K7+qp%je8mQQFN+}5)ys5FB&EhScvI6-x zXg{Fp#>9qSRa)5%i*%sYEG)(KqopT18An|m9m6aft%dFBJ~Bh*@|woRh{-CExi45Oc^_)~u~AV4O+t+`lw7aRwW7#M{tL>>ddR_~HI9P@8X5#PYMO1g znv%83@s^RjOgTWzELSM9*{yXZ{rhl9`d1h1h>4JD`G)dfjddj@#QU2iDGaw_Prt5= zJc!w@b_z^TWWq}AlU3ixi9z;z^AdUmY8=*ocA>6+qw(W(Us73TPb-tYXE8w-O|0SP zhda}r8lhJC?M&}kOJ^;kD&J{+@1vbIR-S9v^4g1cK{hZZULlWQdNMmXkwwN1Q&D|3 zk0ax6i`3|H7I+&EGv`t2e-muA)VM&|%r}y$Kj9}>h+AbvQ0}jvT%;M^!__XAIz?wS znN=j*622_9-JzTeSq^n37+F{|9Z}?SB)ls2>cQfj%8k|Nq8O!6t*nU*LbA}^jZZ!Y zw@EFg4^s(GeO?7+u-hl(T$wHzxbl^+)q}@I@G3ufvo(k8D20}eI*YJkh?(W6l3n=g z@BJd)3njQP*(ke}*ICINl?B}su$6v6*j$UV)vlHzp~o|q$4tZBJeFea#e&re>Z(~P zp4YB4b8{Lx$9okWJ4Y^yarwJuLY8xM=v@VLyWSAUpiyf=3v35ly>nN-s@;xFc{04A zmmZ|(xY9^SS&wtoYI2w{ztIWPeu$_ZYM(3ZE2!=AF_)=f`zu6$oLPL%-(h*Ko*mPH zzl1xveRZ~ZaQOI>@;ih2Oc@FKpR4<92K8ajur&vB=Un7y^BzD?^3m~@;){CM5iYvs zVS=@CgVNj-NiF00mVN6UF)0@Pw)(6M8(F5>YOl7ja+H1wBA59TCsM@;J&XM$fRMKi zBq(B6aZds|SN+>Q{5cEohP1Be3ian4da~h7?69(WMs1*Cp-ti_jwOiR>G+Oa(4lqU z|0S$Re7zD2YLg@}L`=MtW~Zs|W|np6`gUczGKR+~UX7dN-S>A-^%)fR_uni%iw8{v z9t-y}rH^@n$dA~ydTANQ8X2aeb9h!m?5$~3srey0dWZY2mV&wBO=(R63S(7Dqf>Jf zI`sh`_CIpo&7~x!Umj&)EsD97|D4})gR53b-rdT)#&9ERZjl(h(FWG#`g|sCnaB(X zA^!BW;gpDWt%04&x_rzJ1AfY(%rVQ?}pxjCVCS&aRnnB2!<0 zRY|D-8ryB2jATg#rTZ*Q?=xn3372~~c94s_>Dbs;+oywXV-UdhET~a1!1%pqKHXBw z1`$+vpd{xPSA1>z;%eWzK|KyIxkyhiNAxG`v*Ke zK@vNfUh_^`;fWmRFw3hj(@r982%2&!wCHyJQ5kH+GoPN3t}{b_;=Ab2Zeb^{h;q@N zz+|$}*&b^YkO|VS=E<=&{3wB>PSJ?p_Gj&1s#mNpQW>Tvq;R?O6{OG9CB0UR9w+-i9@-^{FkBf)uOY#u@JN6AURc+ zlU$}EBWR~-EIk`z|7!t7pyTsQMU?h7=pi`|?UgsOG7w)d=@>}IOEJ)jLil5bcd|^U z2Pd+0mg(Et@A8;9dfW}`F|<8>O~wDz+fhF4b6?o>74j=bzt5_KXh>pHHlF(FYZU+> zTVyhYfoz>D8r3#y-Vwv=G1Ms7&--cJ-m+3Jv=v$zl&bzf5q2H(q;4?#`w;nL z)l@#ZlJbaUl`Qr3$_H0vyLgzUjnxB!U2D-Cni>lSv-%9j2rWB436)NN z*9u@zW^>OuJVM(Tpk-Qp`06KqOnrp?CFw#sRe8$If;k2D z`FHgFG_!gI+Dc$JUrB|h?rA{}#OmR59>T*c8u>i0w4Ab3lHCq>{pWV7jU_UHEu#lm zdD!mkMPLxLf^ZgV3AJLtQn>QYu~=oD|D-ryV_gvz3$$(h$cI#9I`c&__JRXe#44PX zj^bUNHOKe;o;l)y(885U$CP>UCNvrn}a#)1~ez@Ia+jFFvcgSH8cXTra8R&9^%Jw8!OA zDI4oXDn~=N;R;-g45AtLVzznQ6LoKBDI54B*G`jYQL4^^ysxi8%w# zDeXu!cA~3$5xyeLLcB^i#*9zSQXB6Vgg-br+#DBDI3CEw^44+niop=}lPGFPPtW;2 zl&Z5W{oQfLs{|%B?Iu~#U}&MD6Dl6?l*cSW&d_gDwTzZp3HNw|ChC|iDo6J^1kFK+ zvmFN9;{aPKYf+q$dJ2=Z@Vhh-bo!8 zF5$y6UCN)uftsqe)U1~_6dU}IAFL*(EAE36jdb#KlAHIhrB9OzOl77{_z`~U-(&~O zoWA?&6yz-ARFmnH%ucqdqKci@rPvNCl{XbS#||mpR=!%Wxc1>{o#Ch#^4-m3cFWs3 z=)-xI1udrEnInS~+^tqAslqj0pu72`hz}7p@Ho}PJoWv{&%fY?#~uQm?QlBVU|nr^ zfBTNUlT_9uuUvoZHAP>c_T1xVMI&|q=Jf09mk!W*6!Q|TtY5!TI=vCoP4Ti`TMiut ziQ<2FT`(2oQW^#^UXF)j)tc490^*~PY&Wx`-D5~&{IN>T@w0Kg&rVf7rx|O#8D<$}ndH~592i%cc_b|2NDLm(usb99}8m6D84>}MB;GB`aCm-io{yIlvax!N&UsoXa{zYtV& z`afpXDBRw)*i?6IrG^=n?`q0Yk%bRxEYcOKO#!(lFci4c&s!cEM*#>gl zzhbO$-TF)R;F|bJLzy!ESzqyNB8sy2898S%`dVBqzt*y^ z7k<`--j<2rj52+U$AfvQ(o9MZEhNs*L(avzK5R-FjZ`ar)t~lji$3tj+`~32NBY3M z1z2MR6H(~~0`X(sZK#j%-q@|-rScS=){iW~4?4KwD@fnfKhvqHk-=|GD86A!Fnsdt zPU0)^nRY_c=^L#gCzAj-1iWT8V^>EtI)woWTV9wt1?T?yixmcn1uSLZvr=&d(H03dE$P1 z*5!%;U1g~Cd#u8E*Mmyy@zl{Xj5VhpTe6hiVpM&u%L%qf=F-Tker;=-Js61W*!G%M zPL2Uq_(-Id=E?70U!+q=N3XB@-NL5AY)j7h%^#?j_LO&H7lp4zH+QW+-YBnG+bZrS ziy9-29iuul{k)39JY%J9C(`O$bh3FfA;3=xN&3$7YEz_2=^c+}yPN?zR^8zk2;h@h zJKm7Q0XbBxv@@+@!~k)OU9W!V{j@##)c~E=mLn#7>g3S680`4DnJ8*bb44)&e`OJW zWrOk$SDr^!gN*JkNba4#WIcPI4zfz+=98GZbJnrqGmP*So-BuOsej;l`rIRsbSz9Q z=FqVy(F`F_@s-)nzqvhrTEuoztpGXIJXzPBkN3c*LI9n4Th72x%piRpiM6mllz>VX z5nN{OFVJC0ZIH&Wz|1a*v*OZ*90f#9D83J-1f$FAIo$1oz{#fWd}JebwPik7>0y;+ zf|8<=m`J+%d`#2n(?B zVMyk7Smjx(G_&MXtlSekMs{c7DylG~YDp7JYo?=s7;mW*8kWZyS@Pi@$|RR=!y-uM zP~ZHHyd`|j3XNCOcS)%$k@fUR5>Uh=e3@>MG%Dcg&7lmB9U4_D#dwi z>ZVNS+Xn^rn8w5i%BbE7@P7hJ1T-Wt5WjG*%hhx-L_H5QuoD4L6mCXYaS?O+4IaG*t0l2`A3_wr_;S4 zLW~RS{>ok4Bb+xXZZyf)l!tGC8|a-z;~%<1xLD<*V?C)uHY(b1QAdaYr8|Z884)>a za2;C7b_g(v4Pvs7s>|i z-ITe}Lpgnza2HW=$Ffi68)}n)Fg7GQ%Z)`rEuN+^{_O(C`9Yo?msY0NZ^aR((x-`a>R5o4_)y0&%PK-o49xJ>u1}=ui3l{Uw|} zM*os>mly$9`^Q_|vVe)sm&@X6Ui;S!ax6w_-ox!n8YO;N6Dc61mRTtzFYb z_tnDQ1Vg&)fr4i5{iXGLfpN*nYCj`yC*JFP5|krv8r0|fT^VIZ$J377KkP<|!cnII zBSrR}qRut1Pd2N8bEsPEk#OfAGnvN~8oV@(agx36C`G1;NWM$(|0+fHS~#1%odV~y zQRTSo5_;|JgOeno1v$_eD}EFiM@-3|Pk&pc>!I22r=2Os)Zr+-o#RGTAnzS+KF0vZ zuD)tyOSKxVxh1$Y>Aim<28x5lU%rr%{@#^K+MjdZ_7G~bn|fmu_)#S7<9ZAfX63mZ z;^fiA@fvg$b<-XyRkw6lnS0T}LgFW_#_#X-x`n(D!90njf(V5UGsPfI;+qCXWYYz5J`P!te9rNQ3 zV})g3+V&I$GZcz^*_SOSqtF=zDV=Rna?@IC4lv1#6c-(8&xjPKqNPU<0VhcV@sFkV zgp#Eq4}L|}PJlu!)$@55lT2dHx7_|z^qaSl$W zsiE4ZFZX9P!bz)R6IHT5MZzP~MinVK--57U$|dVrCMF+*swI<8IC4uknN7Jh6v?^U zPS;3o;vL8YIWT?T?mLkd5ICwmP32jTLshkRTir#JRh=s66%HOARmh1z&7Gguo-VK= zOmHCIxn;(;i2=EGSLy>)D{t~-(7#FFAWc8efYRejWcz39#RW@7W;s>@DsAVl$2umDiTieTqV(Tx_+b={t#G6 znKB-XK4AW}XU)f<7td*^O-zChA#BCFtJ-1PAWZb-zrZUI*|5Xw4X95g@v$Qr0G z>P-r8$=UN6h%d4{WN{=)-m#i^ER7cqRMj{j!_*xEe*cZl>f=YDleUVWCW3N3Owk?G zg2H-O0SL~!bk-Fre*Vf4=vIH<`~GryI677~sf{s)(`Ci?DdB}{ihae_gtW&D$Wga? zjx#9`cwy$M9e90F4m#e;kK7o$b2BKw1Q-ZJWpH2blTOX$M>vxdm!4JCIC`jU0$%Jw zlV9b`NOR7n-0KkX2oIY8h>*lXybI3dKEdycGR^6i&jrFzn@k`Dk)@K+ z%T)T!U3iZvdWmU$?ajH^V9SzLGW=mV&jTP(Crl6#!B`*}UuvU-Qq|5k4wx70X#diS z3o9I!!DE}~>NG#^B4Ho~u@D`&usV8lX$GC)jf{c|rmKdfNf>|6*#r0bqUL{Ap0}Pb z5UQ2Zz4zYUmrx~$CM6(Sykw`>!A3vBaXchjzG_sZIFZPzWKHOgc0kh&yPU59+bT>M z^-~8JoQ{rUfeE`yP3BTY?GU~Sn{HW(&Hpfta(#PyW`FOHKR22w;hC>mOcSb*VWKZV)rhz2ry* zP$8v5?F!ebe`*-~rp$+{tGFPR(Ori`Pm+PT0Xjl(Z&86TlYyhu;0D=hig9 z32D*_Nf^`qEr&&`oLe#xjI?^YRE6~@HU0|%f470#6J@F@;q)kauXBO?azPQ{q=;-B zNVK!ed6$DaDmGOH4`zj};Ktv19g{8z&&d;=dDrR2g^t4WI*4PtDU?B$9&ehou1u3Z zK2=C{VJB;n*wxm`(oQmog~JzULDg<8`r|D&OwzfVT&#bLp}rH3xF%n1+;2&YfZd|j z@e&4r|Mp@$jj}B6-Fq6{(~6H5Mz-+or}646Eha(+FC_2}yPN?!xgjkiPkkK=njClu z2xA3wtAd_q?MZaL?2USJX%7{D6zT@kkgUoD+*tU$krOoE5%ByE2RWi1xlPbSk*h)q zCQ|NHpQ9_)pEOWN^mNV}L)k3x>t=zd^tSmD>vp9KQN+$tse^jhPY>)V{8*UyCFSnL zgl!yjF4CM~)1-|IG2`pRRh5^BaH0JtZV%cU0%f5QvWvC9E}S=HF8GorUm=5m_OIC5H2j-5Ugte-HUZE z#JT}0v0|tuFnIgR#qlU&W&Ar=v!F*5=jIu_$<=eE6gLEdVUFgfmZgiMb)cxR8`VfUTbvk;;H0lb9mHGNQd_;^0*U z!R>dv*+Ej_eum&QtiaOh*xnLbLU-(@9H zqINEJUA+TQnw3Q({JUQ`iGSJoz-NYbrba3}2^=;E^F65=(y;_D{6Jt66Gy0n7Et@q ztnqbr{?_Ioe2UWV64I9aIDv6#Y1(<^bQ}OeqxKKOnL^>rj8IGj0iF%F^-|D`FVFTz zN7Cb!2dF~@h}ige`h@OV&8giB>N+}7Z_``PW`e;HlD^e6@1x~Na5hTfC<1pl zBf$yJbp+pIV~aw~yb<-HbPmdQgWdCf%xX>#m4A8!Vq@pN`l8cRTx4|KmP8@F2wU&H zweWB;ANWcA8dC*cMv-1>X>nx(s>|?;{TC!tCqy0{wj1k~9J8PUmPj3? z{_^-)zx-2ZC!@)$+9y(Veh|L&i3Pr^W9%LD{4%T+V(iJFU;z#1B{FycP;V%*)Sp{T zg8NbZjnIqeS6C-TpkF~a7XTsepjk&T<)#cX4R9+2*rwmy2Pc&CuC??x0hYx%^aZ4rN0Z9vA}qKbOz+4Mr+^oa|cc8f*{a|j5_|n?P>7? zA3fCD%3$Yu)Q&-JaiI%zy3oN7-PPN#DK3QZP|}LtD(AD^ZK;1j3FZg%&dOLy7gYl^~Z#9Qv}3`(fGz?aYX$g_4P4D z)5r3hq%se=CH@}Bg%0~&iH^m?0GGRUuqv!iMtfU!bR{4{bk z#`Y+-P-lyGxntddTt@V*wP;&^lV9Wrc|}XCbB-gf!s-fyh3WQ^IB7vn|0mrSpjouf zX#*-+7Kpr5C2XbWc_wUBH8$t@II~UPH{1&h!ko_L#BcnHux3*<@K1q9oz&Yjzm#O^ zknbab_TOckIC?K4SV>P5NQwT$&~2cvtcdZXd!4wO6>-T*mqL&GOqq7CQzoSPE`bDp z)Wz8>3%g+SYaLnsn83%#3qHN(ScV?3WFf3{b{Q?ml;wQ9;l}vNQ&-- zG-;AuTfa~)c4=|3fTyM~+!2jWQq&>jp)yx45LR4K2U+aUIl>y9AD4kdt4-SeNsJEG zzUzd3AGEi=36A4L99l?E9$N!H;g$R|0b z5Gin6#L4p#Dyj=6)4Ey741NUG@dvvWz2Cqci+Wsih6^)u31-8-v|j?6w&}Z^4mV)) zsJanY+J4gk~0~I+plC_ zmd|8DXh&||fc!D~E{8kMF_$cvMjk|=a^F8$sOxyjTNPr3?)N=zvQ*+J>mR@^gE>q-)2QzMpO|gh=Cj%|m zKm17*Be)9S;v2$5Jd_hc?MzrtO(oS_hAS(->N0;V)B*G8e2BFxY*9$Mdjq(v%lt?+ z_mNv_S3z&Urw>e*$^ip1SRt1IHh58>z(6n)%RH>aEM($*V;UxL3n-u%b)k-sq_}73 zGuitf%9o`*u!T#7PX5V}Ms90&sneEv@miaC2#`u%(iPwPrJCnrjkFnEs%cHRbhslX z&YGL4HK0^+m*BhtXna3vxI|k{xV+f_)K!$hd!uhwt`SHhXDnHUWY2?)F;CR%9y2^2 zuP8{M)o_6ZUAoCG@J`4FrNW&y%HT9YT2=-&_5>W~-C3pk>~{qXfAV%w%ZB8Q3hBF{ zjJnqzDLaH+#R|>B72hLLfAs0vjhm)S)VlHV*B;%vMR+Z?IhrX}Sa7g8W|r!%@&gi4 zshAeSzB$^S=K6X82B!Uw0<+Fn(CP$*^cNm+b8!tHRkI^G) zzGEDy(&3(;bz3%>Z@1ySEyF(2t3Nfe7Gge<>8oWs^;Xh;ceAjhq(o>RxwqF+RGwSMguv@oSku3^HR|z5@AYHnklz@oz4i=E!L25u$L^^~fy_Zm>*MJB}lTHZIdkYYO z&=ShGBKUmg9nbTg@t$$c9&Uc5+*$X!=bH1H*KCO}VZ`g8;c7yG`#^!B?3P=8NpXpT z62CBjjOwt}>}NL6s~el`13yc8qjB*)p`p2+4Cr?)oriEKM_~a)lkV@EomH0$`dX5c zBtcRj$PEmnwNF^Gw#n8XdFocJ?O-*u8(kOsKx1mE`8p+yr@nzmm-fI~Fh69QqMZD$ zDbN>RQ8RCtAQPO4pb`(i6wn(!yMQgUq3Z6hTEv8Zn28sZajaJ_ms-WL2B#7|k?UIz z`*N%fb1j=&;`n#dBn4+{$yM`y!(JV8j zcUD;DJBjaz>;FgYqVr9=r$6nJGMz@Ra|?tm9b2;N=0)3A;i0E?%!coq9GvebhMjtuy#3gx^NAJud0;O0?ej5z;TP~XxnSNcaM|h1PvDCnB4S;1 zVNFnK`m-lxTvNm`OuJY%%NM{?oVT&F6&e!lJ{r&@WE@a)%&4gBGC#mdPv7xw;+BH9 zo#cg7QoF@4dysg6ed6K!DVjms*bZI3i^0rhyYZQb!kmmn#3 z(2Td%ceq>8Bgqkt0ew76L~ae-I8saY<^{)ttME_HWhF&UZqe?->y`)(!R%Xh_YCP; z6ps~=9jP63P4y8ujnO6b(PIXKoNDUEtqTtCufp#WN_jJnIm+qV(ouZ$c$op%fT^gQV$`_T+y;2tnWehQzI$`x%cZtR3M zG@Don`43YcJJC(j>Be$q)Eav()U()`VL!-^$0rbglSQCGKz{o3#%vB96NDRj;@eLP zdqaA+FmjhkMoM{e)#blXE&t|c$*CsqT9T34j@{Y*z2}l`W|SEwClMSw>fku0kJZ0A zuLhhQ5oh2&AvmUA5}yJ2Vzu<@3-8fmnv^_xHokc7o1pCFOZItRq)*6!0tz`GeNPHR zz+<+ijFUScdI0AkoXsn>x;2+VLjSgpK9)E=-q6a1;`$ff!8N74#wUA3jsXHQ_3&jq zg30+9b~QCWkdgbQ_aOAavf+s>Z)%35YeiUvojxNvyOe4Sc_9hTPTQZmRw?FCd6{Ds z0cn-S4l-CL6;sf6pU9eCaN3Pg3XEK!jBaRqx!gSD&jYjnu}yHUe0lT2#%5@5V{(&P zz`e`ICvnhw@tD`J$%V{%dXiy?7_uh?ce13-{e$t*~s%w z4XN9<3;M&_CyyO{8Nw+lMc%G|j1TOr7A)lSuriR~e<-3`|Evox)Fv+VvVNwD{Q_C> zL`K5NVbu$tc`4p>R#r|*@z34${eV&unvs|wAY1;!;eU37S!kJyE{&9vLT;tw@H_MU zKl>RG|5{xpQ`%FU#MQlO@GjIebT#d2^-^4z2Z<=@E{-Fw9}tAYU!&l=pRV=a|U+)S^8XId&B zn`=LX00n!nr)=gGNf!51%a4CNQ`t zM;=Y9bQ}(M@e6qW*-agfVs(w&>vWU1$f(R#?-Tr=7hU+*zV`9v%PUs2_M3*b75)l= zyU>tc6mY%EKEmd}^XJE1?Yc6&E_u;Ivtj1ir;h{3EKa7!JZc=x~Ik4H@3D+GrAEiCgd zeNplJX{r9GZzXV)><2>sJkg4OqKz1DaaTPfy>J3{D$li?_hWzZllY;N3)cKiu1Rz2 zg3+@NJ`5lA@+ZOnvK@ApiniU|Dj(l03JGnpWjr}5_a}ZwG1-DqBs~>G)_@5=AtJ`0enJ>05sTW$G$)EW0v|D^k zs;#YUc^HYjecRs**IHN#YoUzkw6jL_%tHdiLS60(*V$4A`kozLlO%7sNL2W?%@4^L z7*fQJR@%2*%FOvoJsS<>yXB%G2W6i5IhuutE!shZP8m(CpjSDBRTv+CgkTx2idI{MJt7a^ETivB*(L^iVCu)U<`Cddl0U;$xF?4}-#QbzKmi zD=ftWO53Dc;`^8Svj#v}0)O%m0l-A{M1oHKSrqFmvXi^dZgJv0sCh+AHTpuJ%CbkO zG19e2$N|zbNJsRj_{m@1!^Ku5;GfC8MrZkO=V5$>k zCH;L}72xEmVi!Aws@{Ja_>IrrgVKqm8TPQ)Se@N7#E5K)7a1Efvo;)*KanjDmR0QU z?}J7<#yn?*c1SN@REtN-K+xr1A2!FlDqP%RUP4cJ_Li^es@G`HBm3~`2@hQL41*aX z7aVTi{#K~Vl4Jj45+P+mg(z@?DUQ9l^B)j zIBFiq#BO$?;pquA<+*kn>57(Fj|9;c#3T&E&Vxw7|8l!_&8D4+k?lG0f0_ z=zD72YcT#7qkP)M`7{zQ0;jJ{7w(E?KA|t{qIb_$^=063k-K&$nBzJreY6qntqbf; z{E!!2G{+co@}>7AZm~!Pzpc@c%|xbxWSrP{HM4S`DDsBE$L}9zSh}=lpptU$yNW@ zkNos>?Z_D8u)+$-x^W*a_+#4>gfXi7R&{dv{mCbSg56Uy&b$w&B#AN+v^iF7+VcLUk2>{K5E_3@9~s95MwbU#NRfIVeO zKkY}Ak7H())FrSF>CeCwmEE75{-c^ri0buv7pv~}Rq}sb@FhJzB=g%1xy#!QkQ0y* zH4VSyKrFi-HhXY^zocJR3ChLu%P1{7vqZn-s<_w+_ zjjzkYqHR<(EW;#v*=M1aE{%!%#Oa={D=yBM~rE$zuHX((~<)kk4pZD|o?JI#Ks=poJX&=+?2Zat{ z|1iJcQ!=+MqR#svv&D{ms^hKBvZP2=FaJa0e0pFwVDKPz9Id;tDR7sgF(-nLot}vD zPy4x_BOf^rwY`P7<#&Gmx8Do=4eIqa4I->rw23JCr?f6DSxmsY_n6f6m%Cdu)c7^X z#Xdi6!+n+$0}a33P}HZ9z4SdK^Z_tB;c_P!T^bTPBrA8?X8*k34Cm^R z1JgW@UrS};AIkw>2F~KfcCFpck!{`vMF+h8_?J2Cw&R#c&W%>ypQO75{d52653GZ4 zEIQA0-5OB-^AOWb?FOv=-kbP(l|1}ao8d{Cm9+m)abxz@qwfjt(>^wF!-(PxZs;ml z`ojrYLE$N_ZNVtkliTC~?gz;@xBzg!q7H~53-9z#ehQ@&W#MI%dJ7^6vqoN-81`G>7OTvUZv@@Ut0D72@yeS z485#A_FbhzgnHfHpYfA~Uyo~bJa$d}<3E3})XrD=QlFnVQ+*D869|~)yT~rED6p!# z@=uBsqc3jPACCP)+4N_#%!0pd_k6`nkfz)LZez?zBtLAnQs`xC(0K?rSi#STn+_h3 z=}o&p4Lzl<)HgCGk@VQ<6?VO`Pef?8>Z z90FF<_AKq&`yljIS>r0;AMS9U2vI7v+{(@=*QvTwNL$0NPF@F=0oSi}pZL(yeTOqK zJS?;k36V~Z431nJ%ZuBXz^cGwQ9PpSRBPcnU21c5oX;ao{#%;?AC7q6$AA9^Jw=K1 zED_%Rm#V#6C$Vt2&nh=*Ln?{Kyo%g8;s6JG7? zuJ~SpA)SbIa7(Ig>pmK|o8bM)Z+fpkq^o4aIZZd&C5XdR;JAg@2~>tdp&nt6a4y@q zTTrb^#n{-`1XI(zSvI}ExG9?1&}iE@5#8{ds#Mdf~;2t>+1sVsorS$`^wU#UjCf3!99qD)rB5LzdY(Y|abHGWK^9^V8mo z*IhkKbbE$arv_KL!XWziCU;Am@x{xIhn74sMglE!!`Rj^FI0&V3o1`p*LlJzWVmc8 z+n~@%EpV2Gq5y%1?r@NW&dLSGlAsw0W;u((G6J^DS&pg(J_bMk-p% zIR2A!0Z#`7WN0Qb2~ILHvIH@AnY8bhRV^(q2d&A#MmKy0%|~}VweM+2%O>@=_CBJZ zqEbk!QDzk3Gau5jLGBd@J6WXxnAWpsJ<#$W9UV#H$7wHV- zd|#t2A%U*VShLv(b&yEQ@&y}^LCKM%CL=>as&tdJwiby5#Ow2e^#$xjGOnlvap!Sm z!!nEUFf4Z>tl9@29*!z=cb9&Ay?-&x(2Nkw!KTTnqR0r7f*E2{A|i~OR{M1G4Xv|! zU-|a`vhHh{>(G3L1dm|HA^{``qy!hf>A%!npLgL}OCRy=*ADTUTs_e`*G^A@E zVRV!<1!ny$=0C{-%q#_0XQH^ul@HuVack#nmT*hqe3i7@o8P1-Os7(9;t68=&s4{N zBlKdH=4Jb!Iy@{aWxUX-H`Qi=jh&qry*-)y4|2G!1T@pT-7*83qM`bg#8{v?8u=d& z^)_q%SJw$Np-Tl#anryZK>Na&j(|t_n7D=5p(6FdEldt*1xp>2c=3MBb(7bQO$m6d z;)4$JBm*1MVVqz4kC|QD1Mw?lAq8&ZVItEWfy;l9vpOej!ZP@86eHwRFX+kJ}_|C)vd4| zC|`{;(-K^n>6V414i<_QzG_JwSf1PF%cI@0Gcr0$l)hLVtJ6VC-zR2>y^3a1uozS@ z7iMQd)9m5V4*2f!%tO^=QBhG`V~7G#x~#^km0@m3Xk+!#L>q9_IT9@pJ^}N6+2|Wg z5OhO-XJT~2BN`F&R3NPsl1l`%hn8vD-ep*JgU7y_-x_`e%$f^bOtO1JF zC^)1aM;&gaCWx8Yn7a)eHS=zXnh4;e0B-~nlcn49g?Nw>O*w6BxJU_20vpB`&-WyI zKf=vbh7FgwpCer%fmzUqaZ`veOIn-Ey&*u}I+O=fvtlD% ze$Q_=npv7K!6TUE^-QIu#iF|~q1XO^&UKh@#gaBReZduq;MPIEv#pLC3cSZIRk2o{ zzrS!^k)h|)nJQ(*G*jIAud7LmTb^fT=a%wufqbO&0-wJ-l!zZX4*4#RmlZzw>kjiB zW>ee^jatVR&jR4&?%{zyH`849>O3j?3l3A?PcNGzfmsF(OirDuTt3F(|E=0S?g{Yk zodJNyKvet3e}4l=fHa7&{Co3(w+eb+;=awQFW+%>*^`4`HW1(7G}QmzqtXSd?HIdL z_>v-Cg0@k<1mC6ua(*-O$f+?5{!8=50r?dt=ljE$gyVa&{uBwU8n z;Pd3}dQm?DHaLVp!fRj892>DLZvwf%D`2w8DHk$c=h~qaTi?_v)G=0 zH^;BK@{4ZS;YRmc;pBxw)CZBC9wFaGu4vA;!Tb~ZbPcY~sppLtF&~IOx={aAb*O`} zV<(CPo^H8mM*Thj(=-C$9$3}G7e?kidYRwzBj_EZzW?HZqjJ(EUb9cGEg1dUP=B*8 zlt4Qn`Ez~2=rTwCuQ!beX;%>=UK%U4WV2I@c`x8+q)p(@)qSqYnS^m{bhilb$t*|CTG%5-gFA-^_HN=l_0yESgBlj+@%3Jmo!n4h$Dwbv_A4 z*sXm1XPM z;}))XNyvzYPH(tdD?HX^Z1|YipFB;XP!7puq8uuWwTkXcOv$*u-hMuEQBbL&6aN!5 zkbJ|<=%qp30{XtI9PP~u+i2%|WqiO~DEk16I^3WW_1zTGzQ_F#!zUM7Q3&2@kOMbYu9 z&a9X8durACgFhT&XzG&F>nYn}6Yb}+o|pODs$W)|)i2MfWgqNPzL`|MK(?oDanC{r z-bZFrb~c4Rch<{Y)u)0w6Ufi3W`3Kr;dgj!cFC*Z@h?%Ye=`D=vw_be!I69tWT0kS zQdfR1NT%)ivz{3-V`#AI%8K{KeIM2@c9F2k?WaMJo8lKz2b}J-%iah!;iJHaz6sZ zHCk0|S_gie%~&NU7-U#SnP^e(p*4)y={kcy$b9XQ&KvX+*)yCOfW3 z{EPuYo-)1h(;5ox@$=r9brYQ#Vqm^fL@`B$6;PJn;2c$?r_o6L+In3%uaZ2ReD@jA zPw|QGR&=81^-PB!=|Eif?j~FFG9Q&ao6kt18g@9|1lw!W$|4b^o<;i@Q8sN3`JcPU zY0W2h2Nr((UiDkrkH1Ng{{s#ApItEj%)bsM(62%SYNi*uW4037BZJb3@s)yWO3p6V z#Kr5Dd+KsQ7w&sXN@-WEU9)}%eWXu;m9eh6Q1RP;LsI>!gDlp5d{hE?6+@A5w@|YZ0^SE zw6qSrR?&^!-G;AZ71go|tc;6{43%lGFbZg>X2CK5>uxWuk^7pSABKa%gjX6*PrNc9 zP`#!~Tv&BlmWP8*x>}PC0G;u@p4D6)$|wVEj0-wITK8KEP%3T*VSRA-@mTe?a(=8+ zL_9oQXyQjtj-jR;ygfQ#ppq+de&{H{d4dR<3P%X%uUu3{b0XDp=U3Z*{OEyaTq;|v z*>hc^rJ>0@x90VjOkzk)-@R1z&GsIqg@wUOr(3*VN_<>gr(}&xF?K%#XxX>LkrM|ZFPMmOJHpOzB67}G47$sRpzOokqbzBNgBZyr2P1r0e$aRkHx(+mjm(#S3au-^W~jDU%R`~cBikHm#YU__H@1D=tc@cM z2uE#2hLLRQTjR+grFQ*pk(~N>TFP5nFS;R&X_4!%xngEIX*L?3iS2%6!kaadp||l} zC<(d0{<MDgmu*p+VY@AD1}}4t2-u++k2Q+mT4Uro%e?zVr(4II?2;sZ6`_ zY)}POvI{c~uVGmLyP5TUh>7JfD__f*=&4#Q8$VFbkXK*m9v>eET^-AR3z_>53omH( z>YzE^{)Z7qe8m$+Qig(0pUyAT5yx57B?>F?W^wfdaOemza#1Sl5h?t=iF>H*ZkB8* zANj6y@s<8w{7W1JIapHtO469|I~usP0LctS9k1>I=bQ_N6GFg`e26 zzufZ7c*O=wW5zvT$qq^GH2i}DZ4P|y^S8&)vy#8Ts`!D6QE<7(JYs?0xNn7y096?i z!S+S?mGC*>PnTJZNlyGQusq5zQL89G@;h&ncgEK}43XGYt6R{h(@UrPabVCK5E%+V z9t;we`w%Q%U`mc{Lcz?T1$u2Yw*Gl}aWM}OsXk2SmVDt4GZX zLOIWRwt9~`fSa{R)uk*W^D&qqsL%ThL9P5rj2?kr!t=?hNa+A*Q)zEillD~KYUo$= z(|FN>*;z=w)?V6LCDMRFvS898wnKc!VyxF;oHcWq0?COHs<~paoN;S`(`=$IL!O;g z2%7aY;m7(e@X@O{8D|$49q_iTB3(%~2o?2(t_1ZbmZfa!)llHUI_O&J1p+F_qZW3Z zh9(hPjtj&ocpij?K9l}Hh4y|Au!}RwCOb1k9I+-Q(%Rpl`bt)*?|Ub0sRjBCwC`t$ z2?}9Bt6pfJfW1PO_l91F4fJ+K+hN9Cqk$mg{rK_Yw+H z34AYSTXNhwtlTmb&yn63Qfgy`;&EwV!!RLcOpYn*+Q#HfWAAvV5G7T<_tr z&$qm}u2VPdPG1&ssOOT%B;$G8p*Ei^^GSm3A+LIMo*QmCyV`j?<0*a3g2+qds*TR& zpEat%2dB@R*_y|k;hzt2rq|J_t>yLVJBrjSpe>w@jg7HxUe{{yo~yyQ z!CC7XIwC*hRj}8&w>b`T=UW^Tj10X|I5c#FeyAQDGtLZ}>(zrOU75pzfHb{W>N3iF z&UKU!E1He+%Bx;<|6y|!80ZL8nT&yfLF|J)1;s?+uBr)OR2GNU?>2w`Zi=#D2ZTTk z1j-~!)(@;>1ZZ7~-?C6IuoPNY2XWZc1Huj)FYluYbd{>_75W}9a{#EV6k@#Zsr#h; zhhB%?1;_m+WqJ`$HD-l~xZ8kl4xv-j5<0x*t>U>d-yx&?DuHkprP#9b3PBe*7_>~AZDXO z@jlXfs8Bus;j%U0$(P@r0rdlB8xiYO+javV_P2I)KyFR|N$fuUT&#Mqdk zl0$Zwp68oTWX@PF7wau3!b3=e%R&$7)yd2C=ObyO{)uJU|>^DO&74-7wO(H z7HDCGKp^NDFy~;dUD|vnF@XvevbQR+JL61L`HBgAvV`r`-Ve}M6pS_+E-oL4ZQX$~ zF!P#_IRFbWQDJ;Ac}Dt!Z0ksiF3I~_6aUaSNUqoaq{{+m$NA7>itB1_^X;@=tw{o& ztEE4G(2_t9Fxc>Hki6yZ*G9Nh^=2%IXeDW3=i0j`ltA5X-!${3O|c3bJ2+vPyzpY7}g0edn;AIbebkW-{f>aIJBgfK8F2u7n$({MNDn znC0Pomu=ZL7{tqAj{L}>)JT5{_5yCh%k?V@uZ>=}_HXVxg)~g2(}n`fvLQ!iXtj};<#{NwNEr!jQ4QSa(h zb7WLhPHAcB=?Z<*uObHbh+ zxNemQ?L;RlH-6WtSnJk15)MTZO(vra;~rrT6Q07@+R>q#uUn=GtQ)Rj(%U~Mpttrc zFTYnq{L%jH`^)d0C3;(u>avKWi%N4G-|l;*O;POU&!(vQ=Qtv{LvfpZDG6C~X(erc z9F4ke60Gi`<&roeAIX+4fzBH&W{k@AsFH(i^qvQOC?B1>vevyh`tJ1mt)BNG%eWX- zbNu2po$W?)01b1w>Mi0g0k)oLxN@C~8FFV4;M(EMZq6~4IRSc6$A_TD@)t0RAje@_ z`CTcFk2+$LQR7mzc(u-&#YXa)nPU>ZevII+@f~d0pkiche7$(k-8&^h+r53Pu*f%Fiz?anCRn?N*PFr?7z+7A6tp_V(@D5%C_d%*xuHY2(Pd z%2H`9SGw&aT_MYc+If`xbvqy(-)*UlCGia>lV(r30%}*Hc?F*Tpu@bZy`w`F^uSg| z<)CI?@XhWf<9A(hr^a@&9TCNVA#-1w87I8;JerACa0_u=#V*Zdbbk!i0JY$5T>jg)r?m4md_I0$D$49M`gMPv_8)e& zyu9Hu>*!w7fdH;jpDi`;;^}4>kKDAn{3$E_&hLPRh0I#H8Zt2QjOE5TlmSm}| zCFzZ|`))(aKo**IV|`uSL#h@qYqLvBk=QC^UwPW#!9kWduG*=@TfU1olV1VoXQ>+)&fBj1$C#Fy#z zs-8)r`82rVW@YqYVp0irW%d$oiEA!5wc5_QsZZEoM=4*sn%U@OMW34o%q}%0DiemVY8Yc}=%f4Pl>a;8s*Ne)MZq!Lut~ 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 A(EtDd literal 0 HcmV?d00001 diff --git a/documentation/src/main/resources/images/blog/benchmark/search-things-scenario/1800/gc.png b/documentation/src/main/resources/images/blog/benchmark/search-things-scenario/1800/gc.png new file mode 100644 index 0000000000000000000000000000000000000000..543e6a54595d2537e99526f672e5500dbee22548 GIT binary patch literal 64539 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

O)?EBks_ys$enB7Su=8{v2WUADor$ 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 literal 0 HcmV?d00001 From af21d46b50bf82831bc9b6e1a58b537b395efadd Mon Sep 17 00:00:00 2001 From: Vasil Vasilev Date: Fri, 6 Oct 2023 17:14:56 +0300 Subject: [PATCH 2/3] Add escapes for placeholders, fix urls, add dependency versions, add myself as author Signed-off-by: Vasil Vasilev --- .../src/main/resources/_data/authors.yml | 5 +++ .../_posts/2023-08-23-ditto-benchmark.md | 39 ++++++++++--------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/documentation/src/main/resources/_data/authors.yml b/documentation/src/main/resources/_data/authors.yml index 1e286541d9..ebaab70309 100644 --- a/documentation/src/main/resources/_data/authors.yml +++ b/documentation/src/main/resources/_data/authors.yml @@ -62,3 +62,8 @@ aleksandar_stanchev: name: Aleksandar Stanchev email: aleksandar.stanchev@bosch.io web: https://github.com/alstanchev + +vasil_vasilev: + name: Vasil Vasilev + email: vasil.vasilev@bosch.com + web: https://github.com/vvasilevbosch \ No newline at end of file diff --git a/documentation/src/main/resources/_posts/2023-08-23-ditto-benchmark.md b/documentation/src/main/resources/_posts/2023-08-23-ditto-benchmark.md index 5083c330c7..47379b7c2e 100644 --- a/documentation/src/main/resources/_posts/2023-08-23-ditto-benchmark.md +++ b/documentation/src/main/resources/_posts/2023-08-23-ditto-benchmark.md @@ -1,9 +1,9 @@ --- title: "Eclipse Ditto Benchmark" -published: false -permalink: 2023-08-23-ditto-benchmark.html +published: true +permalink: 2023-10-12-ditto-benchmark.html layout: post -author: vvasilevbosch +author: vasil_vasilev tags: [blog] hide_sidebar: true sidebar: false @@ -11,23 +11,24 @@ toc: true --- -This blog post is presenting a benchmark of Eclipse Ditto. It consists of a few scenarios to cover most important ditto functionalities, test the performance and provide a tuning guide. This benchmark is done via the [benchmark-tool](https://github.com/bosch-io/ditto/tree/master/benchmark-tool), based on [k6](https://k6.io/) load testing tool +This blog post is presenting a benchmark of Eclipse Ditto. It consists of a few scenarios to cover most important ditto functionalities, test the performance and provide a tuning guide. This benchmark is done via the [benchmark-tool](https://github.com/eclipse/ditto/tree/master/benchmark-tool), based on [k6](https://k6.io/) load testing tool ## Setup and used tools - EKS cluster using [m5.4xlarge](https://aws.amazon.com/ec2/instance-types/m5/) nodes. -- Deployed Ditto using [ditto's official helm chart](https://artifacthub.io/packages/helm/eclipse-iot/ditto). +- Deployed Ditto using [ditto's official helm chart](https://github.com/eclipse-ditto/ditto/tree/master/deployment/helm), version 3.0.0, ditto version 3.3.5. -- Deployed [bitnami]([Helm Charts to deploy Apache Kafka in Kubernetes](https://bitnami.com/stack/kafka/helm)) kafka helm chart. +- Deployed [bitnami](https://bitnami.com/stack/kafka/helm) kafka helm chart, version 23.0.7, kafka version 3.4.0. - Deployed [MMock](https://github.com/jmartin82/mmock) instance - used as a 'dummy' receiver for ditto events and device commands. - [k6](https://k6.io/) - load testing tool, used to implement the benchmark scenarios. -- Deployed [k6-operator]([GitHub - grafana/k6-operator: An operator for running distributed k6 tests.](https://github.com/grafana/k6-operator)) - Kubernetes operator for running distributed k6 tests. +- Deployed [k6-operator](https://github.com/grafana/k6-operator) - Kubernetes operator for running distributed k6 tests. -- [MongoDB](https://cloud.mongodb.com/) instance of type [M50](https://www.mongodb.com/docs/atlas/manage-clusters/#nvme-considerations) +- [MongoDB](https://cloud.mongodb.com/) instance of type [M50](https://www.mongodb. + com/docs/atlas/manage-clusters/#nvme-considerations), version 5.0.21 ## Scenarios @@ -43,14 +44,14 @@ The benchmark test consists of 4 test scenarios that can be executed independent ## Preparation -1 000 000 things are created with the [benchmark-tool](https://github.boschdevcloud.com/bosch-iot-things/ditto/tree/feature/ditto-benchmark-test) by sending Ditto protocol messages to the topic that a Ditto Kafka connection is configured to read from. This connection has an [implicitThingCreation mapper](https://eclipse.dev/ditto/connectivity-mapping.html#implicitthingcreation-mapper) configured. +1 000 000 things are created with the [benchmark-tool](https://github.com/eclipse/ditto/tree/master/benchmark-tool) by sending Ditto protocol messages to the topic that a Ditto Kafka connection is configured to read from. This connection has an [implicitThingCreation mapper](connectivity-mapping.html#implicitthingcreation-mapper) configured. The thing template, configured in the connection mapper looks like the following: ```json { "thing": { - "thingId": "{{ header:device_id }}", + "thingId": "{%raw%}{{ header:device_id }}{%endraw%}", "_policy": { "entries": { "DEVICE": { @@ -220,7 +221,7 @@ Example message: device_id:org.eclipse.ditto:test-thing-1,ditto_message:y!{"topic":"org.eclipse.ditto/test-thing-1/things/twin/commands/modify","path":"features/coffee-brewer/properties/brewed-coffees","value":"10"} ``` -In this scenario, connectivity service is used to create a ditto kafka connection, which reads messages from the provided topic, maps them to a ditto modify command and forwards it to things service. The things service then executes mongodb update query and generates the [thing modified event]([Things - Create-Or-Modify protocol specification • Eclipse Ditto™ • a digital twin framework](https://eclipse.dev/ditto/protocol-specification-things-create-or-modify.html#event)), which is pushed to the MMock service instance via an HTTP Push connection. Also, the kafka connection is configured with [qos=1]([Apache Kafka 2.x protocol binding • Eclipse Ditto™ • a digital twin framework](https://eclipse.dev/ditto/connectivity-protocol-bindings-kafka2.html#quality-of-service)), which means if there is no acknowledgement that the thing is persisted, the operation will be retried. +In this scenario, connectivity service is used to create a ditto kafka connection, which reads messages from the provided topic, maps them to a ditto modify command and forwards it to things service. The things service then executes mongodb update query and generates the [thing modified event](protocol-specification-things-create-or-modify.html#event), which is pushed to the MMock service instance via an HTTP Push connection. Also, the kafka connection is configured with [qos=1](connectivity-protocol-bindings-kafka2.html#quality-of-service), which means if there is no acknowledgement that the thing is persisted, the operation will be retried. The HTTP Push connection looks like the following: @@ -234,7 +235,7 @@ The HTTP Push connection looks like the following: "sources": [], "targets": [ { - "address": "POST:/{{ thing:id }}", + "address": "POST:/{%raw%}{{ thing:id }}{%endraw%}", "topics": [ "_/_/things/twin/events?filter=eq(topic:action,'modified')" ], @@ -277,9 +278,9 @@ The kafka connection looks like the following: "nginx:ditto" ], "enforcement": { - "input": "{{ header:device_id }}", + "input": "{%raw%}{{ header:device_id }}{%endraw%}", "filters": [ - "{{ entity:id }}" + "{%raw%}{{ entity:id }}{%endraw%}" ] }, "headerMapping": {}, @@ -304,7 +305,7 @@ The kafka connection looks like the following: "ditto": { "mappingEngine": "Ditto", "options": { - "thingId": "{{ header:device_id }}" + "thingId": "{%raw%}{{ header:device_id }}{%endraw%}" }, "incomingConditions": { "sampleCondition": "fn:filter(header:ditto_message,'exists')" @@ -354,7 +355,7 @@ Scaling connectivity instance and changing our connection to have **clientCount* ### Device live messages(commands) -This scenario executes HTTP POST requests to ditto's [live channel]([Protocol twin/live channel • Eclipse Ditto™ • a digital twin framework](https://eclipse.dev/ditto/protocol-twinlive.html#live)). An HTTP Push connection is subscribed for them and in turn pushes to a MMock instance that acts as a 'dummy' device receiver of live messages/commands and simply responds with pre-configured ditto response. +This scenario executes HTTP POST requests to ditto's [live channel](protocol-twinlive.html#live). An HTTP Push connection is subscribed for them and in turn pushes to a MMock instance that acts as a 'dummy' device receiver of live messages/commands and simply responds with pre-configured ditto response. The HTTP POST request looks like the following: @@ -367,12 +368,12 @@ MMock pre-configured response looks like the following: ```json { - "topic": "{{request.body.topic}}", + "topic": "{%raw%}{{request.body.topic}}{%endraw%}", "status": "200", "value": "ok", - "path": "{{request.body.path}}", + "path": "{%raw%}{{request.body.path}}{%endraw%}", "headers": { - "correlation-id": "{{request.body.headers.correlation-id}}", + "correlation-id": "{%raw%}{{request.body.headers.correlation-id}}{%endraw%}", "content-type": "application/json" } } From a17daaaddaa87bc13e1a8893baad1c1b29c40ab4 Mon Sep 17 00:00:00 2001 From: Vasil Vasilev Date: Mon, 9 Oct 2023 14:55:31 +0300 Subject: [PATCH 3/3] Rename post filename to match the permalink Signed-off-by: Vasil Vasilev --- ...3-08-23-ditto-benchmark.md => 2023-10-09-ditto-benchmark.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename documentation/src/main/resources/_posts/{2023-08-23-ditto-benchmark.md => 2023-10-09-ditto-benchmark.md} (99%) diff --git a/documentation/src/main/resources/_posts/2023-08-23-ditto-benchmark.md b/documentation/src/main/resources/_posts/2023-10-09-ditto-benchmark.md similarity index 99% rename from documentation/src/main/resources/_posts/2023-08-23-ditto-benchmark.md rename to documentation/src/main/resources/_posts/2023-10-09-ditto-benchmark.md index 47379b7c2e..f077b7e116 100644 --- a/documentation/src/main/resources/_posts/2023-08-23-ditto-benchmark.md +++ b/documentation/src/main/resources/_posts/2023-10-09-ditto-benchmark.md @@ -1,7 +1,7 @@ --- title: "Eclipse Ditto Benchmark" published: true -permalink: 2023-10-12-ditto-benchmark.html +permalink: 2023-10-09-ditto-benchmark.html layout: post author: vasil_vasilev tags: [blog]