Preskočite na sadržaj

Arhitekture web aplikacija: monolitna i uslužno orijentirana

doc. dr. sc. Vedran Miletić, vmiletic@inf.uniri.hr, vedran.miletic.net

Fakultet informatike i digitalnih tehnologija Sveučilišta u Rijeci, akademska 2021./2022. godina


Monolitna arhitektura (1/4)

🙋 Pitanje: Je li ovo monolitna web aplikacija?

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>title</title>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
  </head>
  <body>
    <p>Hello, world!</p>
  </body>
</html>

Monolitna arhitektura (2/4)

🙋 Pitanje: Je li ovo monolitna web aplikacija?

<?php

echo '<p>Hello, world!</p>\n';

Monolitna arhitektura (3/4)

Prema Wikipediji:

  • aplikacija kojoj su korisničko sučelje i kod za pristup podacima su dio istog programa na istoj platformi (platforma je ovdje OS, programski jezik i biblioteke)
  • aplikacija izvodi svaki korak potreban da bi se određena radnja izvela
    • npr. restoran ima ponudu dnevnih specijaliteta dostupnih za van, online narudžbu, dostavu i knjigu žalbe te je sva ta funkcionalnost implementirana unutar jedne aplikacije
  • izvorno je termin označavao aplikacije namijenjene za izvođenje na mainframeu pisane bez mogućnosti ponovnog iskorištavanja koda
  • može biti višeslojna (engl. multitier, multilayer) kada odvaja pojedine funkcije u zasebne dijelove aplikacije

Monolitna arhitektura (4/4)

🙋 Pitanje: Je li ovo monolitna web aplikacija?

<html>
  <head>
    <title>Templating in Flask</title>
  </head>
  <body>
    <h1>Hello {{ user }}!</h1>
    <p>Welcome to the world of Flask!</p>
  </body>
</html>
from flask import Flask, render_template

app = Flask(__name__)
@app.route('/hello/<user>')
def hello_world(user=None):
  return render_template('index.html', user=user)

Višeslojna arhitektura

Prema Wikipediji:

  • odvojeni su prezentacijski sloj (korisničko sučelje), poslovna logika (obrada podataka) i sučelje prema pohrani podataka (najčešće relacijskoj bazi)
  • programeri mogu dodavati ili mijenati funkcionalnost unutar određenog sloja umjesto rada odjednom na čitavoj aplikaciji, npr. Djangov model-pogled-predložak

Overview of a three-tier application bg 95% right


Monolitna i mikrouslužna arhitektura

Monolithic architecture vs microservices architecture


Mikrouslužna arhitektura (1/3)

Prema Wikipediji:

  • usluge (engl. services) su procesi koji komuniciraju putem mreže korištenjem protokola neovisnog o tehnologiji (programski jezici, biblioteke i okviri)

Mikrouslužna arhitektura (2/3)

Prema Wikipediji (nastavak):

  • usluge su organizirane ovisno o poslovnim potrebama (npr. servis za upis studenata u višu godinu, servis za rad s ispitnim rokovima i servis za ispis svjedodžbi mogu biti različite aplikacije koje rade nad istom relacijskom bazom)
  • usluge mogu biti organizirane u više slojeva (npr. glina i kamenje)
  • usluge mogu po potrebi biti implementirane u različitim programskim jezicima, koristiti iste ili različite baze podataka, izvoditi se na različitom hardveru na odvojenim fizičkim lokacijama
  • usluge su malene, komuniciraju porukama, neovisno razvijane i postavljene, kontinuirano isporučene, decentralizirane i jednostavne za skaliranje

Mikrouslužna arhitektura (3/3)

Mikrousluge u suštini slijede Unixovu filozofiju:

Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new "features".

Martin Fowler kaže za arhitekturu temeljenu na mikrouslugama:

Lends itself to a continuous delivery software development process. A change to a small part of the application only requires rebuilding and redeploying only one or a small number of services. Adheres to principles such as fine-grained interfaces (to independently deployable services), business-driven development (e.g. domain-driven design).


Monolitna ili mikrouslužna arhitektura

🙋 Pitanje: Imaju li navedene aplikacije monolitnu ili mikroservisnu arhitekturu?


Primjene mikrouslužne arhitekture


Evolucija računarstva do besposlužiteljskog

Pre-Cloud, IaaS, PaaS, and Serverless

Izvor: Introduction to Serverless Computing (Instana, 18th April 2018)


Usporedba monolitne i mikrouslužne arhitekture

Monolith, Microservices, FaaS

Izvor: Introduction to Serverless Computing (Instana, 18th April 2018)


Bezposlužiteljsko računarstvo


Ukratko

Monolitna i mikrouslužna arhitektura se koriste u praksi prema potrebi:

  • Za jednostavne projekte monolitna arhitektura je logičan izbor. Pritom se prikaz stranica može izvoditi na poslužitelju (engl. server-side rendering) ili na klijentu (engl. client-side rendering) (detaljni pregled načina prikaza stranica).
  • Mikrouslužna arhitektura omogućuje da veliki broj programera neovisno radi promjene na pojedinim uslugama dokle god se zadržava dogovoreno aplikacijsko programsko sučelje.

Author: Vedran Miletić