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 and include tests to monitor and report on potential performance issues. The release will also establish the certification program within the EdgeX project for both commercial instances of the full platform and drop-in "EdgeX-compliant" microservices. Finally, this release will also start to look at EdgeX in a wider, distributed context - that is exploring EdgeX instances (or services) spread across a fog deployment.
Key release themes and planned features to be implemented will be detailed after the mid-year TSC Face-to-face meeing (~June 2018).
Certification Process - want to have outlined by Delhi
Probably will include different levels of certification (micro service, versus “box”, etc.)
Provide roadmap around technical debt/refactor (what and when)
Example: Device service rewrites (ex: BLE, Bacnet); allow multiple instances of any microservice (for future load balancing and scaling efforts - today only single instances are allowed)
Potentially, provide EdgeX User Interface(s)
In order to accomplish these targets, it is believed the following work must be accomplished for the Delhi release
Implement security & system management API hooks
Depending on the implementation needs of security and system management (see below), there may be a need to make changes to the 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. In support of access to services based on access control list security, additional micro service change could be required.
Support additional backend integration(s) such as Watson, AWS/Greengrass, …
Support additional export feature(s)
Support additional formats (Ex: Haystack, OPC-UA, …)
Support additional endpoint types (Ex: DDS, AMQP, …)
Provide enrichment services
How best to facilitate client command requests/actuation
Expose command information north bound (export of actuation information and APIs)
More dynamic configuration
Potentially, alternate message infrastructure between some or all the services
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). Additional changes may be required in support of security needs (like granting access by access control list).
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.
Many of these devices services need to be updated, made more consistent in makeup and more complete in terms of protocol implementation.
Explore potential use of hyperledger
System management API (action, alerts, metric) as discussed and outlined here
System management Agent (see same document above outlining the agent functionality and duties)
The target is to run all of EdgeX (all the services to include the virtual device service) on a Raspberry Pi 3 (1 GB RAM, 64bit CPU, at least 32GB storage space, running Raspbian Linux distro)
This is not an endorsement of the platform as our favorite or otherwise endorsed platform
It only suggests the general characteristics of a “developer community” target platform
This may not be entirely feasible without all Go replacements, but is the target and the development community will report back when/where this is not possible
For example, it is unlikely the target security implementation will fit on this size platform
Additional “developer community” targets
Startup in 1 minute or less (post OS boot – from micro service start to all services up and available)
Throughput for one piece of data (with one IP device connected by hard wire – versus WiFi) from data ingestion at the Device Service layer, through Core Data, to Rules Engine and back down through Command Service finally to Device Service for actuation will be < 1 second
These items are suggestion for Delhi or later releases that have not yet been fully vetted or voted on by the TSC, but will be reviewed as part of an upcoming meeting. Items in this list may be moved to the roadmap for other releases or discarded entirely.
Command: in order to protect the device from harmful commands, there should be the possibility to set a Min and Max limit for the value that is accepted on every single command. in fact the command service today is rather a hollow simple proxy, but in the future we very much envisioned adding additional security, caching to avoid having to hit the DS when unnecessary, and even grouping command requests for better resource conservation (especially for devices like BLE that get woken up when you hit them).
Data Transformation: This is something we have always considered as a potential in EdgeX – that of a filter, even a small transformation engine between device services and core data. Not a full blown export, but something that serves in a similar fashion and was common across services. We even thought about making it some type of quick CEP/rules engine feeder for those decisions that can’t wait to go through the rest of the layers.
While REST will not go away (a REST API will still exist around each micro service), there may be a need to implement point-to-point messaging between select services or to adopt some type of message bus unilaterally across all of EdgeX to support messaging among services.
Messaging provides for more asynchronous communications, typically lower latency communications, and better (or more finely tuned) communication quality of service (QoS). Are there places where messaging might be more appropriate (like between core data and export distro today). Would a use case dictate the use of an alternate messaging infrastructure be used among all services with an underlying message bus to support it? Would alternate protocols (SNMP, WebSockets, etc.) be desired in some use cases? For the Delhi release, some alternate communication requirements, design and early message implementation experimentation is likely to occur.