The Internet of Things (IoT) enables scalable and programmable physical sensing and actuation, however many of the computers involved in IoT deployments have a wide range of capability and resource constraints. For this reason, embedded systems technologies and practices have become the predominant programming model for IoT. However, IoT also relies on scalable technologies, such as cloud computing, to provide the resources (compute, networking, and storage) required by applications. The embedded systems programming model and technology ecosystem shares little with the models and approaches typically available in cloud computing settings.
In this dissertation, we explore new research that unifies embedded systems and cloud programming, deployment, and execution for IoT applications. Our approach is based on microservices – an architecture originally formulated to ease the development of cloud-based web services. We discuss how we can extend the microservice model to resource constrained microcontrollers so that an IoT application amalgamating devices and cloud resources consists only of portable software service components that use a common set of abstractions. We describe new abstractions, how they can be secured from attackers and eavesdroppers efficiently, and the design of an operating system supporting these abstractions to unify cloud servers and microcontrollers. We evaluate and demonstrate the flexibility, portability, and efficiency of our approach using end-to-end IoT applications and microbenchmarks. Our evaluation shows that this unique combination of advances achieves high performance and efficiency across all IoT tiers (sensors, network edge, and cloud) for the devices, systems, benchmarks, and applications that we study.