Section: New Results
Composing Applications in the Internet of Things
Participants : Aness Bajia, Animesh Pathak, Françoise Sailhan.
Resilient computing is defined as the ability of a system to remain dependable when facing changes. To mitigate faults at runtime, dependable systems embark fault tolerance mechanisms such as replication techniques. These mechanisms have to be systematically and rigorously applied in order to guarantee the conformance between the application runtime behavior and its dependability requirements.
Given that devices and networks constituting the IoT are prone to failure and consequent loss of performance, it is natural that IoT applications are expected to encounter and tolerate several classes of faults - something that still largely remains within the purview of low-level-protocol designers. As part of our work on the MURPHY project (§ 8.1.1.1 ), we are addressing this issue by proposing: i) a set of abstractions that can be used during macroprogramming to express application-level fault tolerance requirements, as well as by developers of fault tolerance protocols to identify the abilities and requirements of their techniques; ii) a runtime system that employs adaptive fault tolerance (AFT) to provide fault tolerance to the networking sensing application; and iii) compilation techniques to instantiate and map tasks as needed to satisfy the requirements of the application for a given deployment. Through our work [26] , we demonstrate that our approach provides this much-needed feature to networked sensing applications with negligible development- and minimal performance- overhead.
Complementary to the above, we have proposed task mapping algorithms to satisfy those requirements through a constraint programming approach [24] . Through evaluations on realistic application task graphs, we show that our constraint programming model can effectively capture the end-to-end requirements and efficiently solves the combinatorial problem introduced.
We have been continually incorporating our research results in the above areas into Srijan (§ 5.5 ), which provides an easy-to-use graphical front-end to the various steps involved in developing an application using the ATaG macroprogramming framework.