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.
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.
1{ 2 "app_name": "shop", 3 "services": [ 4 { 5 "service_name": "database-service", 6 "components": [ 7 { 8 "component_name": "mongodb", 9 "image": "mongo", 10 "ports": [27017, 28017] 11 }, 12 { 13 "component_name": "redis", 14 "image": "redis", 15 "ports": [6379] 16 } 17 ] 18 }, 19 { 20 "service_name": "checkout-service", 21 "components": [ 22 { 23 "component_name": "shop", 24 "image": "zutherb/monolithic-shop", 25 "domains": { "monolithic-shop-zutherb.gigantic.io": 8080 }, 26 "ports": [8080], 27 "dependencies": [ 28 { 29 "name": "cart-service/cart", 30 "port": 18100 31 },{ 32 "name": "database-service/mongodb", 33 "port": 27017 34 } 35 ] 36 } 37 ] 38 }, 39 { 40 "service_name": "catalog-service", 41 "components": [ 42 { 43 "component_name": "catalog", 44 "image": "zutherb/catalog-frontend", 45 "ports": [80], 46 "domains": { "shop-zutherb.gigantic.io": 80 }, 47 "dependencies": [ 48 { 49 "name": "product-service/product", 50 "port": 18080 51 }, 52 { 53 "name": "navigation-service/navigation", 54 "port": 18090 55 }, 56 { 57 "name": "cart-service/cart", 58 "port": 18100 59 }, 60 { 61 "name": "checkout-service/shop", 62 "port": 8080 63 } 64 ], 65 "env": { 66 "CHECKOUT_DESIGN": "standard" 67 } 68 } 69 ] 70 }, 71 { 72 "service_name": "product-service", 73 "components": [ 74 { 75 "component_name": "product", 76 "image": "zutherb/product-service", 77 "ports": [18080], 78 "dependencies": [ 79 { 80 "name": "database-service/mongodb", 81 "port": 27017 82 } 83 ] 84 } 85 ] 86 }, 87 { 88 "service_name": "navigation-service", 89 "components": [ 90 { 91 "component_name": "navigation", 92 "image": "zutherb/navigation-service", 93 "ports": [18090], 94 "dependencies": [ 95 { 96 "name": "database-service/mongodb", 97 "port": 27017 98 } 99 ] 100 } 101 ] 102 }, 103 { 104 "service_name": "cart-service", 105 "components": [ 106 { 107 "component_name": "cart", 108 "image": "zutherb/cart-service", 109 "ports": [18100], 110 "dependencies": [ 111 { 112 "name": "database-service/redis", 113 "port": 6379 114 } 115 ] 116 } 117 ] 118 } 119 ] 120}
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.
1bz@cc $ swarm up 2Starting application shop... 3Application shop is up. 4You can see all services and components using this command: 5 6 swarm status shop 7 8bz@cc $ swarm status 9App shop is up 10 11service component image instanceid created status 12cart-service cart zutherb/cart-service yhrer8pv6g4s 2015-04-29 08:41:01 up 13catalog-service catalog zutherb/catalog-frontend kn5yngzpq537 2015-04-29 08:40:58 up 14checkout-service shop zutherb/monolithic-shop 5whwvc9l6x0k 2015-04-29 08:40:57 up 15database-service mongodb mongo h5mhstve9dox 2015-04-29 08:40:55 up 16database-service redis redis n34b441p94b9 2015-04-29 08:40:56 up 17navigation-service navigation zutherb/navigation-service hsldm8m61xrj 2015-04-29 08:41:00 up 18product-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.
Weitere Beiträge
von Bernd Zuther
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
Weitere Artikel in diesem Themenbereich
Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.
Gemeinsam bessere Projekte umsetzen.
Wir helfen deinem Unternehmen.
Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.
Hilf uns, noch besser zu werden.
Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.
Blog-Autor*in
Bernd Zuther
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.