A Reference Architecture for Distributed Software Deployment

56
A Reference Architecture for Distributed Software Deployment Sander van der Burg Delft University of Technology, EEMCS, Department of Software Technology August 2, 2013 Sander van der Burg A Reference Architecture for Distributed Software Deployment

description

Presentation given about my PhD thesis at CWI @ Amsterdam

Transcript of A Reference Architecture for Distributed Software Deployment

Page 1: A Reference Architecture for Distributed Software Deployment

A Reference Architecture for Distributed Software

Deployment

Sander van der Burg

Delft University of Technology, EEMCS,

Department of Software Technology

August 2, 2013

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 2: A Reference Architecture for Distributed Software Deployment

A Reference Architecture for Distributed Software

Deployment

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 3: A Reference Architecture for Distributed Software Deployment

A Reference Architecture for Distributed Software

Deployment

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 4: A Reference Architecture for Distributed Software Deployment

Software deployment

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 5: A Reference Architecture for Distributed Software Deployment

Software deployment

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Software deployment

All of the activities that make a software system availablefor use.

Page 6: A Reference Architecture for Distributed Software Deployment

Challenges

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 7: A Reference Architecture for Distributed Software Deployment

Challenges

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Software deployment

Time consuming

Error prone

Destructive upgrades

Downtimes

Page 8: A Reference Architecture for Distributed Software Deployment

Some history: Early history

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 9: A Reference Architecture for Distributed Software Deployment

Some history: High-level languages and operating systems

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 10: A Reference Architecture for Distributed Software Deployment

Some history: High-level languages and operating systems

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Software components

Requires compiler or interpreter and a compatible operatingsystem

Page 11: A Reference Architecture for Distributed Software Deployment

Some history: Component-based software engineering

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 12: A Reference Architecture for Distributed Software Deployment

Some history: Component-based software engineering

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Software components

Components increase programmer productivity

Components increase quality of software

Page 13: A Reference Architecture for Distributed Software Deployment

Some history: Component-based software engineering

Disadvantages:

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 14: A Reference Architecture for Distributed Software Deployment

Nowadays: Services on the Internet

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 15: A Reference Architecture for Distributed Software Deployment

Nowadays: Services on the internet

Challenges:

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 16: A Reference Architecture for Distributed Software Deployment

Nowadays: Services on the Internet

Challenges:

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Software components

Software deployment has become increasingly more compli-cated

Page 17: A Reference Architecture for Distributed Software Deployment

Earlier research: Nix and NixOS

A GNU/Linux distribution using the Nix package manager

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 18: A Reference Architecture for Distributed Software Deployment

Nix store

Main idea: store all packagesin isolation from each other:

/nix/store/rpdqxnilb0cg...

-firefox-3.5.4

Paths contain a 160-bitcryptographic hash of all

inputs used to build thepackage:

Sources

Libraries

Compilers

Build scripts

. . .

/nix/store

l9w6773m1msy...-openssh-4.6p1

bin

ssh

sbin

sshd

smkabrbibqv7...-openssl-0.9.8e

lib

libssl.so.0.9.8

c6jbqm2mc0a7...-zlib-1.2.3

lib

libz.so.1.2.3

im276akmsrhv...-glibc-2.5

lib

libc.so.6

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 19: A Reference Architecture for Distributed Software Deployment

Nix expressions

openssh.nix

{ stdenv, fetchurl, openssl, zlib }:

stdenv.mkDerivation {

name = "openssh-4.6p1";

src = fetchurl {

url = http://.../openssh-4.6p1.tar.gz;

sha256 = "0fpjlr3bfind0y94bk442x2p...";

};

buildCommand = ’’

tar xjf $src

./configure --prefix=$out --with-openssl=${openssl}

make; make install

’’;

}

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 20: A Reference Architecture for Distributed Software Deployment

Nix expressions

all-packages.nix

openssh = import ../tools/networking/openssh {

inherit fetchurl stdenv openssl zlib;

};

openssl = import ../development/libraries/openssl {

inherit fetchurl stdenv perl;

};

stdenv = ...;

openssl = ...;

zlib = ...;

perl = ...;

nix-env -f all-packages.nix -iA openssh

