Skip to content
/ emma Public

Elastic MQTT middleware for edge computing applications

Notifications You must be signed in to change notification settings

edgerun/emma

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EMMA

EMMA is an Elastic MQTT MiddlewAre.

Description

EMMA is an effort to create an elastic topic-based publish-subscribe system that works natively in edge computing scenarios. Its core components are:

  • Gateways to transparently connect MQTT clients to the system
  • Sidecars that wrap MQTT protocol servers with a thin overlay network and control plane
  • The Master to orchestrate the system
  • A Control & Monitoring Protocol implemented by all components that acts as the orchestration medium

The following figure illustrates the architecture:

EMMA Architecture

Running EMMA

Prerequisites

We use Redis and its keyspace notification mechanism to distribute subscription tables. An EMMA deployment requires a running Redis instance with keyspace notifications activated. To activate them for a running Redis instance use the redis-cli command

redis-cli config set notify-keyspace-events KEA

Starting the controller

The controller is a Spring Boot application and can be run with

java -jar emma-controller/target/emma-controller-<version>.jar

The controller requires four available ports (which can be parameterized via application.yml, but the first two are also encoded in the properties files of the broker and gateway components):

  • 60042 for the broker heartbeats
  • 60043 for the monitoring protocol
  • 50042 for the controller shell

The Spring Boot application starts a web server on port 8080. The controller also starts an Orvell shell that you can connect to via TCP with nc or telnet by running

nc localhost 50042

Starting a broker instance

TODO: we are re-designing the broker/overlay architecture and will update

Starting a gateway instance

TODO: we are currently re-implementing the client gateways in go

Connecting to a gateway

You can use any MQTT compliant client to connect to the system. For example, you can use the Mosquitto cli clients to connect to a running gateway

mosquitto_pub -d -i console-01 -t '<topic>' -p <port> -l

and

mosquitto_sub -d -i console-02 -t '<topic>' -p <port>

Related publications

  1. Rausch, T., Dustdar, S., & Ranjan, R. (2018). Osmotic Message-Oriented Middleware for the Internet of Things. IEEE Cloud Computing, 5(2), 17--25. [Preprint]
  2. Rausch, T., Nastic, S., & Dustdar, S. (2018). EMMA: Distributed QoS-Aware MQTT Middleware for Edge Computing Applications. In 2018 IEEE International Conference on Cloud Engineering (IC2E). [Preprint] [Presentation]
  3. Rausch, T. (2017). Message-oriented Middleware for Edge Computing Applications. In Proceedings of the 18th Doctoral Symposium of the 18th International Middleware Conference (pp. 3--4). [Preprint] [Presentation]

About

Elastic MQTT middleware for edge computing applications

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published