The tools & technologies behind Resin.io

25
DevOps for the Internet of Things

Transcript of The tools & technologies behind Resin.io

DevOps for the Internet of Things

Senior Software EngineerExperience Team @ resin.io

Akis Kesoglou

The tools and technologies behind resin.io

What’s in for today

• Architecture Overview

• Core Technologies

• Development Tools and Processes

What is resin.io

• Deploys your application to your remote Linux-based devices

• Supports a dozen devices and any language/platform

• Enables fast code/push/deploy development cycle

Architecture Overview

Architecture Overview

• Service-oriented git, Dashboard, API, Builder, Registry, Proxy, Database

• Deployed in Docker containers on Amazon AWS

• Linux, Docker, Node.js, PostgreSQL

Architecture Overview

• git • Performs authentication • Receives your code

• Builder • Builds application image • Pushes to Registry • Notifies API

• API • Notifies devices via Proxy

• Resin Agent • Downloads new image • Kills previous container • Starts new container

$ git push resin master

Core Technologies

Core Technologies

• git

• Docker

• Yocto Linux

• Node.js

• Go

• SBVR & OData

• Entry-point to resin.io

• Orchestration via hooksAuthentication, progress report, etc.

git

Docker

• High-level API to underlying Linux technologycgroups, kernel namespaces, union filesystems (aufs, overlayfs, btrfs)

• Containers • Light-weight, self-contained “virtual-machines” • Contain application code and dependencies • Provide isolation and resource management • Deployed as images • Same image can be deployed anywhere • Transient, running instances of an image

Yocto Linux

• “Meta-Distribution”Set of tools to build Linux distributions

• Single Linux distribution for all our supported boards

• x86, x64, ARM architectures

• Configuration via Board Support Packages (BSP)kernel, modules, bootloader, etc.

Node.js

• Used for our CLI, API, Agent

• Write once, deploy everywhere

• Huge community and number of projects

• Fast enough

• Pyramid of dependencies

• Memory footprint

Go

• Used for our new Resin Agent

• No interpreter!Tiny memory footprint and fast

• Easy to cross-compile

• Verbose syntax

SBVR & OData

• SBVR“Semantics of Business Vocabulary and Business Rules”

• ODataProtocol for building RESTful APIs

• PineJS

SBVR & OData

Term: pilot Term: plane Fact type: pilot can fly plane Fact type: pilot is experienced Rule: It is obligatory that each pilot can fly at least 1 plane Rule: It is obligatory that each pilot that is experienced can fly at least 3 planes

SBVR & OData

// Get all experienced pilots GET http://api.example.com/pilot?↩ $filter=(is_experienced eq true)

Development Tools andProcesses

We Work Remotely

• Distributed teamPeople work remotely from 10 different countries

• Offices in 3 countriesGreece, UK, US

• All-Resin call once a week

• Ad-hoc calls

• Summit once a year

Development Tools

• Flowdock

• Mumble

• Bitbucket

• Jira

• Confluence

• Vagrant + VirtualBoxfor our development environment

Development Workflow

• Ticket in Jira

• Branch in git

• Pull Request in Bitbucket

• Deployment to staging

• Test and refine

• Deployment to production

LinksResin.io https://resin.io/

Docker https://docker.com/

Yocto Project https://yoctoproject.org/

SBVR Spec http://www.omg.org/spec/SBVR/Current/

OData http://odata.org/

Flowdock https://flowdock.com/

Mumble http://mumble.info/

Vagrant https://vagrantup.com/

Jira https://atlassian.com/software/jira/

Confluence https://atlassian.com/software/confluence/

Thank you!

The tools and technologies behind resin.io

Questions?