RIPAM 3997

ISO/IEC 25010 · SOLID · GoFv1.0 - 06/05/2026

Architetture Software

Report 5000 ufficiale: fondamenti + ISO 25010, stili e pattern, microservizi, cloud-native/K8s, REST/GraphQL/gRPC, SOLID/GoF, DevOps/CI-CD + 25 numeri chiave + 15 trabocchetti.

1 Fondamenti dell'architettura software

Definizione

L'architettura software descrive la struttura di alto livello di un sistema software: componenti, relazioni, principi di progettazione, vincoli e decisioni che riguardano qualità (performance, scalabilità, manutenibilità, sicurezza). Distinta dal design (livello dettaglio) e dall'implementazione (codice).

Drivers architetturali

  • Requisiti funzionali (cosa fa il sistema)
  • Requisiti non funzionali / qualità (performance, sicurezza, scalabilità, usabilità)
  • Vincoli (tecnologici, normativi, budget, time-to-market)
  • Stakeholder concerns (utenti, business, dev, ops)

Caratteristiche di qualità ISO/IEC 25010

  1. Functional suitability
  2. Performance efficiency
  3. Compatibility
  4. Usability
  5. Reliability
  6. Security
  7. Maintainability
  8. Portability

Architectural views (4+1 — Kruchten)

  • Logical (oggetti, classi)
  • Process (concorrenza, sincronizzazione)
  • Physical (deployment)
  • Development (organizzazione moduli)
  • +1 Scenarios (use case che validano le altre 4)

2 Stili e pattern architetturali

Stili classici

StileCaratteristicaQuando usarlo
MonolithicTutto in un unico deploymentPiccoli sistemi, MVP
Layered (n-tier)Strati orizzontali (presentation/business/data)Sistemi enterprise tradizionali
Client-ServerClient richiede, server rispondeWeb, DBMS
Pipe-and-FilterTrasformazioni in cascataETL, compilatori, Unix shell
Event-DrivenComponenti reagiscono a eventiUI, IoT, real-time
Microkernel / Plug-inCore minimale + estensioniIDE (Eclipse), browser
MicroservicesServizi piccoli, indipendenti, distribuitiSistemi cloud-scale
Service-Oriented (SOA)Servizi riusabili tramite ESBIntegrazione enterprise
Serverless / FaaSFunzioni eventi-driven gestite dal cloudWorkload sporadici, scala automatica

Layered architecture (3-tier classico)

  1. Presentation Layer (UI, controller)
  2. Business Logic Layer (servizi, dominio)
  3. Data Access Layer (repository, DAO, DBMS)

Variante Hexagonal / Ports & Adapters (Cockburn, 2005): dominio al centro, dipendenze invertite verso l'esterno.

Clean Architecture (Robert C. Martin, 2017)

Cerchi concentrici: Entities → Use Cases → Interface Adapters → Frameworks/Drivers. Dependency Rule: dipendenze SOLO verso il centro.

MVC, MVP, MVVM

  • MVC (Model-View-Controller): Model gestisce dati, View presenta, Controller coordina
  • MVP (Model-View-Presenter): Presenter media tra View e Model, View passiva
  • MVVM (Model-View-ViewModel): binding bidirezionale via ViewModel (WPF, Angular, Vue)

3 Microservizi

Caratteristiche

  • Servizi piccoli e con responsabilità singola
  • Database per servizio (no shared DB)
  • Comunicazione via API (REST, gRPC) o messaging asincrono (Kafka, RabbitMQ)
  • Deployment indipendente (CI/CD per servizio)
  • Tecnologie eterogenee (polyglot persistence/programming)
  • Resilienza tramite Circuit Breaker, Bulkhead, Retry

Vantaggi vs svantaggi

VantaggiSvantaggi
Scalabilità orizzontale per servizioComplessità operativa (orchestrazione)
Deploy indipendenteLatenza rete inter-servizio
Team autonomiConsistenza dati distribuita (no ACID globale)
Tecnologie misteDebugging e tracing complessi
Isolamento fallimentiCosti infrastruttura più alti

