Artikel
Development
7
 min

Van lokaal tot productie: Een introductie tot de tech stack van Weave – Part 1: Tools

Bij Weave focussen wij ons op het optimaliseren van onze softwareontwikkeling flow, waarbij ieder teamlid gebruikmaakt van dezelfde tooling of een variatie daarop. Het selecteren van een tech stack is een cruciale beslissing die de richting van onze projecten en de groei van onze teams beïnvloedt. Wanneer tools niet langer worden gebruikt of ondersteund, doen we onderzoek naar alternatieven of oplossingen. Dit doen we elke 6 weken op de Weave Fridays (Zie: Weave Friday: From Ideas to Innovation).

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

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

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 (Google Cloud Platform)

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

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): 

  1. Terraform code schrijven: In deze stap beschrijf je de benodigde resources in de configuratiebestanden van Terraform.
  2. terraform plan: Met dit commando genereert Terraform, in combinatie met je configuratiebestanden, een uitvoeringsplan die de acties beschrijft die ondernomen zullen worden. Onder deze acties vallen: het creëren, bijwerken of vernietigen van je (bestaande) infrastructuur.
  3. terraform apply: Als je tevreden bent met de output van de vorige stap, kun je dit commando uitvoeren om Terraform de geplande operaties uit te voeren in de juiste volgorde, rekening houdend met eventuele afhankelijkheden tussen de bronnen die je hebt vastgesteld.
  4. En eventueel kun je ook de wijzigingen in je infrastructuur helemaal verwijderen met het terraform destroy commando.

Code Generation

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.

GitLab

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/ 

Figuur 1: Overzicht basic application flow Weave (copyright Noortje Geluk)

Next up.. ‘Protocols & Persistence’

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

Geschreven door
Tolga
Developer
Over Weave
Wij geloven in het ontwikkelen van digitale producten en diensten die relevant zijn en zorgen voor een positieve verandering in de samenleving. Daaraan bijdragen met onze technologische expertise, is wat ons drijft.
Meer over ons

Wij zoeken talent!

Vacatures