| <html> | |
| <head> | |
| <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | |
| <!-- | |
| Include the title here. We will parse it out of here and include it on the | |
| rendered webpage. Do not duplicate the title within the text of your page. | |
| --> | |
| <title>Krikkit</title> | |
| <style> | |
| dt { | |
| display: list-item; | |
| list-style-position: outside; | |
| list-style-image: | |
| url(/eclipse.org-common/themes/Phoenix/images/arrow.gif); | |
| margin-left: 16px; | |
| } | |
| dd { | |
| margin-left: 25px; | |
| margin-bottom: 5px; | |
| } | |
| </style> | |
| </head> | |
| <!-- | |
| We make use of the 'classic' HTML Definition List (dl) tag to specify | |
| committers. I know... you haven't seen this tag in a long while... | |
| --> | |
| <body> | |
| <p> | |
| The Krikkit project is a proposed open source project under the <a | |
| href="http://www.eclipse.org/projects/project_summary.php?projectid=technology">Technology | |
| Top-level Project</a>. | |
| </p> | |
| <!-- | |
| The communication channel must be specified. Typically, this is the | |
| "Proposals" forum. In general, you don't need to change this. | |
| --> | |
| <p> | |
| This proposal is in the Project Proposal Phase (as defined in the | |
| Eclipse Development Process) and is written to declare its intent and | |
| scope. We solicit additional participation and input from the Eclipse | |
| community. Please send all feedback to the <a | |
| href="http://www.eclipse.org/forums/eclipse.proposals">Eclipse | |
| Proposals</a> Forum. | |
| </p> | |
| <h2>Background</h2> | |
| <!-- | |
| Optionally provide the background that has lead you to creating this project. | |
| --> | |
| <p>The next step in the evolution of the Internet is what is being | |
| termed as The Internet of Things or IoT (also referred to as Internet | |
| of Everything in some contexts). It is expected that the next phase | |
| will see a paradigm shift in the way we communicate with a host of low | |
| powered devices such as sensors. As billions of sensor devices and | |
| nodes are attached to the network, they will generate vast amounts of | |
| data that will need to be processed. The amount of data generated will | |
| dwarf the already huge amount of Internet traffic generates today. The | |
| amount of processing that is required to sift through this raw data to | |
| glean useful information and knowledge will be huge and it will be a | |
| challenge to do it efficiently with current approaches. The current | |
| approach of "store first, analyze later" where all the data is | |
| processed in the cloud/backend at a later time may not be feasible not | |
| only due to the large amounts of data but also the need to take | |
| actions in real time based on the streaming data i.e. on data that is | |
| in motion and not static.</p> | |
| <p>To address these forthcoming challenges, we need to rethink the | |
| way we acquire and manage data. Instead of capturing all the data to | |
| be processed at the edge, we need a way to instruct the low powered, | |
| memory and resource constrained edge devices such as sensors and | |
| sensor gateways as to what data is of interest and what aspects of it | |
| to capture. From a user point of view, not all data is of interest and | |
| the ability to set rules/policies on the edge devices along with | |
| capabilities to search the data in real time and trigger subsequent | |
| actions will engender powerful advantages. The key benefit would be | |
| dramatic bandwidth reduction as we reduce the amount of data being | |
| sent back by eliminating data that is not needed. Secondly, devices at | |
| the edge may have the ability to understand the data and the ability | |
| to query the devices for semantic information available in sensor data | |
| will be valuable.</p> | |
| <p>To realize this vision of acquiring and managing data in motion | |
| in real time, we need a mechanism to communicate with the edge devices | |
| and a common language for doing so. This communication must provide | |
| the ability to set rules to describe data of interest, ability to | |
| understand and search the data including content and payload and the | |
| ability to trigger actions (e.g. actuate sensors) in response to | |
| events conditioned on rules. This proposal attempts to address the | |
| need for such a communication paradigm by providing an | |
| publish/subscribe architecture and API. This API will enable users to | |
| program the edge devices to acquire, search and deliver only data of | |
| interest while minimizing the bandwidth requirements. This will allow | |
| the scalability needed to manage a large number of devices in the IoT | |
| space.</p> | |
| <h2>Scope</h2> | |
| <p>The Krikkit Eclipse project provides an API through a software | |
| library that will enable a user or developer to 'program' IoT edge devices | |
| such as sensor gateways and make it easy to acquire and manage data. Such a | |
| library could also potentially be used as a plug-in in Eclipse | |
| frameworks to ease the programming of IoT devices.</p> | |
| <p>Specifically, Krikkit library provides a REST ful API for a | |
| programmer to specify and describe the data of interest. The edge | |
| devices may also have the ability to understand the semantics of the | |
| content/payload of the sensor data. The API, in this case can also be | |
| used to write queries describing the content which if matched against | |
| can result in further actions.</p> | |
| <p>The API translates these policies into an open format that can | |
| be understood by the edge devices. Krikkit also includes in its scope | |
| the format and definition for the JSON messages that will be used to | |
| communicate with the devices.</p> | |
| <p>Different edge devices may have different internal | |
| representations and different capabilities. For example, not all edge | |
| devices may be able to understand and search the payload. The scope of | |
| the proposal is only to describe what data is to be acquired, not the | |
| specification on how the capabilities of the device are to be | |
| implemented or even what the capabilities should be. The proposal also | |
| does not specify how the rules are to be represented internally on the | |
| edge devices.</p> | |
| <!-- | |
| All projects must have a well-defined scope. Describe, concisely, what | |
| is in-scope and (optionally) what is out-of-scope. An Eclipse project | |
| cannot have an open-ended scope. | |
| --> | |
| <h2>Description</h2> | |
| <!-- | |
| Describe the project here. Be concise, but provide enough information that | |
| somebody who doesn't already know very much about your project idea or domain | |
| has at least a fighting chance of understanding its purpose. | |
| --> | |
| <p>The Krikkit architecture is a publish/subscribe mechanism where | |
| rules/policies are registered on edge routers/gateways that have | |
| visibility into and communicate with sensors. The rules can be used to | |
| describe what data should be acquired. For example, we can acquire | |
| data based on network parameters such as protocol, IP address or port. | |
| We can also specify that content payload that matches certain criteria | |
| should be processed. For example, we could write a rule that says we | |
| wish to acquire data from sensors where the temperature is within a | |
| certain range. The Krikkit library provides the API and runs in the | |
| user's programming environment and can be linked against. In essence, | |
| a user writes a C program that specifies what data he is interested | |
| in. The API helps the user translate this program into a standard and | |
| open JSON format encapsulated as a REST message that can be understood | |
| by any edge device that supports the Krikkit API. A key part of the | |
| project is to work towards community consensus (de facto | |
| standardization) regarding the format of the JSON format used to | |
| express a policy. This policy is then sent by the API to the edge | |
| device of interest using a RESTful communication paradigm. This is the | |
| publish part of the architecture.</p> | |
| <p>An edge device supporting the Krikkit API will listen to the REST | |
| messages containing the JSON payloads that express the rules and will | |
| register them. A component of Krikkit runs on the edge devices and | |
| translates the rules from JSON format to the internal format of the | |
| device. The device will be responsible for translating the JSON | |
| messages into internal representations that it can understand since | |
| these representations are specific to each device. Traffic that flows | |
| through the device will be searched against the rules. The devices may | |
| have the ability to index and search the payload and content in the | |
| sensor data and also to execute queries on the payload. In this | |
| manner, the data at the edge of the network can be searched in | |
| real-time using the API to discover nuggets of information from the | |
| mountain of raw data. The rules may also specify what should be done | |
| with the matching traffic. Results of successful hits could be sent | |
| (again in a RESTful manner) to an endpoint which will be listening for | |
| responses from the edge device. This is the subscribe part of the | |
| architecture.</p> | |
| <h2>Why Eclipse?</h2> | |
| <p>There are currently several machine-to-machine and IoT related | |
| projects under the Eclipse Foundation umbrella. Since this a related | |
| area of work, we would like to leverage the expertise and community | |
| around these projects. Moreover, we see some areas where we can | |
| co-ordinate with existing projects such as the Ponte project which | |
| already aims to build a flexible M2M RESTful communication framework.</p> | |
| <p>Beyond this, we would like to contribute to the programmability | |
| of IoT devices by releasing open source software. This open source | |
| implementation of the API will accelerate the deployment of IoT | |
| devices.</p> | |
| <p>The Eclipse Foundation can help is in achieving the goals above | |
| and we see it as a perfect vehicle to take our vision of IoT forward.</p> | |
| <!-- Answer these two questions: What value does this project bring to | |
| the Eclipse community? What value do you expect to obtain from hosting your | |
| project at Eclipse? | |
| What value do you get by having your project at Eclipse over and above | |
| the value of hosting at Eclipse Labs? --> | |
| <h2>Initial Contribution</h2> | |
| <p>Our existing code implements our vision of the API described | |
| above. The code is still being extended to support additional features | |
| and community feedback is expressly desired.</p> | |
| <p>Code copyright is held by Cisco Systems. There are no libraries | |
| beyond normal C libraries. The project will use the Eclipse Public | |
| License.</p> | |
| <p>The code contains 2 components:</p> | |
| <p>1: The main component is a C library that provides an API (the | |
| Krikkit API ) that allows a user to specify the policy expressing how | |
| to acquire the data and what to do with it. The library runs in the | |
| user's programming environment and converts the API inputs into a JSON | |
| payload, encapsulates it in a REST message and registers it at the | |
| edge device. To make it easier to use the Krikkit library, a plug-in | |
| for Eclipse frameworks may be provided.</p> | |
| <p>2: The second component is the software running on the edge | |
| device that parses the JSON payload of incoming policies and | |
| translates them into a format understood by the edge device. Since | |
| different edge devices may have different internal formats that | |
| describe different capabilities, we will provide a simple reference | |
| example. The translation of the JSON payload into internal device | |
| representation and the way it is used is beyond the scope of this | |
| proposal. What will be provided is only an example of how this can be | |
| done.</p> | |
| <!-- | |
| Projects are expected to arrive at Eclipse with existing code. | |
| Describe the existing code that will be contributed to the project. Please provide | |
| a couple of paragraphs describing the code with modest detail, including important | |
| information like code ownership (who holds the copyright?), and some consideration | |
| of community that exists around the code. Include a listing of third-party libraries | |
| and associated licenses. | |
| --> | |
| <h2>Legal Issues</h2> | |
| <!-- | |
| Please describe any potential legal issues in this section. Does somebody else | |
| own the trademark to the project name? Is there some issue that prevents you | |
| from licensing the project under the Eclipse Public License? Are parts of the | |
| code available under some other license? Are there any LGPL/GPL bits that you | |
| absolutely require? | |
| --> | |
| <p>As far as we know, there are no legal issues associated with | |
| this project. There are no trademark issues relating to the project | |
| name. All the code was written for this project with the intention to release | |
| it inder the Eclipe Public License. The API currently supports the | |
| ability to use SSL for communication for which the OpenSSL package is | |
| being used.</p> | |
| <h2>Committers</h2> | |
| <!-- | |
| List any initial committers that should be provisioned along with the | |
| new project. Include affiliation, but do not include email addresses at | |
| this point. | |
| --> | |
| <p>The following individuals are proposed as initial committers to | |
| the project:</p> | |
| <dl> | |
| <dt>Vijay Subramanian, Cisco Systems</dt> | |
| <dt>Raghuram Sudhaakar, Cisco Systems</dt> | |
| </dl> | |
| <p>We welcome additional committers and contributions.</p> | |
| <!-- | |
| Describe any initial contributions of code that will be brought to the | |
| project. If there is no existing code, just remove this section. | |
| --> | |
| <h2>Mentors</h2> | |
| <!-- | |
| New Eclipse projects require a minimum of two mentors from the Architecture | |
| Council. You need to identify two mentors before the project is created. The | |
| proposal can be posted before this section is filled in (it's a little easier | |
| to find a mentor when the proposal itself is public). | |
| --> | |
| <p>The following Architecture Council members will mentor this | |
| project:</p> | |
| <ul> | |
| <li>Naci Dai</li> | |
| <li>Denis Roy</li> | |
| </ul> | |
| <h2>Interested Parties</h2> | |
| <!-- | |
| Provide a list of individuals, organisations, companies, and other Eclipse | |
| projects that are interested in this project. This list will provide some | |
| insight into who your project's community will ultimately include. Where | |
| possible, include affiliations. Do not include email addresses. | |
| --> | |
| <p>The following individuals, organisations, companies and projects | |
| have expressed interest in this project:</p> | |
| <ul> | |
| <li>Wes Johnson, Eurotech</li> | |
| <li><a href="http://www.davranetworks.com">Davra Networks</a></li> | |
| </ul> | |
| <h2>Project Scheduling</h2> | |
| <!-- | |
| Describe, in rough terms, what the basic scheduling of the project will | |
| be. You might, for example, include an indication of when an initial contribution | |
| should be expected, when your first build will be ready, etc. Exact | |
| dates are not required. | |
| --> | |
| <h2>Changes to this Document</h2> | |
| <!-- | |
| List any changes that have occurred in the document here. | |
| You only need to document changes that have occurred after the document | |
| has been posted live for the community to view and comment. | |
| --> | |
| <table> | |
| <tbody> | |
| <tr> | |
| <th>Date</th> | |
| <th>Change</th> | |
| </tr> | |
| <tr> | |
| <td>11-October-2013</td> | |
| <td>Document created</td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </body> | |
| </html> |