Managing the IoT Quickly and Easily
Imagine this: technology has enabled you to set up more than 100 smart garbage bins across London in the runup to the 2012 Summer Olympics. These bins greet tourists and locals with up-to-date weather forecasts and the sporting events of the day. But because the small computers inside the bins inevitably fail, you find yourself going to each one of them to manually update the software.
That was the eureka moment for Alexandros Marinos, Pagan Gazzard and Petros Angelatos, who were consulting on the garbage bin project and would later co-found resin.io as a result of this real-world problem. “We have a picture of one of the founders that winter. It was cold, he was wearing gloves, and he’s sitting in one of these garbage cans in the middle of London, SSH-ing in remotely to try and nurse it back to health,” recounts Alison Davis, the company’s director of product marketing and strategy. “And they thought, ‘There has to be a better way to remotely manage fleets of these kinds of embedded devices.’”
A Technology Breakthrough
In fact, there was. Docker had recently launched its containerization technology, and the co-founders immediately saw that it could work perfectly with the remote, distributed devices that we have come to call the Internet of Things.
With lightweight software running in a Docker container on these devices, Davis says, “when you want to update your device, all you have to do is swap out for a new Docker container, and you’re good to go.”
By the end of 2013, the resin.io team had ported Docker to an Arm-based chip—the first company to do so—and they began to create a platform to enable users to build, remotely monitor, and manage a fleet of IoT devices at scale. The platform launched in 2015, and today, resin.io boasts over 100 customers, supporting products ranging from underwater drones and 3D printing to industrial automation and point of sale.
Originally, resin.io’s build servers were based on x86 processors by Intel, which is in contrast to the vast majority of IoT devices that use embedded Arm-based processors. To test and deploy code to a fleet of devices, a customer would do a git push from his or her laptop and send code to the resin.io build servers. Resin.io would then emulate the end user’s target architecture in software on top of x86 servers. For instance, for a Raspberry Pi fleet, resin.io would emulate the Arm device using QEMU, run the build & tests, and then send the finished Docker container down to the devices.
Adding Speed with Packet
While this emulation process worked, it was fairly slow and error-prone. When the resin.io team discovered that Packet offered powerful Armv8 servers, they were instantly intrigued by the idea of being able to offer “native” Arm builds, and decided to try it out.
“The Packet team was super helpful in getting things set up, including working with us to deploy a custom kernel built to help with rpi1 compatibility,” says Cameron Diver, maintainer of the resin.io builder. “They were also really good about letting us try out the hardware for quite a long time to make sure it fit our requirements fully.”
The result? Native Arm builds were as much as five times faster than the emulated builds.
Packet has been a great provider all around. Their hardware is top-notch, their connectivity is excellent, and they have a robust yet straight-forward API interface.
Last summer, resin.io moved all of its Arm device builds to Packet—and the upside isn’t just that the builds, at under five minutes, are faster. Davis points out that Packet’s bare metal Arm servers enabled them to address a whole new set of projects: “Applications written in certain languages, such as Rust or Golang, weren’t supported in the emulation tool that we were using before. With native Arm builds, we’re able to handle a much wider set of requirements from our users.” (The company still offers x86 builds for users with x86 devices who want to use them.)
The switch to Packet has been a positive experience for end users as well as the resin.io engineers. Says DevOps engineer Jack Brown: “Packet has been a great provider all around. Their hardware is top-notch, their connectivity is excellent, and they have a robust yet straight-forward API interface.”
New Developments Ahead
The company’s mission, Davis says, is “to make it easy and approachable to remotely manage and update code running on fleets of IoT devices.” To that end, the team is constantly working on ways to remove friction points and keep pace with a fast-expanding IoT world.
The first release of 2018 will support running multiple containers on a device. “We’ll allow you to divide your application into multiple services and deploy multiple Docker containers to a device,” says Davis. “That’s going to be a really big change to the model. We will see how much more people are able to do with our platform.”
The other big plan for this year is to launch their own Arm-based hardware: a carrier board based on the Raspberry Pi compute module 3 that was released last year. “We’re building in a lot of features that our customers find missing from stock Raspberry Pi’s when they scale up from prototype to production,” says Davis. The carrier board will have onboard storage and industrial connectors and power.
The bottom line, says Davis, is that “everything we do is to try to make it easier for people to build IoT projects and get to market as quickly as possible.” And Packet, she adds, “is a key piece of our core offering that gives our customers a really great service.”