Pattern correlati

  • API Gateway: punto unico ingresso, routing, autenticazione, rate limiting
  • Service Discovery: registro dinamico (Consul, Eureka, Kubernetes Service)
  • Circuit Breaker (Hystrix, Resilience4j): protegge da cascade failure
  • Saga: transazioni distribuite tramite compensazione
  • CQRS (Command Query Responsibility Segregation): separa comandi (write) da query (read)
  • Event Sourcing: stato derivato da log eventi immutabili

4 Cloud-native e container

Containerizzazione

  • Docker: standard de facto per packaging applicazioni
  • OCI (Open Container Initiative): standard immagini e runtime
  • Container vs VM: container condividono kernel host, partono in secondi, leggeri (MB invece di GB)

Kubernetes (K8s)

Orchestratore container, sviluppato Google, donato a CNCF (2014).

Componenti control plane:

  • API Server — endpoint REST
  • etcd — store distribuito chiave-valore (configurazione cluster)
  • Scheduler — assegna pod ai nodi
  • Controller Manager — riconcilia stato

Componenti node:

  • kubelet — agente locale
  • kube-proxy — networking
  • Container runtime (containerd, CRI-O)

Oggetti chiave:

  • Pod — unità minima deployabile (1+ container)
  • Deployment — gestione replicas
  • Service — networking stabile (ClusterIP, NodePort, LoadBalancer)
  • Ingress — accesso HTTP esterno
  • ConfigMap / Secret — configurazione
  • PersistentVolume — storage persistente

CNCF Landscape

Cloud Native Computing Foundation, ospita 180+ progetti: Kubernetes, Prometheus, Envoy, Istio, Helm, Argo, OpenTelemetry.

Service mesh

Istio, Linkerd: gestione comunicazione inter-servizi (load balancing, mutual TLS, observability) tramite sidecar proxy.

5 API e protocolli

REST (Representational State Transfer — Fielding, 2000)

Stile architetturale basato su HTTP. Vincoli:

  1. Client-Server
  2. Stateless (no sessione lato server)
  3. Cacheable
  4. Uniform interface (URI risorse, metodi HTTP, HATEOAS)
  5. Layered system
  6. Code on demand (opzionale)

Verbi HTTP: GET (read), POST (create), PUT (update full), PATCH (update partial), DELETE.

Status code:

  • 1xx informational
  • 2xx success (200 OK, 201 Created, 204 No Content)
  • 3xx redirection (301, 302, 304)
  • 4xx client error (400, 401, 403, 404, 429)
  • 5xx server error (500, 502, 503, 504)

GraphQL (Facebook, 2015)

Query language per API: il client specifica esattamente i campi richiesti, single endpoint, no over/under-fetching. Schema fortemente tipizzato.

gRPC (Google, 2015)

RPC moderno basato su HTTP/2 + Protocol Buffers. Bidirectional streaming, performance elevata, ideale comunicazione inter-servizio.

SOAP / WSDL

Protocollo XML enterprise (anni 2000), pesante ma con WS-Security/WS-Transaction. In declino, sopravvive in legacy bancari.

Webhooks

Pattern push: il server chiama un URL del client al verificarsi di un evento. Asincrono, leggero.

6 Principi di progettazione

SOLID (Robert C. Martin)

LetteraPrincipioSignificato
SSingle ResponsibilityUna classe = una sola ragione per cambiare
OOpen/ClosedAperto a estensioni, chiuso a modifiche
LLiskov SubstitutionSottoclassi sostituibili a superclassi
IInterface SegregationInterfacce piccole e specifiche
DDependency InversionDipendere da astrazioni, non da implementazioni

