Desenvolupament del back-end en aplicacions “supereficients”
Blog Detail Page
Blog Detail Page
Blog Detail Page

Desenvolupament del back-end en aplicacions “supereficients”

Blog Detail Page
Blog Detail Page
Blog Detail Page

Descobreix com es pot millorar l’eficiència en el desenvolupament d’aplicacions web mitjançant l’optimització al back amb aquest complet article.

Quan ens demanen d’implementar aplicacions web “supereficients”, sembla que sigui un requisit molt simple que només calgui demanar a les especificacions.

En aquest article parlem d’eficiència en una aplicació web a la “part back” i farem referència a recomanacions per aconseguir aplicacions web utilitzades massivament.

Els factors d’eficiència en aplicacions en aquesta part tenen la capacitat de presentar una òptima experiència d’usuari i, per fer-ho, es requereixen frameworks que ens permetin moure les vistes i interactuar amb els components de manera ràpida i àgil.

Eficiència al back.

Les aplicacions web front no estan publicades en una App Store o Play Store, sinó que el navegador descarrega el fitxer inicial —normalment el fitxer “index.html”— d’un lloc web —url— i aquest, en el seu contingut, crida altres recursos com ara fitxers “.js”, “.css”, “.html”, etc.

Normalment, el volum en nombre de recursos i mida resulta elevat, cosa que ens porta a cuidar una sèrie de factors de comunicacions.

Aquestes aplicacions SPA “demanen a crits” tenir preparats els balancejadors perquè puguin dialogar al servidor en versió HTTP 2.0 per poder paral·lelitzar la descàrrega de manera massiva perquè, en cas contrari, el protocol HTTP 1.x negociarà finestres ridícules de fitxers en paral·lel.

TIP #1: Optimitzar la descàrrega en paral·lel de recursos front: la descàrrega en paral·lel d’un nombre alt de recursos front s’aconsegueix amb balancejadors que puguin negociar HTTP 2.0.

A CaixaBank estem treballant per disposar d’una “xarxa de distribució de continguts (CDN)” que distribuirà geogràficament aquests recurs per accelerar la descàrrega.

TIP #2: Optimitzar els temps de latència en la descàrrega de recursos: aixecar servidors de “xarxa de distribució de continguts (CDN)” millora els temps de latència en la descàrrega en estar distribuïts en diferents punts geogràfics.

Eficiència en el desenvolupament d’aplicacions web: serveis independents i sense estat (API REST).

Si es vol prioritzar la robustesa del sistema sense perdre velocitat, cal disposar de serveis independents i sense estat, que s’especialitzin en allò que se’ls demana perquè responguin en el menor temps possible. Aquestes aplicacions són les conegudes com a “microserveis”.

TIP #3: Optimitzar els temps de resposta en els microserveis que no tenen estat: els microserveis sense estat tenen els avantatges següents:

    • Faciliten poder afegir noves instàncies
    • Eviten problemes i temps de càrrega a l’hora de crear sessió per als usuaris
    • L’ús de la memòria (HEAP) acostuma a ser menor.
    • El desenvolupament està més alineat amb la metodologia DevOps

A CaixaBank s’ha apostat pel llenguatge Java per implementar els microserveis. La manera d’implementar aquests microserveis és Api REST (REpresentational State Transfer).

 

La definició d’API RESTful es basa a aplicar una interfície/normativa comuna on no hi hagi estats i es faci servir la semàntica inherent dels verbs del protocol HTTP. Els més utilitzats estan directament relacionats amb les operacions CRUD (Create, Read, Update, Delete) que es poden fer amb una entitat (un producte, per exemple, “targeta”). Aquesta manera d’organitzar els serveis ens permet que l’ús no requereixi un temps d’aprenentatge per poder consumir-lo.

TIP #4: Optimitzar els temps de resposta en els microserveis de tipus Read (GET): en les diferents capes, començant pels navegadors quan llancen peticions de tipus “GET”, disposen d’un sistema de memòria cau que evita la trucada. Això s’aconsegueix definint correctament l’API exposat a les aplicacions front fent ús d’una interfície API RESTful.

Eficiència en el desenvolupament d’aplicacions web: capes de microserveis.

Habitualment, els microserveis que implementen les API se solen organitzar en tres capes o nivells de cara a atorgar al sistema una escalabilitat i flexibilitat que afavoreixi el creixement del conjunt d’API de manera ordenada. Les tres capes amb les quals pot interactuar l’aplicació web són:

  • API de la dada: és la unitat mínima funcional d’accés a les bases de dades que conté el “core” de les dades de l’entitat. És a dir, aquestes API s’especialitzen a obtenir la dada filtrada de la base de dades a partir dels paràmetres o capçaleres d’entrada.
  • API del producte: presenten a l’aplicació web una integritat d’un producte amb el qual es puguin fer transaccions. Interactuen, no tan sols amb API de la dada, sinó també amb sistemes de processos (BPM – Business Process Management) i amb sistemes de seguretat que mantinguin la integritat del flux.
  • API del front: també conegudes com a API BFF (Backend For Frontend). S’especialitzen a integrar/orquestrar dades que necessiti aquesta aplicació web. El motiu principal és per eficiència i experiència d’usuari, ja que és més àgil fer moltes trucades des del back que des del front.

