Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
A Reference Architecture for Distributed Software
Deployment
Sander van der Burg
Delft University of Technology, EEMCS,
De...
A Reference Architecture for Distributed Software
Deployment
Sander van der Burg A Reference Architecture for Distributed ...
A Reference Architecture for Distributed Software
Deployment
Sander van der Burg A Reference Architecture for Distributed ...
Software deployment
Sander van der Burg A Reference Architecture for Distributed Software Deployment
Software deployment
Sander van der Burg A Reference Architecture for Distributed Software Deployment
Software deployment
A...
Challenges
Sander van der Burg A Reference Architecture for Distributed Software Deployment
Challenges
Sander van der Burg A Reference Architecture for Distributed Software Deployment
Software deployment
Time consu...
Some history: Early history
Sander van der Burg A Reference Architecture for Distributed Software Deployment
Some history: High-level languages and operating systems
Sander van der Burg A Reference Architecture for Distributed Soft...
Some history: High-level languages and operating systems
Sander van der Burg A Reference Architecture for Distributed Soft...
Some history: Component-based software engineering
Sander van der Burg A Reference Architecture for Distributed Software D...
Some history: Component-based software engineering
Sander van der Burg A Reference Architecture for Distributed Software D...
Some history: Component-based software engineering
Disadvantages:
Sander van der Burg A Reference Architecture for Distrib...
Nowadays: Services on the Internet
Sander van der Burg A Reference Architecture for Distributed Software Deployment
Nowadays: Services on the internet
Challenges:
Sander van der Burg A Reference Architecture for Distributed Software Deplo...
Nowadays: Services on the Internet
Challenges:
Sander van der Burg A Reference Architecture for Distributed Software Deplo...
Earlier research: Nix and NixOS
A GNU/Linux distribution using the Nix package manager
Sander van der Burg A Reference Arc...
Nix store
Main idea: store all packages
in isolation from each other:
/nix/store/rpdqxnilb0cg...
-firefox-3.5.4
Paths cont...
Nix expressions
openssh.nix
{ stdenv, fetchurl, openssl, zlib }:
stdenv.mkDerivation {
name = "openssh-4.6p1";
src = fetch...
Nix expressions
all-packages.nix
openssh = import ../tools/networking/openssh {
inherit fetchurl stdenv openssl zlib;
};
o...
User environments
◮ Users can have
different sets of
installed applications.
PATH
/nix/.../profiles
current
42
/nix/store
pp...
User environments
◮ Users can have
different sets of
installed applications.
◮ nix-env operations
create new user
environme...
User environments
◮ Users can have
different sets of
installed applications.
◮ nix-env operations
create new user
environme...
User environments
◮ Users can have
different sets of
installed applications.
◮ nix-env operations
create new user
environme...
User environments
◮ Users can have
different sets of
installed applications.
◮ nix-env operations
create new user
environme...
User environments
◮ Users can have
different sets of
installed applications.
◮ nix-env operations
create new user
environme...
User environments
◮ Users can have
different sets of
installed applications.
◮ nix-env operations
create new user
environme...
NixOS
In NixOS, all packages including the Linux kernel and
configuration files are managed by Nix.
NixOS does not have dire...
NixOS configuration
/etc/nixos/configuration.nix
{pkgs, ...}:
{
boot.loader.grub.device = "/dev/sda";
fileSystems = [ { mou...
NixOS configuration
nixos-rebuild switch
Nix package manager builds a complete system configuration
Includes all packages an...
NixOS bootloader
Sander van der Burg A Reference Architecture for Distributed Software Deployment
Deploying service-oriented systems
Nix and NixOS are not sufficient for deploying service-oriented
systems:
Sander van der B...
Deploying service-oriented systems
Nix and NixOS are not sufficient for deploying service-oriented
systems:
Sander van der B...
Deploying service-oriented systems
Nix and NixOS are not sufficient for deploying service-oriented
systems:
Sander van der B...
A Reference Architecture for Distributed Software
Deployment
Sander van der Burg A Reference Architecture for Distributed ...
Service deployment
Sander van der Burg A Reference Architecture for Distributed Software Deployment
Disnix
Distributed deployment extension for the Nix package
manager
Captures deployment specification in models
Performs co...
SDS2: Distribution
Sander van der Burg 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...
Disnix expressions
MELogService.nix
{javaenv, config, SDS2Util}:
{mobileeventlogs}:
javaenv.createTomcatWebApplication rec...
Service model
{distribution, system}:
let pkgs = import ../top-level/all-packages.nix {
inherit distribution system;
}; in...
Infrastructure model
{
test1 = {
hostname = "test1.net";
tomcatPort = 8080;
mysqlUser = "user";
mysqlPassword = "secret";
...
Distribution model
{infrastructure}:
{
mobileeventlogs = [ infrastructure.test1 ];
MELogService = [ infrastructure.test2 ]...
Deployment process
Specifications are used to derive deployment process:
Building services from source code
Transferring se...
Dynamic Disnix
Various events may occur in a network of machines:
Crashing machines
Adding a new machine
Change of a capab...
Other deployment aspects
Sander van der Burg A Reference Architecture for Distributed Software Deployment
Distributed NixOS configuration
network.nix
{ storage = {pkgs, ...}:
{
services.nfsKernel.server.enable = true; ...
};
post...
Virtualization
nixos-build-vms network.nix; ./result/bin/nixos-run-vms
Builds a network of QEMU-KVM virtual machines close...
Virtualization
Sander van der Burg A Reference Architecture for Distributed Software Deployment
Testing
trac.nix
testScript = ’’
$postgresql→waitForJob("postgresql");
$postgresql→mustSucceed("createdb trac");
$webserve...
Testing
nix-build tests.nix -A trac
Sander van der Burg A Reference Architecture for Distributed Software Deployment
License analysis
We can also trace all files and processes involved in a build
process
And we can determine the licenses of...
Conclusion
We have shown a reference architecture for distributed
software deployment
Reference architecture is based on N...
A Reference Architecture for Distributed Software
Deployment
More information:
Sander van der Burg A Reference Architectur...
References
NixOS website: http://nixos.org
Nix. A purely functional package manager
Nixpkgs. Nix packages collection
NixOS...
Questions
Sander van der Burg A Reference Architecture for Distributed Software Deployment
Upcoming SlideShare
Loading in …5
×

A Reference Architecture for Distributed Software Deployment

1,391 views

Published on

Presentation given about my PhD thesis at CWI @ Amsterdam

Published in: Science
  • Be the first to comment

A Reference Architecture for Distributed Software Deployment

  1. 1. 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
  2. 2. A Reference Architecture for Distributed Software Deployment Sander van der Burg A Reference Architecture for Distributed Software Deployment
  3. 3. A Reference Architecture for Distributed Software Deployment Sander van der Burg A Reference Architecture for Distributed Software Deployment
  4. 4. Software deployment Sander van der Burg A Reference Architecture for Distributed Software Deployment
  5. 5. Software deployment Sander van der Burg A Reference Architecture for Distributed Software Deployment Software deployment All of the activities that make a software system available for use.
  6. 6. Challenges Sander van der Burg A Reference Architecture for Distributed Software Deployment
  7. 7. Challenges Sander van der Burg A Reference Architecture for Distributed Software Deployment Software deployment Time consuming Error prone Destructive upgrades Downtimes
  8. 8. Some history: Early history Sander van der Burg A Reference Architecture for Distributed Software Deployment
  9. 9. Some history: High-level languages and operating systems Sander van der Burg A Reference Architecture for Distributed Software Deployment
  10. 10. 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 operating system
  11. 11. Some history: Component-based software engineering Sander van der Burg A Reference Architecture for Distributed Software Deployment
  12. 12. 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
  13. 13. Some history: Component-based software engineering Disadvantages: Sander van der Burg A Reference Architecture for Distributed Software Deployment
  14. 14. Nowadays: Services on the Internet Sander van der Burg A Reference Architecture for Distributed Software Deployment
  15. 15. Nowadays: Services on the internet Challenges: Sander van der Burg A Reference Architecture for Distributed Software Deployment
  16. 16. 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
  17. 17. 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
  18. 18. Nix store Main idea: store all packages in isolation from each other: /nix/store/rpdqxnilb0cg... -firefox-3.5.4 Paths contain a 160-bit cryptographic hash of all inputs used to build the package: 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
  19. 19. 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
  20. 20. 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
  21. 21. User environments ◮ Users can have different sets of installed applications. PATH /nix/.../profiles current 42 /nix/store pp56i0a01si5...-user-env bin firefox ssh l9w6773m1msy...-openssh-4.6p1 bin ssh rpdqxnilb0cg...-firefox-3.5.4 bin firefox Sander van der Burg A Reference Architecture for Distributed Software Deployment
  22. 22. User environments ◮ Users can have different sets of installed applications. ◮ nix-env operations create new user environments in the store. PATH /nix/.../profiles current 42 /nix/store pp56i0a01si5...-user-env bin firefox ssh l9w6773m1msy...-openssh-4.6p1 bin ssh rpdqxnilb0cg...-firefox-3.5.4 bin firefox aqn3wygq9jzk...-openssh-5.2p1 bin ssh (nix-env -u openssh) Sander van der Burg A Reference Architecture for Distributed Software Deployment
  23. 23. User environments ◮ Users can have different sets of installed applications. ◮ nix-env operations create new user environments in the store. PATH /nix/.../profiles current 42 /nix/store pp56i0a01si5...-user-env bin firefox ssh l9w6773m1msy...-openssh-4.6p1 bin ssh rpdqxnilb0cg...-firefox-3.5.4 bin firefox aqn3wygq9jzk...-openssh-5.2p1 bin ssh i3d9vh6d8ip1...-user-env bin ssh firefox (nix-env -u openssh) Sander van der Burg A Reference Architecture for Distributed Software Deployment
  24. 24. User environments ◮ Users can have different sets of installed applications. ◮ nix-env operations create new user environments in the store. PATH /nix/.../profiles current 42 43 /nix/store pp56i0a01si5...-user-env bin firefox ssh l9w6773m1msy...-openssh-4.6p1 bin ssh rpdqxnilb0cg...-firefox-3.5.4 bin firefox aqn3wygq9jzk...-openssh-5.2p1 bin ssh i3d9vh6d8ip1...-user-env bin ssh firefox (nix-env -u openssh) Sander van der Burg A Reference Architecture for Distributed Software Deployment
  25. 25. User environments ◮ Users can have different sets of installed applications. ◮ nix-env operations create new user environments in the store. ◮ We can atomically switch between them. PATH /nix/.../profiles current 42 43 /nix/store pp56i0a01si5...-user-env bin firefox ssh l9w6773m1msy...-openssh-4.6p1 bin ssh rpdqxnilb0cg...-firefox-3.5.4 bin firefox aqn3wygq9jzk...-openssh-5.2p1 bin ssh i3d9vh6d8ip1...-user-env bin ssh firefox (nix-env -u openssh) Sander van der Burg A Reference Architecture for Distributed Software Deployment
  26. 26. User environments ◮ Users can have different sets of installed applications. ◮ nix-env operations create new user environments in the store. ◮ We can atomically switch between them. ◮ These are roots of the garbage collector. PATH /nix/.../profiles current 43 /nix/store pp56i0a01si5...-user-env bin firefox ssh l9w6773m1msy...-openssh-4.6p1 bin ssh rpdqxnilb0cg...-firefox-3.5.4 bin firefox aqn3wygq9jzk...-openssh-5.2p1 bin ssh i3d9vh6d8ip1...-user-env bin ssh firefox (nix-env --remove-generations old) Sander van der Burg A Reference Architecture for Distributed Software Deployment
  27. 27. User environments ◮ Users can have different sets of installed applications. ◮ nix-env operations create new user environments in the store. ◮ We can atomically switch between them. ◮ These are roots of the garbage collector. PATH /nix/.../profiles current 43 /nix/store rpdqxnilb0cg...-firefox-3.5.4 bin firefox aqn3wygq9jzk...-openssh-5.2p1 bin ssh i3d9vh6d8ip1...-user-env bin ssh firefox (nix-collect-garbage) Sander van der Burg A Reference Architecture for Distributed Software Deployment
  28. 28. NixOS In NixOS, all packages including the Linux kernel and configuration 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
  29. 29. 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
  30. 30. 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 hashes No files are automatically removed or overwritten Users can switch to older generations of system configurations not garbage collected yet Sander van der Burg A Reference Architecture for Distributed Software Deployment
  31. 31. NixOS bootloader Sander van der Burg A Reference Architecture for Distributed Software Deployment
  32. 32. Deploying service-oriented systems Nix and NixOS are not sufficient for deploying service-oriented systems: Sander van der Burg A Reference Architecture for Distributed Software Deployment
  33. 33. Deploying service-oriented systems Nix and NixOS are not sufficient for deploying service-oriented systems: Sander van der Burg A Reference Architecture for Distributed Software Deployment
  34. 34. Deploying service-oriented systems Nix and NixOS are not sufficient for deploying service-oriented systems: 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-shelf components properly obeyed?
  35. 35. A Reference Architecture for Distributed Software Deployment Sander van der Burg A Reference Architecture for Distributed Software Deployment
  36. 36. Service deployment Sander van der Burg A Reference Architecture for Distributed Software Deployment
  37. 37. Disnix Distributed deployment extension for the Nix package manager 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
  38. 38. SDS2: Distribution Sander van der Burg A Reference Architecture for Distributed Software Deployment
  39. 39. Disnix $ disnix-env -s services.nix -i infrastructure.nix -d distribution.nix Sander van der Burg A Reference Architecture for Distributed Software Deployment
  40. 40. 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
  41. 41. 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
  42. 42. 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 and capabilities. Sander van der Burg A Reference Architecture for Distributed Software Deployment
  43. 43. 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
  44. 44. 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
  45. 45. 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 distribution models and redeploys a system Sander van der Burg A Reference Architecture for Distributed Software Deployment
  46. 46. Other deployment aspects Sander van der Burg A Reference Architecture for Distributed Software Deployment
  47. 47. 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
  48. 48. Virtualization nixos-build-vms network.nix; ./result/bin/nixos-run-vms Builds a network of QEMU-KVM virtual machines closely resembling the network of NixOS configurations We don’t create disk images The VM mounts the Nix store of the host system using SMB/CIFS Sander van der Burg A Reference Architecture for Distributed Software Deployment
  49. 49. Virtualization Sander van der Burg A Reference Architecture for Distributed Software Deployment
  50. 50. 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
  51. 51. Testing nix-build tests.nix -A trac Sander van der Burg A Reference Architecture for Distributed Software Deployment
  52. 52. License analysis We can also trace all files and processes involved in a build process And we can determine the licenses of the original source files to 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
  53. 53. Conclusion We have shown a reference architecture for distributed software deployment Reference architecture is based on Nix, a purely functional package manager, and NixOS a Linux distribution built around Nix We have shown tools to automate the deployment of distributed systems They provide fully automatic, reliable, reproducible, and efficient deployment for the latest generation of systems Components of the reference architecture can be used to construct a domain-specific deployment tool Sander van der Burg A Reference Architecture for Distributed Software Deployment
  54. 54. A Reference Architecture for Distributed Software Deployment More information: Sander van der Burg A Reference Architecture for Distributed Software Deployment
  55. 55. References NixOS website: http://nixos.org Nix. A purely functional package manager Nixpkgs. Nix packages collection NixOS. Nix based GNU/Linux distribution Hydra. Nix based continuous build and integration server Disnix. Nix based distributed service deployment NixOps. 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
  56. 56. Questions Sander van der Burg A Reference Architecture for Distributed Software Deployment

×