Produces a /nix/store/l9w6773m1msy...-openssh-4.6p1

package in the Nix store.

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 21: A Reference Architecture for Distributed Software Deployment

User environments

◮ Users can havedifferent sets ofinstalled applications.

PATH

/nix/.../profiles

current

42

/nix/store

pp56i0a01si5...-user-envbin

firefoxssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-firefox-3.5.4

binfirefox

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 22: A Reference Architecture for Distributed Software Deployment

User environments

◮ Users can havedifferent sets ofinstalled applications.

◮ nix-env operationscreate new user

environments in thestore.

PATH

/nix/.../profiles

current

42

/nix/store

pp56i0a01si5...-user-envbin

firefoxssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-firefox-3.5.4

binfirefox

aqn3wygq9jzk...-openssh-5.2p1bin

ssh

(nix-env -u openssh)

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 23: A Reference Architecture for Distributed Software Deployment

User environments

◮ Users can havedifferent sets ofinstalled applications.

◮ nix-env operationscreate new user

environments in thestore.

PATH

/nix/.../profiles

current

42

/nix/store

pp56i0a01si5...-user-envbin

firefoxssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-firefox-3.5.4

binfirefox

aqn3wygq9jzk...-openssh-5.2p1bin

sshi3d9vh6d8ip1...-user-env

binsshfirefox

(nix-env -u openssh)

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 24: A Reference Architecture for Distributed Software Deployment

User environments

◮ Users can havedifferent sets ofinstalled applications.

◮ nix-env operationscreate new user

environments in thestore.

PATH

/nix/.../profiles

current

42

43

/nix/store

pp56i0a01si5...-user-envbin

firefoxssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-firefox-3.5.4

binfirefox

aqn3wygq9jzk...-openssh-5.2p1bin

sshi3d9vh6d8ip1...-user-env

binsshfirefox

(nix-env -u openssh)

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 25: A Reference Architecture for Distributed Software Deployment

User environments

◮ Users can havedifferent sets ofinstalled applications.

◮ nix-env operationscreate new user

environments in thestore.

◮ We can atomicallyswitch between them.

PATH

/nix/.../profiles

current

42

43

/nix/store

pp56i0a01si5...-user-envbin

firefoxssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-firefox-3.5.4

binfirefox

aqn3wygq9jzk...-openssh-5.2p1bin

sshi3d9vh6d8ip1...-user-env

binsshfirefox

(nix-env -u openssh)

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 26: A Reference Architecture for Distributed Software Deployment

User environments

◮ Users can havedifferent sets ofinstalled applications.

◮ nix-env operationscreate new user

environments in thestore.

◮ We can atomicallyswitch between them.

◮ These are roots of thegarbage collector.

PATH

/nix/.../profiles

current

43

/nix/store

pp56i0a01si5...-user-envbin

firefoxssh

l9w6773m1msy...-openssh-4.6p1bin

sshrpdqxnilb0cg...-firefox-3.5.4

binfirefox

aqn3wygq9jzk...-openssh-5.2p1bin

sshi3d9vh6d8ip1...-user-env

binsshfirefox

(nix-env --remove-generations old)

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 27: A Reference Architecture for Distributed Software Deployment

User environments

◮ Users can havedifferent sets ofinstalled applications.

◮ nix-env operationscreate new user

environments in thestore.

◮ We can atomicallyswitch between them.

◮ These are roots of thegarbage collector.

PATH

/nix/.../profiles

current

43

/nix/store

rpdqxnilb0cg...-firefox-3.5.4bin

firefoxaqn3wygq9jzk...-openssh-5.2p1

binssh

i3d9vh6d8ip1...-user-envbin

sshfirefox

(nix-collect-garbage)

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 28: A Reference Architecture for Distributed Software Deployment

NixOS

In NixOS, all packages including the Linux kernel andconfiguration files are managed by Nix.

NixOS does not have directories such as: /lib and /usr

NixOS has a minimal /bin and /etc

But NixOS is more then just a distribution managed by Nix

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 29: A Reference Architecture for Distributed Software Deployment

NixOS configuration

/etc/nixos/configuration.nix

{pkgs, ...}:

