By now we’ve all heard the statistics about IoT. Depending on the source, anywhere from 20 to 75 Billion objects are predicted to be connected to the Internet by 2020. Though some have insisted that Internet of Things is over-inflated and a lot of hype, the reality is that even at a conservative estimate of 20B, the sea change that is coming is momentous. In late 2015, Gartner estimated that 6.4 Billion devices would be in use in 2016, reflecting a 30% increase over the previous year.
As impressive and far-reaching as Internet of Things is from a technological standpoint, the larger question is about how companies are prepared to deal with the management and deployment of devices at the enterprise level. The industry-wide transformation known as DevOps brought with it wide-scale changes in how software is developed, tested, and deployed. Today, changes must be made at the speed of the market and it’s not uncommon for companies to issue multiple software upgrades each day.
But IoT takes that demand to another level; given the wide range of devices, platforms, operating systems, and languages involved in this ecosystem, not to mention the security vulnerabilities, there has to be a clearly defined path for deployment.
The answer that has emerged in recent years is known as “containers.” In simple terms, containers answer the question of how to get software to run reliably when moving from one environment to another. Containers do this by providing an entire runtime environment in one package, which includes the application, plus all dependencies, libraries and other binaries, and configuration files needed to run it.
This is somewhat analogous to how virtual machines streamlined software development and testing by providing multiple instances of an operating system to end-users from one server. The big difference is that containers don’t require a hypervisor and only run 1 instance of an operating system; overall, this equates to far less memory and faster run time.
The low-bandwidth wireless connections characteristic of IoT devices don’t work well with push-based updates; connectivity can drop out or the devices may be set to receive updates sporadically. Containers take a different approach to IoT updates by sending only the image diffs (or differentials). As one expert has pointed out,
A device that issues a pull request for the latest version of its application image will be sent just the image diffs over the air rather than the entire image. Diff-based updates will complete much more quickly, which reduces the amount of time that the device needs to be connected and reduces the probability of failure, thus putting less stress on low-bandwidth networks.
There is a growing number of container-based tools on the market today that developers and other stakeholders can use to build, test, and deploy their Internet of Things solutions. We’ve outlined 5 of the most popular ones below.
Docker is an open source project that has nearly become synonymous with containerization. While the idea of containerization is not new, Docker popularized the concept by providing developers and testers with a fast and easy-to-use packaging, distribution, and deployment mechanism for software containers.
Docker is viewed as an important asset in IoT development because if provides low runtime overhead and easily scalable updates. According to Anna Gerber, “The appeal of a Dockerized application is that after you have built an image, you can ship and run it almost anywhere.”
Aside from being known in the industry for its ease of installation and simplicity of use, Docker has a formidable ecosystem of tools, such as native clustering (Docker Swarm) registry service (Docker Hub) and cloud service (Docker Cloud).
Kubernetes is an open source container cluster manager that aims to provide a “platform for automating deployment, scaling, and operations of application containers across clusters of hosts.” Originally designed by Google, Kubernetes has the advantage of 15 years of Google research. Because of that, Kubernetes also draws upon a robust user community and is one of the top projects on Github.
Kubernetes does have a reputation for being harder to install with a number of manual configurations required, though some are creating tools for making the setup process simpler.
While not strongly aligned with IoT development, Kubernetes belongs on this list because of its crucial role in the application container space. A recent startup named Heptio, begun by the founders of Kubernetes, seeks to make Kubernetes containers more extensible and user-friendly, which should open paths for Kubernetes adoption for native cloud-based IoT applications.
Resin.io is a startup aiming to bring the benefits of Linux containers to the world of IoT, and specifically to embedded devices. According to the website, “Resin.io makes it simple to deploy, update, and maintain code running on remote devices. We are bringing the web development and deployment workflow to hardware.”
In the words of one insider, the value of resin.io is that it basically creates a “modern DevOps framework for deploying code across thousands of IoT devices.”
The company has gone a step further in this direction by releasing ResinOS 2.0, which utilizes custom Linux distribution to run Docker containers on embedded devices.
Kontena is another startup that is seeking to innovate a part of the growing container ecosystem through easy integration with cloud and microservice environments.
According to its website, Kontena, “Using container technologies, such as Docker, can be tricky for large scale deployments. Kontena makes it very easy to deploy, manage, scale and monitor containerized applications on any cloud infrastructure.”
Kontena is open source, easily scalable, and works on any system running Linux. While use cases are not yet available for IoT, Kontena has the potential to make a significant contribution to simplifying the deployment of IoT containerized applications.
Again, as the recent press releases have made clear: “Kontena is built to maximize developer happiness by simplifying running containerized applications on any infrastructure: on-premises, cloud or hybrid.”
Amazon EC2 Container Service
Amazon EC2 Container Service (ECS) is the ecommerce giant’s cloud-based computing service for managing containers. It allows users to run and alter applications or microservices on groups of servers called clusters through API calls and task definitions. According to the AWS ECS website.
Amazon EC2 Container Service (ECS) is a highly scalable, high-performance container management service that supports Docker containers and allows you to easily run applications on a managed cluster of Amazon EC2 instances. Amazon ECS eliminates the need for you to install, operate, and scale your own cluster management infrastructure.
The value of EC2 is that it leverages the vast AWS ecosystem, seeks to make container management less complex, while also providing easy integration for Dockerized applications built on IoT.