Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 20 Next »


Delivery:  ~ October 2018

The Delhi release is slated to provide the first system management capabilities while also implementing additional features in the security.  Delhi will continue to show improvements in performance by offering Device Service SDKs in Go and C.  Improved testing at all levels (unit, blackbox, performance, etc.) to ensure the quality of the system going forward while also providing a means to check backward compatibility.  Finally, this release will include design and implementation plans (scheduled for Edinburgh release and beyond) for the replacement of MongoDB as the reference implementation database, and a replacement to the export services to allow for better scale and flexibility at the northbound layer.  the scope of this release is smaller given the development cycle for the prior California release was made longer to accommodate all the Go Lang refactoring.

Release Themes and Objectives

  • Deliver system management APIs in all the microservices and provide a system management agent for orchestrating multi-service system management commands and communications to 3rd party system management tools/platforms.
  • Go and C device service SDKs with at least one device service implementation for example sake.
  • The next wave of security features to include access control lists to grant access to appropriate services, and improved security service bootstrapping.
  • Refactored and improved Go Lang microservices
  • Options and implementation plan for database replacement
  • Design and implementation plans for export service replacement with application services
  • Provide an EdgeX UI suitable for use in exploring several instances of EdgeX

General Tasks and Notes

  • Implement a performance test harness

    To establish a baseline of performance characteristics that can be used to understand EdgeX resource utilization, data throughput, etc.

  • Support binary data

    Allow the EdgeX system (from device services through export services) to support binary data such as images, chunks of video or audio.  This will require device services, core data, and the export distribution to appropriately handle this type of data.  Local edge analytics may be fed binary data and create intelligence from it to allow for actuation at the edge based on the binary data (example: examine an image an detect the presence of a person of interest).

  • Explore the use of Swagger to document the EdgeX REST API
    EdgeX currently uses RAML to disseminate information on microservice APIs.  Swagger offers more fidelity while also offering better code generation going forward.
  • Provide an initial EdgeX user interface
    This Javascript-based user interface will allow users to explore the sensor data collected by EdgeX as well as provide some provisioning and management capability.  Used for prototyping, demonstration and management of small clusters of EdgeX instances.
  • Update all services to return proper HTTP status codes on HTTP requests
  • Add tracing to all services, which will allow better debugging and support
  • Establish a Wiki page to point EdgeX users to extensions, modules, add-ons, etc. offered by the community or 3rd parties, but that are not managed or incorporated by EdgeX Foundry.

Core & Supporting Services Tasks and Notes

  • Replace any Java microserices that still exist.

  • Improve the configuration of EdgeX

    • Refactor config-seed to only load the configuration appropriate to the application setting based on profiles (i.e. development, production, production docker or snap, etc.)
    • Replace the simple key/value pair organization of service configuration with more structured and hierarchical configuration as supported by Consul
    • Upgrade Consul and improve the configuration seed
    • Implement a process to move the latest configuration into the config-seed through the CI process
  • Refactor the core and supporting services (inclusive of export services as necessary)

    Refactor the services to implement data drive design, improves structure and organization of the code, improves ability to abstract infrastructure needs (database, messaging, etc.) to allow for replacements later, and allow services to bootstrap without artificial sleep mechanisms.  Separates the domain model from the contract model.

  • Implemented more structured / formatted logging
    Allows for better query and inspection of logs going forward.
  • Implement security & system management API hooks

    Depending on the implementation needs of security and system management, there may be a need to make changes to the micro service code in support of these facets.  It is likely that each micro service will implement some sort of base service to provide data and system management functionality to the system management agent.  Access control to the service APIs will also be managed by the security services and code added to the service to require authentication before accessing the services will be needed.

Export Services Tasks and Notes

  • Implement security & system management API hooks

    Depending on the implementation needs of security and system management, there may be a need to make changes to the micro service code in support of these facets.  It is likely that each micro service will implement some sort of base service to provide data and system management functionality to the system management agent.  Access control to the service APIs will also be managed by the security services and code added to the service to require authentication before accessing the services will be needed.

  • Design the application services - a replacement of export services
  • The existing export services will not scale because additional code must be added to the client and distribution services with each additional transformation, filter, formatting, or endpoint need.  Further, it does not allow for eliminating filter, transformation, or endpoint distribution code when it is not needed.  Adding additional capability requires additional code be added to the existing service.  The new application services (as initially specified in the document here) will be backed by requirement specifications and designed in time for the Delhi release with the goal of implementing this replacement service(s) for the Edinburgh release.

Device Services and SDK Tasks and Notes

  • Implement device service SDKs in Go Lang and C.
    The device service SDKs and resulting device services will allow the EdgeX community to retire the last of the Java micro services and complete the dramatic performance improvement of EdgeX.  

  • A stretch goal includes providing the existing device services in Modbus, BACNet, BLE, etc. in either Go or C.  

    Many of the original device services where created with driver stacks that are suit for purpose on all platforms, are no longer supported, are not homogeneous in their make up (i.e. having some parts Java while other elements in Python), or are using stacks that are not consider the best option for the protocol today.  The BLE and BACnet device services fall under this categorization.

    Several of the device services were created to prove, conceptually, how to connect to a device using that protocol, but it may not be a full implementation of the protocol API.  For example, the SNMP device service implements enough to drive a Patlite and a few other devices, but does not understand all of SNMP.

  • Implement security & system management API hooks

    Depending on the implementation needs of security and system management, there may be a need to make changes to the SDKs and existing micro service code in support of these facets.  It is likely that each micro service will implement some sort of base service to provide data and system management functionality to the system management agent.  As device services are typically created from an SDK, the same boilerplate code for the base service needs to be added to the SDK(s).  Access control to the service APIs will also be managed by the security services and code added to the service to require authentication before accessing the services will be needed.

Security Tasks and Notes

  • To be determined by the Security Working Group but likely includes access control lists, use of JWT for authentication/access token, and securing the bootstrapping

System Management Tasks and Notes

  • System management API (action, alerts, metric) as discussed and outlined here

  • System management Agent (see same document above outlining the agent functionality and duties)

  • As a stretch goal, allow services to respond to native init processes (example: as that provided by systemd).  The functionality added with the outlined system management APIs should help facilitate systemd calls

  • Potentially explore "Gateway management" to include:
    • Demonstrate basic management of EdgeX via select 3rd party console (ex: VMware Pulse IoT Center, System Center, …)
    • Demonstrate EdgeX software updates
    • Updates to non-EdgeX components (drivers, end-devices)

Testing/QA

  • Performance tests on startup time, request/response times on all APIs, latency to actuation from device service collection, through core data, to rules engine, command back to a device service.
    • Performance metric testing will include CPU and memory usage statistics
  • Improved unit and integration testing across all EdgeX microservices
    • Returning unit test coverage to ~80%
    • Requires some Go code refactoring and decoupling among resources (like the database, logging, etc.)
    • Use of mock objects to isolate functions under test.


·         Use of JWT for authentication/access token


  • No labels