{

boot.loader.grub.device = "/dev/sda";

fileSystems = [ { mountPoint = "/"; device = "/dev/sda2"; } ];

swapDevices = [ { device = "/dev/sda1"; } ];

services = {

openssh.enable = true;

xserver = {

enable = true;

desktopManager.kde4.enable = true;

};

};

environment.systemPackages = [ pkgs.mc pkgs.firefox ];

}

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 30: A Reference Architecture for Distributed Software Deployment

NixOS configuration

nixos-rebuild switch

Nix package manager builds a complete system configuration

Includes all packages and generates all configuration files, e.g.OpenSSH configuration

Upgrades are (almost) atomic

Components are stored safely next to each other, due to hashesNo files are automatically removed or overwritten

Users can switch to older generations of system configurationsnot garbage collected yet

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 31: A Reference Architecture for Distributed Software Deployment

NixOS bootloader

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 32: A Reference Architecture for Distributed Software Deployment

Deploying service-oriented systems

Nix and NixOS are not sufficient for deploying service-orientedsystems:

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 33: A Reference Architecture for Distributed Software Deployment

Deploying service-oriented systems

Nix and NixOS are not sufficient for deploying service-orientedsystems:

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 34: A Reference Architecture for Distributed Software Deployment

Deploying service-oriented systems

Nix and NixOS are not sufficient for deploying service-orientedsystems:

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Non-functional requirements

Is privacy-sensitive data secured?

Do the analysis components perform well?

Is the system resilient to machine crashes?

Are the software licenses governing the off-the-shelfcomponents properly obeyed?

Page 35: A Reference Architecture for Distributed Software Deployment

A Reference Architecture for Distributed Software

Deployment

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 36: A Reference Architecture for Distributed Software Deployment

Service deployment

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 37: A Reference Architecture for Distributed Software Deployment

Disnix

Distributed deployment extension for the Nix packagemanager

Captures deployment specification in models

Performs complete deployment process from models

Guarantees complete dependencies

Component agnostic

Supports atomic upgrades and rollbacks

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 38: A Reference Architecture for Distributed Software Deployment

SDS2: Distribution

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 39: A Reference Architecture for Distributed Software Deployment

Disnix

$ disnix-env -s services.nix -i infrastructure.nix -d distribution.nix

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 40: A Reference Architecture for Distributed Software Deployment

Disnix expressions

MELogService.nix

{javaenv, config, SDS2Util}:

{mobileeventlogs}:

javaenv.createTomcatWebApplication rec {

name = "MELogService";

contextXML = ’’

<Context>

<Resource auth="Container" type="javax.sql.DataSource"

url="jdbc:mysql://${mobileeventlogs.target.hostname}..." />

</Context>

’’;

webapp = javaenv.buildWebService {

inherit name;

src = ../../../WebServices/MELogService;

wsdlFile = "MELogService.wsdl";

libs = [ config SDS2Util ];

};

}

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 41: A Reference Architecture for Distributed Software Deployment

Service model

{distribution, system}:

let pkgs = import ../top-level/all-packages.nix {

inherit distribution system;

}; in

{ mobileeventlogs = {

name = "mobileeventlogs";

pkg = pkgs.mobileeventlogs;

type = "mysql-database";

};

MELogService = {

name = "MELogService";

pkg = pkgs.MELogService;

dependsOn = { inherit mobileeventlogs; };

type = "tomcat-webapplication";

};

SDS2AssetTracker = {

name = "SDS2AssetTracker";

pkg = pkgs.SDS2AssetTracker;

dependsOn = { inherit MELogService ...; };

type = "tomcat-webapplication";

};

...

}

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 42: A Reference Architecture for Distributed Software Deployment

Infrastructure model

{

test1 = {

hostname = "test1.net";

tomcatPort = 8080;

mysqlUser = "user";

mysqlPassword = "secret";

mysqlPort = 3306;

targetEPR = http://test1.net/.../DisnixService;

system = "i686-linux";

};

test2 = {

hostname = "test2.net";

tomcatPort = 8080;

...

targetEPR = http://test2.net/.../DisnixService;

system = "x86_64-linux";

};

}

Captures machines in the network and their relevant properties andcapabilities.

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 43: A Reference Architecture for Distributed Software Deployment