TIP #5: Optimitzar els temps de resposta en microserveis que estiguin especialitzats: en definir diferents capes, s’està aplicant la tècnica “divideix i venceràs”, on cada capa està especialitzada en una sèrie de funcions, de manera que es maximitza l’eficiència.    

Eficiència en el desenvolupament d’aplicacions web: informàtica al núvol (cloud)

Un cop hem arribat a aquest punt, ja tenim els microserveis creats, falta empaquetar-los i llançar-los al núvol per poder tenir una “capacitat de computació il·limitada” per independitzar-nos del hardware, sistemes operatius i software base. Només cal sol·licitar “més ferro” o, el que és el mateix, més servidors.

Què són els DevOps?

Per a això existeix la figura de DevOps, una filosofia (marc de treball, metodologia de desenvolupament) que se centra en la comunicació, col·laboració i integració entre desenvolupadors de software i els professionals de sistemes en les tecnologies de la informació (IT).

La forma més estesa d’implementar la filosofia DevOps és a través de servidors virtuals Docker gestionats pel data center (centre de dades) que conté l’aplicació Kubernetes.

TIP #6: Optimitzar els temps de resposta en microserveis amb gran capacitat de còmput o peticions en paral·lel:  desplegar els microserveis en filosofia DevOps ens permet disposar de “capacitat de computació i peticions il·limitades” afegint-hi més nodes.

Eficiència en el desenvolupament d’aplicacions web: serveis supereficients.

Hi ha certes funcionalitats a les aplicacions web, per exemple, un cercador predictiu —segons s’escriu va afegint opcions— que requereixen disposar d’uns microserveis que responguin en uns temps “de bogeria”.

Per a això, cal planificar disposar d’una infraestructura ad hoc al core de dades. I aquí entra el concepte de “dades massives” (big data).

Com ens beneficia l’ús de dades massives?

Aplicar dades massives als nostres sistemes, en termes d’eficiència, ens posa a l’abast uns microserveis que responen “100 vegades més de pressa” que qualsevol servei core. Això es deu al fet que hi ha una feina prèvia, anomenada ingesta, en la qual es recalcula la cerca per obtenir de manera ràpida les dades de sortida.

TIP #7: Optimitzar els temps de resposta en certs serveis de consulta que ho requereixen: Ens podem ajudar d’aplicacions que implementen les “dades massives” per a certes funcionalitats de la interfície visual que requereixin aquests baixos temps de resposta.

Eficiència en el desenvolupament d’aplicacions web: mesurament de l’eficiència en serveis.

Com deia aquell eslògan: “La potència sense control no serveix de res”. Es pot disposar del millor hardware, SW base, xarxa i molt més, però tot SW està subjecte a pujar a producció amb problemes de consum de memòria, alts consums de CPU, problemes d’ús de fils i problemes netejant la memòria com amb Garbage collector.

Per fer-ho, cal disposar d’una estratègia de mesurament de l’eficiència. Hi ha moltes ofertes d’eines de monitorització al mercat que són una meravella i ens eviten haver de fer anàlisis manuals de problemes de “colls d’ampolla”.

Aquestes eines solen treballar afegint un agent en cada node del servei (node Docker) on entra la petició a l’API, Aquest agent treballa descobrint de manera automàtica nous serveis (microserveis) i enviant les dades de l’entrada i sortida de la petició a un centre de dades on s’analitza amb intel·ligència artificial si l’estat del servei és òptim o, en canvi, detecta incidències de qualsevol tipologia:

  • Problemes de consum de memòria en procés i en node
  • Alts consums de CPU en procés i en node
  • Alts temps de resposta en micro

Aquesta mena d’eines també són capaces de donar-nos una traçabilitat de la petició, en concret a totes les capes per les quals passa.

TIP #8: Optimitzar els temps de resposta detectant incidències a temps: Una monitorització automatitzada del servei es fa necessària quan es disposa de tants microserveis independents. Això ens fa detectar de manera ràpida possibles problemes i afectar el mínim possible el client.

Aquestes eines també inclouen un agent per instal·lar al front i aportar informació sobre l’experiència d’usuari (user experience) per fer aflorar, també aquí, possibles incidències.

Resum d’aplicacions web “supereficients al back”.

Hi ha molta feina que s’ha de fer darrere, on, a mesura que es van llimant els temps a totes les capes, cada vegada es fa més complicat i intervenen sistemes més potents i noves tecnologies emergents.            

La disponibilitat de connectivitat és un d’aquests factors no controlables per part d’equips de desenvolupament. Aconseguir aplicacions web eficients que funcionin al búnquer sense connectivitat es podria tractar en un pròxim capítol d’aquest blog. Així que segueix-nos amb atenció per no perdre’t cap novetat!


Comparteix:

Segueix llegint...