cloneMAP: cloud-native Multi-Agent Platform
cloneMAP is a multi-agent platform (MAP) that is designed to run in a cloud environment based on Kubernetes. The aim of this project is to combine the advantages of cloud computing and a distributed computing paradigm such as multi-agent systems.
cloneMAP consists of four modules. Each module is implemented in a scalable and robust way. Where possible, applications are stateless and hence horizontally scalable. State is stored in distributed storages and databases. The single modules can be deployed and used independently. They are coupled by means of REST APIs.
The core components of cloneMAP are the agent management system (AMS), an etcd store and agencies. The AMS (API) is responsible for managing all MASs and the corresponding agents running in cloneMAP. Typical tasks are agent creation, monitoring and termination. To allow the AMS to be horizontally scalable, its state (configuration and status information) is stored in an etcd cluster.
Agencies (API) are the deployment unit for agents. Each agency hosts a specified number of agents. Agencies have the task to aggregate common operations in order to relieve the AMS. In Kubernetes terms an agency is a pod with one container. The agents are single go-routines executed within the agency.
To provide agents with the ability to explore each other the so called directory facilitator (DF) is implemented (API). It consists of the scalable service registry and an etcd store. The same etcd cluster as for the AMS is used. The service registry provides functionalities such as registering, deregistering and searching for services. Hence, agents can us it as yellow pages service.
State and logging
As agents usually have a certain state that changes over time, that state needs to be saved in order to make the platform robust. This is done by module state and logging. A DB service provides agents with a REST API for storing state and logs. Upon restart the agents can query the last state stored in the DB and continue their work from that point. A Cassandra DB is used as backend.
In order to connect the agents running in cloneMAP to the outside world a message broker is used. Currently only MQTT is available. With the help of this message broker agents can interact with devices outside the cloud (e.g. IoT-devices). This module is called IoT-Interface.
For easy user interaction it is planned to provide a WebUI that interacts with the AMS via its REST API. The WebUI is not yet available.
The following documentation is available for cloneMAP:
Documentation of the code follows the godoc specification.
2020, Institute for Automation of Complex Power Systems, EONERC
This project is licensed under either of
- Apache License, Version 2.0 (LICENSE-Apache or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
|cmd/kubestub||Package main : starts a local MAP|
|pkg/agency||Package agency is used for running a single agency: management of agents located in same container / pod|
|pkg/agency/client||Package client contains code for interaction with agency|
|pkg/ams||Package ams provides functionality for the Agent Management System.|
|pkg/ams/client||Package client contains code for interaction with ams|
|pkg/common/httpreply||Package httpreply implements common replies for http requests|
|pkg/common/httpretry||Package httpretry implements methods for http requests which are repeated in case of errors.|
|pkg/df||Package df implements the Directory Facilitator|
|pkg/df/client||Package client implements a df client|
|pkg/kubestub||Package kubestub : interaction with containers (start and delete) Package kubestub simulates the behavior of the Kubernetes API for local execution of clonemap It provides an API to be used by the MAS.|
|pkg/logger||Package logger implements the frontend for the logging module|
|pkg/logger/client||Package client contains code for interaction with agent|
|pkg/plugnplay||Package plugnplay implements a component which automatically triggers the creation of an agent in case a new IoT device is connected to the platform.|
|pkg/schemas||Package schemas defines the data structures used for the REST APIs|
|pkg/status||Package status : provides different codes for status of map parts|