Distribution model

{infrastructure}:

{

mobileeventlogs = [ infrastructure.test1 ];

MELogService = [ infrastructure.test2 ];

SDS2AssetTracker = [ infrastructure.test1 infrastructure.test2 ];

...

}

Maps services to machines

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 44: A Reference Architecture for Distributed Software Deployment

Deployment process

Specifications are used to derive deployment process:

Building services from source code

Transferring services to target machines

Deactivating obsolete services and activating new services

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 45: A Reference Architecture for Distributed Software Deployment

Dynamic Disnix

Various events may occur in a network of machines:

Crashing machines

Adding a new machine

Change of a capability (e.g. increase of RAM)

Dynamic Disnix generates infrastructure and distributionmodels and redeploys a system

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 46: A Reference Architecture for Distributed Software Deployment

Other deployment aspects

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 47: A Reference Architecture for Distributed Software Deployment

Distributed NixOS configuration

network.nix

{ storage = {pkgs, ...}:

{

services.nfsKernel.server.enable = true; ...

};

postgresql = {pkgs, ...}:

{

services.postgresql.enable = true; ...

};

webserver = {pkgs, ...}:

{

fileSystems = [

{ mountPoint = "/repos"; device = "storage:/repos"; } ];

services.httpd.enable = true;

services.httpd.extraSubservices = [ { serviceType = "trac"; } ]; ...

};

...

}

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 48: A Reference Architecture for Distributed Software Deployment

Virtualization

nixos-build-vms network.nix; ./result/bin/nixos-run-vms

Builds a network of QEMU-KVM virtual machines closelyresembling the network of NixOS configurations

We don’t create disk images

The VM mounts the Nix store of the host system usingSMB/CIFS

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 49: A Reference Architecture for Distributed Software Deployment

Virtualization

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 50: A Reference Architecture for Distributed Software Deployment

Testing

trac.nix

testScript = ’’

$postgresql→waitForJob("postgresql");

$postgresql→mustSucceed("createdb trac");

$webserver→mustSucceed("mkdir -p /repos/trac");

$webserver→mustSucceed("svnadmin create /repos/trac");

$webserver→waitForFile("/var/trac");

$webserver→mustSucceed("mkdir -p /var/trac/projects/test");

$webserver→mustSucceed("trac-admin /var/trac/projects/test initenv ".

"Test postgres://root\@postgresql/trac svn /repos/trac");

$client→waitForX;

$client→execute("konqueror http://webserver/projects/test &");

$client→waitForWindow(qr/Test.*Konqueror/);

$client→screenshot("screen");

’’;

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 51: A Reference Architecture for Distributed Software Deployment

Testing

nix-build tests.nix -A trac

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 52: A Reference Architecture for Distributed Software Deployment

License analysis

We can also trace all files and processes involved in a buildprocess

And we can determine the licenses of the original source filesto say something about the result

/usr/bin/patchelfpatchelf.cc g++ patchelf.o g++ patchelf install

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 53: A Reference Architecture for Distributed Software Deployment

Conclusion

We have shown a reference architecture for distributedsoftware deployment

Reference architecture is based on Nix, a purely functionalpackage manager, and NixOS a Linux distribution builtaround Nix

We have shown tools to automate the deployment ofdistributed systems

They provide fully automatic, reliable, reproducible, andefficient deployment for the latest generation of systems

Components of the reference architecture can be used toconstruct a domain-specific deployment tool

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 54: A Reference Architecture for Distributed Software Deployment

A Reference Architecture for Distributed Software

Deployment

More information:

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 55: A Reference Architecture for Distributed Software Deployment

References

NixOS website: http://nixos.org

Nix. A purely functional package managerNixpkgs. Nix packages collectionNixOS. Nix based GNU/Linux distributionHydra. Nix based continuous build and integration serverDisnix. Nix based distributed service deploymentNixOps. NixOS-based multi-cloud deployment tool

Software available under free and open-source licenses(LGPL/X11)

Sander van der Burg A Reference Architecture for Distributed Software Deployment

Page 56: A Reference Architecture for Distributed Software Deployment

Questions

Sander van der Burg A Reference Architecture for Distributed Software Deployment