Deze introductie is in 3 delen verdeeld en bedoeld om ons technologische ecosysteem te omschrijven voor onze peers. Om te beginnen met onze ‘Tools’ en verder zullen we ingaan op ‘Protocols & Persistence’ en ‘Deploying & Monitoring’.
Golang, ook bekend als ‘Go’, is een open-source programmeertaal ontwikkeld door Google. Vanwege de eenvoud, efficiëntie, garbage collection, expliciete error handling, de uitgebreide standard library (bestaande uit o.a. een eigen testing framework en een linter) en een sterke ondersteuning vanuit de Go-gemeenschap, is Go onze voorkeurstaal voor het ontwikkelen van schaalbare cloud-native web services en applicaties. Go wordt in de wereld van softwareontwikkeling geprezen om zijn simpliciteit en afwezigheid van ambiguïteit in de syntaxis. Daarnaast wordt Go-code gecompileerd naar een enkele binary waardoor het efficiënt te deployen en beheren is. Bij Weave zijn wij daarom ook erg te spreken over Go.
Kubernetes is een open-source platform om containerized applicaties te ontwikkelen, schalen en beheren. Of in het kort; een container orkestratie systeem. Kubernetes is een populaire keuze onder ontwikkelaars voor het implementeren van een microservice-architectuur. Het biedt aanzienlijke voordelen zoals automatisering van deployments, rollbacks, versiebeheer, schaalbaarheid, opslag van data in de cloud, load balancing en een zelfherstellend vermogen van de applicatie wanneer deze in een error-state belandt. Leuk om te weten; de broncode van Kubernetes is geschreven in Go!
De configuratie van Kubernetes is declaratief van aard. Als ontwikkelaars beschrijven wij de state van de clusters (b.v. Welke services draaien er? Hoeveel replica's van elke service moeten er zijn?) en Kubernetes zorgt ervoor dat deze state dan ook wordt behouden. Door middel van deze manier van declaratief versiebeheer faciliteren we ook de samenwerking tussen teamleden.
GCP (ofwel Google Cloud Platform) biedt moderne, schaalbare en flexibele cloud oplossingen voor ontwikkelaars, waardoor wij verschillende soorten applicaties kunnen deployen. GCP heeft een pay as you go-model en een groot scala aan handige ingebouwde services op het platform.
GCP is goed beveiligd en heeft ook uitstekende backup mogelijkheden voor wanneer het noodlot toeslaat. Google is daarnaast de oorspronkelijke ontwikkelaar van zowel Kubernetes als Go heeft een centrale rol gespeeld in de ontwikkeling en popularisering van beide tools. Hierdoor zijn GCP, Kubernetes en Go goed met elkaar geïntegreerd.
Terraform is een infrastructure-as-code (IaC) tool die wij gebruiken voor het bouwen, automatiseren, wijzigen en beheren van de infrastructuur van onze applicaties in de cloud. De configuratiebestanden van Terraform bieden ons expliciete controle over de levenscyclus van onze applicaties op een herhaalbare en consistente manier. In essentie bestaat de workflow van Terraform uit 3 stappen (+ een optionele 4e stap):
Bij Weave maken we gebruik van de laatste technologieën op het gebied van broncode generatie. Met de juiste frameworks kunnen delen van de code automatisch worden gegenereerd op basis van bepaalde specificaties, modellen of configuraties. Denk hierbij aan API-specs zoals die van OpenAPI, GraphQL en gRPC. Het doel van code generation is om de ontwikkeling van software te versnellen, herhaalbare taken te verminderen en consistente codekwaliteit te waarborgen. Het produceren van boilerplate-code en creëren van complexe datastructuren en API-client libraries wordt hierdoor versimpeld.
Onze code hosten wij op GitLab. GitLab is een all-in-one platform dat een set van tools biedt voor het beheren van de levenscyclus van softwareontwikkeling, implementatie en monitoring om zo onze DevOps praktijken te verbeteren. Zo verminderen wij de noodzaak van meerdere tools. Door onder andere onze bugs, requirements en documentatie op hetzelfde platform te hebben als onze code, verbetert onze productiviteit en efficiëntie.
Aan de hand van het ingebouwde CI/CD-systeem, automatiseren we het build- en deployment proces. Onze Docker-images worden beheerd in GitLab's container registry. Zo houden we de distributie van de Docker-images over onze Kubernetes containers in eigen hand. Ook biedt Gitlab ingebouwde beveiligingsscans die helpen bij het identificeren en oplossen van beveiligingsproblemen in de code en de Docker-images in de registry. Met zijn vele integraties met populaire tools en diensten, zoals Kubernetes en Prometheus, biedt GitLab een complete off-the-shelf oplossing om onze behoeften tijdens het ontwikkelen te vervullen.
Als je meer wilt weten over de implicaties met betrekking tot onze overgang op GitLab kun je dit artikel lezen: https://about.gitlab.com/customers/weave/
Nu we in grote lijnen de tools die we gebruiken en de redenen voor gebruik van die specifieke tools hebben besproken, kunnen we dit eerste deel concluderen. In het volgende deel gaan we verder met de protocols die we gebruiken om data tussen een cliënt-app en een server te versturen en hoe we die data opslaan met behulp van persistence.
Naslagwerk en referenties