Eclipse ioFog Creation Review

Type: 
Creation
State: 
Successful
End Date of the Review Period: 

Reviews run for a minimum of one week. The outcome of the review is decided on this date. This is the last day to make comments or ask questions about this review.

Wednesday, September 21, 2016
Project: 
Proposal: 

ioFog

Parent Project: 
Background: 

There are many great ways to build IoT software in the cloud. And there are many great ways to store and analyze the large amounts of data produced by sensors and devices.

Yet there are few ways to build IoT software that runs in a real-world location such as a warehouse or a hospital room. Developing and deploying software to these edge locations can be time consuming, expensive, and inflexible.

ioFog was created to solve these problems. The goal is to make developing IoT edge software feel like developing for the cloud, but with even more power.

Scope: 

1. A software agent, ioFog, that provides a universal runtime for IoT micro services

2. A node controller allowing to control ioFog instances

3. SDKs in multiple programming languages, allowing developers to program containerized edge applications and micro-services

4. Development tools to author and simulate various deployment scenarios

Description: 

The Eclipse ioFog set of technologies is a fog computing layer that can be installed on any hardware running Linux. Once installed, it provides a universal runtime for microservices to run on the edge. In addition to a common runtime, ioFog also provides a set of useful services including a message bus, dynamic configuration of the microservices, and remote debugging.

Automated interconnection of ioFog instances is provided by the ComSat component. This relieves developers from writing code just to move data from one place to another.

Orchestration and management of microservices (the edge software) is provided by the ioAuthoring application and the ioFog instances receive their instructions through the fabric controller.

Working together, these components provide a full set of technologies for building and running IoT software the executes wherever the developer chooses.

 

In greater detail, the fog computing layer is comprised of the following:

1. A fog computing software agent that runs on various operating systems and provides a universal runtime for IoT microservices. This is called "ioFog".
 

2. A fog computing node controller that runs on popular Linux distributions and gives dynamic instruction to the ioFog instances. It has an API that allows for various tooling to be built for controlling the fog computing fabric. This is called "Fabric Controller".
 
3. An internetworking utility that runs on popular Linux distributions and provides a way for ioFog instances to interconnect, even through private network layers and firewalls. This is called "ComSat".
 
4. A design-time interface for creating, saving, editing, and deploying microservices schemas that are called "tracks". It runs on popular Linux distributions and uses the Fabric Controller API to do its work. This is called "ioAuthoring".
 
5. Software Development Kits (SDKs) in multiple programming languages that provide developers with the convenience of programming against objects instead of using the native REST API that exists within the ioFog.
 

6. A local software development tool that mimics the fog computing runtime and gives developers a way to test their code against simulated situations before making the effort to package their code as a microservice. This is called "Test Message Generator".

The ioFabric component architecture

Why Here?: 

The community will gain a standard development model for IoT edge processing that frees them from the constraints of specific languages and specific hardware, and a set of technologies for provisioning and managing the edge processing.

By hosting our project with this community, we expect to augment our ecosystem of microservice developers and receive feedback that helps strengthen the technology.

 

There is strong potential for collaboration with other Eclipse IoT projects. Here are some examples:

hawkBit - by leveraging microservices running on the ioFog, remote updates can be achieved for devices that have complex update processes or connectivity that requires intellitent interfacing.

Vorto - the meta definitions of real-world objects can be represented in the ioAuthoring interface, with the implementation happening on a per-object basis through the use of microservices running on the edge near the actual physical object.

Kura - the ioFog (along with ComSat) can be used to add remote connectivity and servicability for Kura gateways that remain safely behind a firewall or NATed network. Microservices can be instantiated on the ioFog to work with Kura gateways and add layers of behavior for large groups of them.

Initial Contribution: 

All code and copyrights are owned by the contributing organization (iotracks, inc.).

The existing code that will be contributed consists of the ioFog Linux service, the ComSat Linux service, the ioAuthoring application for creating and managing ioFog instances and publishing microservices, and the fabric controller application for orchestrating the instantiation of microservices on ioFog instances.

 

Github public repository:

https://github.com/iotracks/iofabric

 

Third-party libraries:

Netty (Apache 2 license)

HornetQ (Apache 2 license)

Docker-Java (Apache 2 license)

Project Scheduling: 

Initial contribution of core ioFog immediately upon project creation. A fully functional version already exists.

Updated build of ioFog in September, 2016 with some additional features. This version is already in development.

All system components available in extensible, distributed format by January, 2017. This includes ioFog, ComSat, ioAuthoring, and the Fabric Controller.

 

Java, Python, and Node.js SDKs contributed immediately.

Two additional SDKs prioritized and contributed in October, 2016.

Further SDKs contributed in January, 2017.

Future Work: 

Additional functionality:

Enhanced fabric controller API

IDE integration

Rich microservice publishing functionality

 

Community activities:

Hold industry-specific developer workshops to address particular current IoT challenges

Introduce adapter microservices to provide easy integration with other projects and backend systems

People
Project Leads: 
Committers: 
Saeid Baghbidi
Pavel Kazlou
Jerry Chen
Narahari Bharadwaj
Zishan Iqbal
Interested Parties: 

Ian Skerrett

Benjamin Cabé

Richard Soley

Samsung

Motorola Solutions