Microservice-Deployment ganz einfach mit Giant Swarm

1 Kommentar

Mit Giant Swarm kann man Microservice-Anwendungen betreiben, ohne sich um die Bereitstellung der Infrastruktur oder Restriktionen durch die verwendeten Programmiersprachen kümmern zu müssen. Das Projekt befindet sich zur Zeit in der Alpha-Phase, für die man sich auf der Giant-Swarm-Seite registrieren kann. Ich wurde vor einigen Tagen in die Test-Phase aufgenommen und möchte testen, wie sich das Deployment von Microservice-Anwendungen mit Giant Swarm anfühlt.

Eine Giant-Swarm-Anwendung besteht aus einer Konfigurationsdatei (swarm.json) und ein oder mehreren Docker-Containern. Die Auslieferung und das Bauen der Container erfolgt mit dem Docker-Client. Mit dem swarm-Befehl kann die Anwendungskonfiguration ausgeführt und die Anwendung gesteuert werden.

Giant Swarm Overview

Eine Giant-Swarm-Anwendung besteht aus einem oder mehren Services. Diese beschreiben deren Domäne oder stellen technische Bausteine wie z.B. eine Datenbank dar. In der Giant-Swarm-Anwendungskonfiguration bestehen Services aus ein oder mehren Komponenten. Eine Komponente referenziert ein Docker-Image, das entweder aus der zentralen Registry Docker-Hub oder einer eigenen Docker-Registry heruntergeladen werden kann.

Services und Komponenten werden in der Konfigurationsdatei swarm.json beschrieben. Das folgende Listing zeigt die swarm.json Datei einer Microservice-Anwendung. Es handelt sich dabei um einen Online-Shop, der aus sechs Services besteht, einem technischen und fünf fachlichen Services. Der Service database-service stellt die NoSQL-Datenbanken Redis und MongoDB bereit. Diese werden von den fachlichen Services product-service, navigation-service und cart-service benutzt. Diese drei fachlichen Services werden dann wieder vom catalog-service und checkout-service benutzt. Die beiden letzten Services stellen sozusagen getrennte Domänen im User-Interface bereit. Eine vollständige Beschreibung der Microservice-Anwendung findet man in meinem Artikel “Microservices und die Jagd nach mehr Konversion”, die Giant-Swarm-Beispielkonfiguration befindet sich in meinem GitHub-Repository.

{
 "app_name": "shop",
 "services": [
   {
     "service_name": "database-service",
     "components": [
       {
         "component_name": "mongodb",
         "image": "mongo",
         "ports": [27017, 28017]
       },
       {
         "component_name": "redis",
         "image": "redis",
         "ports": [6379]
       }
     ]
   },
   {
     "service_name": "checkout-service",
     "components": [
         {
           "component_name": "shop",
           "image": "zutherb/monolithic-shop",
           "domains": { "monolithic-shop-zutherb.gigantic.io": 8080 },
           "ports": [8080],
           "dependencies": [
             {
               "name": "cart-service/cart",
               "port": 18100
             },{
               "name": "database-service/mongodb",
               "port": 27017
             }
           ]
         }
       ]
   },
   {
     "service_name": "catalog-service",
     "components": [
       {
         "component_name": "catalog",
         "image": "zutherb/catalog-frontend",
         "ports": [80],
         "domains": { "shop-zutherb.gigantic.io": 80 },
         "dependencies": [
           {
             "name": "product-service/product",
             "port": 18080
           },
           {
             "name": "navigation-service/navigation",
             "port": 18090
           },
           {
             "name": "cart-service/cart",
             "port": 18100
           },
           {
             "name": "checkout-service/shop",
             "port": 8080
           }
         ],
         "env": {
           "CHECKOUT_DESIGN": "standard"
         }
       }
     ]
   },
   {
     "service_name": "product-service",
     "components": [
       {
         "component_name": "product",
         "image": "zutherb/product-service",
         "ports": [18080],
         "dependencies": [
           {
             "name": "database-service/mongodb",
             "port": 27017
           }
         ]
       }
     ]
   },
   {
     "service_name": "navigation-service",
     "components": [
       {
         "component_name": "navigation",
         "image": "zutherb/navigation-service",
         "ports": [18090],
         "dependencies": [
           {
             "name": "database-service/mongodb",
             "port": 27017
           }
         ]
       }
     ]
   },
   {
     "service_name": "cart-service",
     "components": [
       {
         "component_name": "cart",
         "image": "zutherb/cart-service",
         "ports": [18100],
         "dependencies": [
           {
             "name": "database-service/redis",
             "port": 6379
           }
         ]
       }
     ]
   }
 ]
}

Die swarm.json kann mit dem Programm swarm gestartet werden. Das Konsolen-Programm lässt sich sehr einfach mit Brew auf einem Mac installieren, eine entsprechende Anleitung befindet sich in der Giant-Swarm-Dokumentation.

bz@cc $ swarm up
Starting application shop...
Application shop is up.
You can see all services and components using this command:
 
    swarm status shop
 
bz@cc $ swarm status
App shop is up
 
service             component   image                       instanceid    created              status
cart-service        cart        zutherb/cart-service        yhrer8pv6g4s  2015-04-29 08:41:01  up
catalog-service     catalog     zutherb/catalog-frontend    kn5yngzpq537  2015-04-29 08:40:58  up
checkout-service    shop        zutherb/monolithic-shop     5whwvc9l6x0k  2015-04-29 08:40:57  up
database-service    mongodb     mongo                       h5mhstve9dox  2015-04-29 08:40:55  up
database-service    redis       redis                       n34b441p94b9  2015-04-29 08:40:56  up
navigation-service  navigation  zutherb/navigation-service  hsldm8m61xrj  2015-04-29 08:41:00  up
product-service     product     zutherb/product-service     kkggq72p12db  2015-04-29 08:40:59  up

Nach dem Starten der Anwendung ist sie direkt verfügbar und kann über den folgenden Link aufgerufen werden. Man braucht sich keine Gedanken um Themen wie Infrastruktur, Service-Discovery und Skalierung zu machen, ganz im Zeichen der Docker-Philosophie “Build, Ship and Run – Any App, Anywhere”.

Das Fazit zur Alpha-Version von Giant Swarm ist durchaus positiv. Die Konfigurationsdatei ähnelt dem Format von Docker Compose und wenn man eine solche Beschreibung schon hat, lässt sich die Konfiguration relativ schnell migrieren. Das Starten der Anwendung ist mit dem Konsolen-Programm denkbar einfach. Das Konsolen-Programm stellt außerdem Kommandos bereit um Statistiken wie CPU- und Speicherverbrauch anzuzeigen, die einzelnen Komponenten zu skalieren und die Log-Dateien der einzelnen Komponenten zu überwachen. Alles hat im Test reibungslos funktioniert und Giant Swarm macht somit schon in der Alpha-Version einen guten Eindruck. Ich bin auf den ersten Projekteinsatz gespannt, da sich die PaaS-Lösung Giant Swarm wie ein Rundum-sorglos-Paket für das Deployment von Microeservice-Anwendungen an fühlt.

 

Bernd Zuther

Kampferprobter Projektveteran, der immer fokussiert auf die Lieferung von funktionierender Software in der vorgegebenen Zeit ist. Zu seinen stärksten Waffen gehören ein sicherer Umgang mit agilen Methoden wie Scrum und sein breit gestreutes IT-Wissen, das er gezielt dazu einsetzt, auch die schwierigsten Problemstellungen pragmatisch und einfach zu lösen.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentare

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.