##################### Self-optimisation ##################### .. contents:: :local: :depth: 1 Introduction ============ The *self-adaptation/optimization* component is one of the self-* components responsible for analysing the IEs states in order to propose possible optimizations within the system. Its purpose is twofold. First, it aims to provide an early-detection mechanism that can help to prevent serious degradation of system's performance. Second, it supports application of real-time adaptive sampling technique that can optimize the data dissemination in other self-* components. The overall architecture of the *self-adaptation/optimization* is illustrated on the following diagram: .. image:: ./self-optimization-architecture.jpg :alt: Architecture of self-adaptation/optimization module :align: center The component receives the information about current IE state (including, but not limited to CPU, RAM, disk usage and power consumption) from the *self-awareness*. This information is then parsed and passed to 2 separate models: **Anomaly Detection Model** and **Sampling Model**, where it is being processed and used to obtain recommendations. The recommendations indicate possible adaptations that can be applied within the system. They are passed to *self-awareness* and *self-orchestrator* components. Anomaly Detection Model ------------------------ Model is responsible for detecting different types of anomalies (e.g. rapid increase of CPU value). Currently, the model is composed of 3 sub-models: 1. CPU anomaly detection model 2. RAM anomaly detection model 3. Disk usage anomaly detection model Underneath each of the models implements the same statistic-based algorithm for anomaly detection that uses the moving density of subsequent sample points in order to identify anomalies. The models separately process individual metrics of IE state and, upon the detection of anomalies, send encoded information to *self-orchestrator*. Sampling Model --------------- Model is responsible for proposing optimal sampling period to *self-awareness*. This information is separately computed for the retrieval of hardware information and power consumption. In particular, it computes the optimal sampling period by estimating the distance between subsequent observations using probabilistic exponential moving average (PEWMA). Computed information is being passed to *self-awareness*. Features ======== The component allows to: 1. Get information about available anomaly models (GET */anomaly/models*) 2. Get information about parameters of selected model (GET */anomaly/parameters/{model_type}*) 3. Change the parameters of individual anomaly models (PUT */anomaly/parameters/{model_type}*) 4. Get information about available sampling models (GET */sampling/models*) - Note: 2 models are supported for estimating sampling period for monitoring hardware information and power consumption 5. Get information about parameters of selected model (GET */sampling/parameters/{model_type}*) 6. Change the parameters of individual sampling model (PUT */sampling/parameters/{model_type}*) 7. Perform analysis of IE state leading to anomaly detection and sampling period estimation (POST */optimize* with IE data) 8. Perform analysis of IE power consumption leading to an estimation of sampling period (POST */optimize/powerConsumption*) For more information on how to use the project endpoints, you can see the `Specification schema `_. Place in architecture ===================== The following figure describe the relationship between *self-adaptation/optimization* module and another self-* modules. .. image:: ./self_capabilities_relationships.png :alt: self-optimization module inside the IE and the relationships with other self-* modules :align: center User guide ========== Technological Stack -------------------- The component was developed using the following technologies: 1. Development stack: Spring Boot 3 + Spring Framework 6 2. Test stack: JUnit 5 Prerequisities ============== To start using the _self-optimization_ module, please visit the `Common deployments `_ repository for more information. The model by itself do not require deployment of other components first (i.e. deploying *self-adaptation/optimization* before the remaining components will not trigger any errors). It will automatically start to listen for the information from *self-awareness* and will be ready to process it whenever *self-awareness* is deployed. For the complete communication, the component should be deployed within the IE of working *self-awareness* and *self-orchestrator*. Installation ============ Configuration options ===================== The necessary configuration is automatically provided within the module. To modify the default settings, update the *application.yaml* file located in the *resources* directory. It supports standard options available with `Spring Configuration `_. Apart from that, the following parameters can be changed: Sampling Model Properties ------------------------- - **sampling.model-properties** - parameters of sampling models: - **type** - name of the model (2 types supported: **RESOURCE** and **ENERGY**) - **min-period** - lower limit of sampling period (in milliseconds) - **max-period** - upper limit of sampling period (in milliseconds) - **value-weight-factor** - weighting factor used to decrease impact of old values - **probability-weight-factor** - weight put on the probability in computation of moving average (close to 0 = use EWMA) - **imprecision** - sensitivity of sampling period adjustment (close to 1 = adjustment in each model execution, close to 0 = no adjustments) - **multiplicity** - scaling factor of the estimated sampling period Anomaly Detection Model Properties ---------------------------------- - **anomalies.models-properties** - parameters of anomaly detection models: - **name** - name of the model (must correspond to mapping function used to retrieve IE metrics) - **toleranceThresholdAnomaly** - weight used to control transition from normal to anomalous state - **toleranceThresholdNormal** - weight used to control transition from anomalous to normal state - **windowAnomaly** - minimal number of detected anomalous observations after which the model sends information about anomaly - **windowNormal** - minimal number of detected non-anomalous observations after which the model switches to normal state This configuration can be set beforehand, but it is also available for modification at runtime using the endpoints mentioned in `Features <#Features>`_. Environmental variables ------------------------- - **AEROS_IE_IP** - the IP of the IE where is running the self-awareness module. Developer guide =============== Prerequisites for Local Development ----------------------------------- To set up the development environment, ensure the following dependencies are installed: 1. `JDK 22 `_ 2. `Maven 3.8 `_ Running Instructions (Local) ----------------------------- For local execution, using an IDE such as IntelliJ is recommended. However, the application can also be run from the console. Compile the project and install the required dependencies using Maven: .. code-block:: bash mvn clean package Execute the compiled JAR file (latest version) with: .. code-block:: bash java -jar target/self-optimization-.jar Running Instructions (Docker) ----------------------------- To deploy the application using Docker, build and start a containerized instance with: .. code-block:: bash docker compose up -d Authors ======= Zofia Wrona, System Research Institute, Polish Academy of Science (SRI-PAS) License ======= Notice (dependencies) =====================