Altri principi

  • DRY (Don't Repeat Yourself)
  • KISS (Keep It Simple, Stupid)
  • YAGNI (You Aren't Gonna Need It)
  • Separation of Concerns
  • Law of Demeter (principio di minima conoscenza)
  • Composition over inheritance

Design Pattern (Gang of Four, 1994)

Creational: Singleton, Factory Method, Abstract Factory, Builder, Prototype.

Structural: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.

Behavioral: Observer, Strategy, Command, Iterator, State, Template Method, Visitor, Mediator, Memento, Chain of Responsibility, Interpreter.

7 Deployment e DevOps

CI/CD (Continuous Integration / Continuous Delivery / Deployment)

  • CI: integrazione frequente con build + test automatici (Jenkins, GitLab CI, GitHub Actions)
  • CD: rilascio automatico in staging/produzione
  • Pipeline tipiche: lint → test unit → build → test integration → security scan → deploy

Strategie di deployment

StrategiaCaratteristicaRischio
RecreateStop vecchio, deploy nuovoDowntime
Rolling UpdateSostituzione gradualeVersioni miste temporanee
Blue-Green2 ambienti, switch trafficCosti raddoppiati
Canary% traffico graduale al nuovoMonitoring critico
A/B TestingVersioni diverse a segmenti utentiLogica routing

Infrastructure as Code (IaC)

Terraform (provisioning multi-cloud), Ansible (configuration management), Pulumi (IaC con linguaggi general purpose), CloudFormation (AWS).

Observability — 3 pilastri

  1. Logs (ELK stack, Loki)
  2. Metrics (Prometheus, Grafana)
  3. Traces (Jaeger, Zipkin, OpenTelemetry)

8 25 numeri chiave

#DatoValore
1Caratteristiche qualità ISO/IEC 250108
2Viste 4+1 Kruchten5 (4 + 1 scenario)
3Principi SOLID5
4Pattern GoF totali23
5Pattern GoF Creational5
6Pattern GoF Structural7
7Pattern GoF Behavioral11
8Anno Kubernetes (donato CNCF)2014
9Anno REST (Fielding tesi)2000
10Anno GraphQL2015
11Anno gRPC2015
12Anno Clean Architecture (Martin)2017
13Anno Hexagonal Arch (Cockburn)2005
14Tier classico architettura3 (presentation/business/data)
15Verbi HTTP principali5 (GET/POST/PUT/PATCH/DELETE)
16Status code 2xxSuccess
17Status code 4xxClient error
18Status code 5xxServer error
19Pattern transazioni distribuiteSaga
20Pattern resilienzaCircuit Breaker
21Standard immagini containerOCI
22Unità minima KubernetesPod
23Store cluster Kubernetesetcd
24Service mesh popolariIstio, Linkerd
25Pillar observability3 (Logs, Metrics, Traces)

9 15 trabocchetti d'esame

#TrabocchettoRisposta corretta
1"Microservizi condividono il database"FALSO — pattern "database per servizio", no shared DB
2"REST è un protocollo"FALSO — è uno stile architetturale basato su HTTP
3"PUT e PATCH sono equivalenti"FALSO — PUT sostituisce intera risorsa, PATCH modifica parzialmente
4"Kubernetes è un container runtime"FALSO — è un orchestratore; runtime sono containerd, CRI-O
5"Codice 304 indica errore client"FALSO — 304 = "Not Modified" (caching), non è errore
6"Singleton garantisce thread-safety"FALSO — non automaticamente; serve implementazione esplicita
7"Dependency Inversion = dipendenze invertite a runtime"FALSO — dipendere da astrazioni, non da implementazioni concrete
8"MVVM è un'evoluzione di MVP"PARZIALE — concettualmente correlato, ma MVVM usa binding bidirezionale, MVP no
9"SOAP è RESTful"FALSO — SOAP è un protocollo XML, non è REST
10"Container = macchina virtuale"FALSO — container condividono kernel host (no SO completo)
11"API Gateway è obbligatorio"FALSO — utile ma non strettamente necessario
12"Saga garantisce ACID"FALSO — Saga garantisce eventual consistency via compensazione
13"Hexagonal mette il dominio in periferia"FALSO — il dominio è al centro, infrastruttura in periferia
14"Pattern Strategy è Creational"FALSO — è Behavioral
15"Service Mesh sostituisce API Gateway"FALSO — sono complementari (Mesh = inter-service, Gateway = ingress)