tRick: simple network 2 - Geschwindigkeit



Vergleich Infrastructure as Code (IaC) Frameworks - tRick

Alle Posts

  1. Abstraktion und Lines of Code
  2. Geschwindigkeit
  3. Diversity (polyglott), Tooling, Fazit

Benchmark Ausführungsgeschindigkeit

Ausführungsgeschwindigkeit

Direkt aus dem tRick Repository wird mehrfach (n=10) der Zyklus Build -> Check -> Deploy -> Remove ausgeführt. Damit sollen Cache Effekte statistisch gemittelt werden. Dazu nehme ich das Tool hyperfine zur Hilfe. Es führt Kommandos automatisch mehrfach aus und mittelt die Ergebnisse.

Meine Annahme ist es, dass Terraform vorne liegt, da das Programm selber statisch kompiliert in go geschrieben ist. Außerdem geht die Ausführung direkt auf die API.

Als Sprache bei Pulumi und CDK wird Typscript verwendet.

Generell würden mich persönlich Differenzen in der Ausführungszeit bis ca 3 Sekunden nicht stören, aber erst mal messen!

Geschwindigkeit CDK

Command Mean [s] Min…Max [s]
../speed/cycle.sh 135.861 ± 3.661 130.339…141.943

Die Funktionalität fordert hier ihren (Geschwindigkeits) Preis. Zu beachten ist, dass hier immer vollständige Durchgänge gemessen werden. Im der Entwicklung sollten eher Updates der Fall sein. Wenn der Anwendungsfall aber z.B. ein schnelles Aufbauen von Kundenportalen ist, währende der Kunde darauf wartet, könnte sich die Verwendung von reinem CloudFormation lohnen. Das bekommt man aus dem CDK mit cdk synth ausgegeben.

Geschwindigkeit Terraform

Command Mean [s] Min…Max [s]
../speed/cycle.sh 29.116 ± 1.992 28.131…34.605

Geschwindigkeit Pulumi

Für Pulumi muss man sich von Anfang an beim pulumi Server anmelden. Eine vollautomatischer Auf und Abbau habe ich nach einiger Ausprobiererei gelassen, daher nehme ich hier die einmaligen manuellen Werte:

time pulumi stack init ****/simplevpc
#real	0m1.641s
time pulumi  up -y
# real	0m19.977s
time pulumi destroy -y
# real	0m22.958s

Also ca. 44,57 Sekunden.

Geschwindigkeit GoFormation

Auslieferung des Stacks mit dem Tool Clouds.

Command Mean [s] Min…Max [s]
../speed/cycle.sh goformation 95.809 ± 4.242 90.154…106.028

Hier ist zu beachten, dass die Kompilierung des go Programms dazu gezählt wird. Die reine Generierung ist sehr schnell.

Geschwindigkeit CloudFormation

Command Mean [s] Min…Max [s]
../speed/cycle.sh 17.180 ± 25.861 4.460…66.312

Hier nehme ich die reine AWS CLI zum Deployen.

Zusammenfassung

In der Zusammenfassung hier die Ergebnisse:

Speed

Auch hier gibt natürlich die kürzeste Ausführungszeit am meisten Sterne.

Erstaunlich finde ich, dass tatsächlich reines CloudFormation - jedenfalls in diesem UseCase - noch vor Terraform liegt! DIe Optimierung der Parallelität scheint direkt bei AWS noch besser zu gehen. Außerdem hat CloudFormation den Vorteil, dass die endgültigen API Calls direkt von AWS zu AWS gehen und nicht von der Workstation zu AWS. Verwendet man terraform in einer CodeBuild pipeline, so entfällt dieser Vorteil.

Damit ergibt sich für 3 von 5 Dimensionen folgendes Übersichtsbild:

tRick 3 Dimensionen von 5 ermittelt

Damit macht das “Spinnen” Bild am Anfang des Artikels auch langsam Sinn…

Die restlichen zwei Dimensionen, nämlich “Diversity” und “Tooling” folgen im dritten Teil.

Similar Posts You Might Enjoy

tRick: simple network 3 - Diversity (polyglott), Tooling, Fazit

Vergleich Infrastructure as Code (IaC) Frameworks - tRick Teil 3 Alle Posts Abstraktion und Lines of Code Geschwindigkeit Diversity (polyglott), Tooling, Fazit - by Gernot Glawe

tRick: simple network 1 - Abstraktion und LoC

Vergleich Infrastructure as Code (IaC) Frameworks - tRick Ein Toolvergleich für Infrastructure as Code. Um effektiv AWS oder generell Cloud Ressourcen zu erzeugen, verwendet man zur Erhöhung des Automatisierungsgrades “Infrastracture as Code”, d.h. die Server, Datenbanken usw. werden in einer Sprache kodiert. Dieser Vorgang wird sinvollerweise über ein Framework, welches Tools dafür zur Verfügung stellt unterstützt. Aber für welches Tool/Framework entscheidet man sich? Hier werden wir mit Dimensionen für den tRick Benchmark Entscheidungshilfen geben. - by Gernot Glawe

Managing multiple stages with Terraform

Managing multiple environments in Terraform Introduction I recently started learning Terraform. For those who haven’t encountered it: Terraform is in essence a framework to describe Infrastructure as code by Hashicorp. When I began doing that, I was struggling with the staging-concept of Terraform. I did my research and came upon numerous 1 articles and blogs that described ways to manage (multiple) environments or stages in Terraform2. Since I wasn’t really happy with the other solutions and there didn’t seem to be a canonical way to handle multiple environments, I decided to try and figure out my own solution. - by Maurice Borgmeier