Skip to content

Architecture Overview

zero edited this page Feb 19, 2019 · 13 revisions

IoT engine follows microservice architecture, that structures an application as a collection of services that are:

  • Highly maintainable and testable
  • Loosely coupled
  • Independently deployable
  • Organized around business capabilities

Micro service can be as application:

  • dashboard-connector: communicates to external systems in IoT dashboard
  • edge-connector: communicates to external systems in edge device
  • edge-hardware-module: interact with internal hardware in edge device
  • edge-computation-unit: small batch computation by read/write points via GPIO of IoT sensors in edge device
  • edge-rule

Micro service must be designed with these rules:

  • Single responsibility principle: do only one purpose
  • Itself configurable, and itself testable
  • Communicates with each other via eventbus

Projects Structure

Show as gradle project style

  • iot-engine:core: Unit core, these components are designed to integrate(one or many) into executable application service.
  • iot-engine:dashboard: IoT dashboard
    • iot-engine:dashboard:connector: Container projects include a set of dashboard connectors that communicate to external systems.
    • iot-engine:dashboard:server: Dashboard server gateway API. Note: Currently, it is mixing and has not yet follow microservice architecture.
  • iot-engine:edge: IoT edge device
    • iot-engine:edge:bios: Main BIOS edge. Must be included on edge device
    • iot-engine:edge:module: Includes some mandatory modules on BIOS. For example:
      • installer: Install IoT edge connectors/rule
      • gpio: GPIO operation
      • monitor : Manage BIOS resource status, health check
    • iot-engine:edge:connector: Includes a set of edge connectors
    • iot-engine:edge:rule: Includes a set of edge rules
  • iot-engine:eventbus: Sharing eventbus address between edge and dashboard
  • iot-engine:ext: Customization for external open-source project

Naming convention

Describes Java project naming convention

  • ProjectName: Prefix nube
  • GroupId:
    • Root: com.nubeiot
    • Sub projects: ${rootGroup}.${parentProjectGroup}
  • ArtifactId:
    • Project name
  • PackageName: ${rootGroup}.${parentProjectGroup}.${projectName}

For example: Folder structure as:

iot-engine
|   ├── dashboard
│       ├── connector
│       │   ├── ditto
  • Project Name: nube-dashboard-connector-ditto
  • GroupId : com.nubeiot.dashboard.connector
  • ArtifactId : ditto
  • PackageName : com.nubeiot.dashboard.connector.ditto

Parts