atomic upgrading of distributed systems
DESCRIPTION
Presentation given at HotSWUp 2008 workshop (co located with OOPSLA 2008) in Nashville, Tennessee, USA.TRANSCRIPT
![Page 1: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/1.jpg)
November 3, 2009
Atomic Upgrading ofDistributed Systems
HotSWUp'08
Sander van der Burg, Eelco Dolstra, Merijn de Jonge
SERG
![Page 2: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/2.jpg)
Introduction
• Nix deployment system• Disnix deployment system• Atomic upgrading
![Page 3: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/3.jpg)
Distributed systems
• Distributed systems– Consists of multiple autonomous computers– Components work together to reach a common goal– Appear to a user as one logical system– Components have intra-dependencies and inter-
dependencies
![Page 4: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/4.jpg)
Dependency relationships
![Page 5: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/5.jpg)
Upgrading distributed systems
• Upgrading distributed systems is complex:• Usually a semi automatic process• Requires up-to-date documentation• Requires people with skills• Tedious and error prone• Is not an atomic operation
![Page 6: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/6.jpg)
Upgrading distributed systems
• Upgrading distributed systems should be a simple process• Automatic process• Configurations should be captured in models• Upgrading should be an atomic operation
![Page 7: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/7.jpg)
Nix Deployment System
• Is a package manager, like RPM• Builds packages from Nix expressions• Stores components in isolation in a Nix store• Nix profiles which abstracts over store components• Upgrading is atomic• Deals with single systems
![Page 8: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/8.jpg)
Nix store and Nix profile
![Page 9: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/9.jpg)
Nix expressionrec { HelloService = derivation { name = "HelloService-1.0"; src = fetchurl { url = http://nixos.org/.../HelloService.tar.gz; md5 = "de3187eac06baf5f0506c06935a1fd29"; }; buildInputs = [ant jdk axis2]; builder = ./builder.sh; };
HelloWorldService = derivation { ... }; stdenv = ... firefox = import ... ... # other package definitions}
![Page 10: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/10.jpg)
Disnix Deployment System
• Extends the Nix deployment system with support for distributed systems
• Provides remote access to the Nix stores and Nix profiles trough a webservice interface
• Introduces three model types to model a distributed system
• Uses a variant of the two-phase commit algorithm to allow distributed atomic commits
![Page 11: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/11.jpg)
Disnix overview
![Page 12: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/12.jpg)
Services modelrec { pkgs = import ./pkgs.nix;
HelloService = { pkg = pkgs.HelloService; dependsOn = []; }; HelloWorldService = { pkg = pkgs.HelloWorldService; dependsOn = [ HelloService ]; };}
![Page 13: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/13.jpg)
Infrastructure model{ itchy = { hostname = "itchy"; targetEPR = http://itchy/.../DisnixService; }; scratchy = { hostname = "scratchy"; targetEPR = http://scratchy/.../DisnixService; };}
![Page 14: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/14.jpg)
Distribution model{services, infrastructure}:
[ { service = services.HelloService; target = infrastructure.itchy; } { service = services.HelloWorldService; target = infrastructure.scratchy; }]
![Page 15: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/15.jpg)
Distribution export<?xml version="1.0" encoding="utf-8"?><expr> <list> <attrs> <attr name="service"> <string value="/nix/store/bw7dnw...-HelloService-0.1"/> </attr> <attr name="target"> <string value="http://itchy:8080/axis2/services/DisnixService"/> </attr> </attrs> <attrs> <attr name="service"> <string value="/nix/store/2490znhi8...-HelloWorldService-0.1"/> </attr> <attr name="target"> <string value="http://scratchy:8080/axis2/services/DisnixService"/> </attr> </attrs> </list></expr>
![Page 16: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/16.jpg)
Atomic commits
• Commit-request phase:– Build all services on the coordinator machine– Transfer the services and intra-dependencies to the
cohort machines through the webservice interface• Request phase, on each cohort:– Deactivate the old components– Uninstall old components in profile– Install new component in profile– Activate new the components– All connections to the services are blocked
![Page 17: Atomic Upgrading of Distributed Systems](https://reader036.vdocument.in/reader036/viewer/2022080211/558ead971a28ab83708b472c/html5/thumbnails/17.jpg)
Concluding remarks
• We have demonstrated that we can extend the Nix approach of upgrading single systems to distributed systems• Upgrading can be done from a declarative
specification• Upgrading is an atomic operation
• Distribution of services is still a static process• We are developing a dynamic approach based on
quality of service models• http://www.nixos.org