Beliebte Suchanfragen
//

Microservice-Deployment ganz einfach mit Giant Swarm

3.5.2015 | 4 Minuten Lesezeit

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.

Beitrag teilen

//

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.