Com a desenvolupadors de software, cada vegada que ens enfrontem al disseny d’una nova aplicació hem de fer una elecció important: quina arquitectura hem d’aplicar.

L’arquitectura de software comprèn les tècniques i patrons utilitzats per a estructurar i optimitzar el desenvolupament d’un projecte d’aplicació. És el punt de partida per a dissenyar i desenvolupar una aplicació, la base per a poder incorporar els diferents components i funcionalitats que es necessiten, que permetran resoldre els problemes específics que es volen solucionar.

La seva importància és evident, per això en aquest post t’explicarem tot el que necessites saber sobre dos de les grans aproximacions d’arquitectura de software que existeixen: la monolítica i la de microserveis.

Arquitectura monolítica vs microserveis

Arquitectura monolítica

Aquest tipus d’arquitectures tenen la principal característica d’agrupar tota la funcionalitat i serveis de l’aplicació en una base de codi única. Aquests són els seus principals beneficis:

    • Són fàcils de desenvolupar.
    • El seu desplegament i execució són senzills.
    • El cost de desenvolupament és menor que el d’altres aplicacions.

No obstant això, també presenta altres desavantatges que la tornen un opció cada vegada menys utilitzada.

En tractar-se d’un únic codi, si es vol fer un sol canvi en aquest, implica tornar a llançar l’aplicació al complet. Aquesta mateixa particularitat suposa un problema per als desenvolupadors, que han de conèixer el codi íntegrament i solucionar problemes concrets els resulta més complicat, perquè un canvi on no correspon pot comprometre tota l’aplicació. A més, resulta impossible treballar en diversos ambients al mateix temps.

Arquitectura de microserveis

Aquesta cerca desacoblar i independitzar els components d’una aplicació, de manera que cadascun es converteix en una aplicació en si mateix (també anomenats “microserveis”). En aquesta autonomia resideix gran part dels seus avantatges:

    • Modularitat: es poden realitzar desplegaments i desenvolupaments de manera independent, sense que afecti els altres serveis de l’aplicació. Aquesta característica facilita l’escalabilitat de l’aplicació, per mòduls i de manera horitzontal.
    • Seguretat: si es produeix un problema en un microservei, només afectarà a aquest. A més de que resulta molt més fàcil detectar el problema i que l’equip encarregat el solucioni, sense afectar la resta de serveis ni equips.
    • Versatilitat: permeten l’ús de diferents tecnologies, llenguatges de programació i bases de dades, adaptant cada microservei a la tecnologia que sigui més adequada.
    • Millora contínua: en poder desenvolupar múltiples microserveis de manera simultània, diversos desenvolupadors poden treballar en els seus serveis individuals, la qual cosa redueix el temps de desenvolupament i permet llançar noves funcionalitats per al client amb major freqüència (Time-to-market).
    • Facilita els processos de proves i tests, a més de reduir errors de programació.

La comunicació entre els diferents components de l’aplicació es realitza a través de APIs, eliminant la necessitat que els desenvolupadors hagin de conèixer i comprendre tot el codi. Es guanya en eficiència, flexibilitat i capacitat de creixement però, com pots intuir, aquesta gran quantitat de mòduls torna complexa la seva implementació. Davant el repte d’alleugerir i facilitar la portabilitat dels components perquè puguin transferir-se entre diferents entorns en el menor temps possible sorgeix l’ús de contenidors com Docker, o quan s’han de gestionar un nombre elevat de contenidors s’opta per orquestrats com Kubernetes.

Adoptar un enfocament DevOps i aplicar metodologies agile garantirà l’èxit d’una arquitectura de microserveis, perquè et permetrà dissenyar serveis autònoms, amb menor acoblament i major cohesió amb la resta de serveis.

Llavors, quina hauria d’escollir?

Com gairebé tot, dependrà de les teves necessitats i objectius.  Ara que ja coneixes les diferències entre ambdues, fes una anàlisi del teu projecte i pren la decisió. Considera la freqüència amb la qual necessitaràs llançar noves funcionalitats per als teus clients, les previsions de volum de trànsit o usuaris (amb els respectius pics de demanda), l’equip de desenvolupadors del qual disposes, entre altres factors.

Molts desenvolupadors opten per les arquitectures monolítiques per la seva senzillesa i baix cost, però has de tenir en compte que si el software necessita evolucionar i desenvolupar-se de manera ràpida, aquest tipus d’arquitectura serà insuficient i apareixeran importants problemes d’escalabilitat, implementació, manteniment i actualització. Simplement, no serà suficient per a respondre les creixents demandes de l’aplicació.

Si t’ha semblat interessant aquesta entrada, en la següent parlarem de com podem garantir la seguretat en entorns basats en microserveis. Estigues molt atent/a al nostre blog o te la perdràs!