Programmazione in ambito distribuito e Cloud Computing
22/10/2024
Parte 2
Chi sono
yuribacciarini.com

Sempre lo stesso
- Linguaggio
-
Tanti topic+ laboratorio -
Cloud agnosticAruba Cloud - Domande libere
- 2* (45' + 10' break) + 40'
- Alta presenza di MEME
Premesse
Telegram group
Premesse

Topics
- Intro al Cloud computing
- Hands-on code
- (Secured) Container & Kubernetes
- Design patterns in sistemi distribuiti
- Lab


| Acronimo | Significato |
|---|---|
| CSP | Cloud service provider |
| Multi AZ | Multi availability zone |
| DR | Disaster recovery |
| RPO | Recovery Point Objective |
| RTO | Recovery Time Objective |


Cloud infrastructure
(fondamenta)
I nostri applicativi

Container
tecnologia più usata per la distribuzione del SW
Container
Un "container" è un pacchetto standardizzato che contiene tutto il necessario per eseguire un'applicazione, rendendola portabile e isolata su diversi ambienti.


Docker != Container
Nutella != crema spalmabile alla nocciola
Lifecycle

Docker API V2
Dissezione

"nucleo" del sistema operativo.
Nei container, consente l'isolamento delle applicazioni utilizzando funzionalità come namespace e cgroups.
1
Kernel
sw responsabile del lifecycle dei container. Interazione con il kernel per garantire isolamento e utilizzo delle risorse.
2
Container runtime
è un pacchetto che contiene tutto il necessario per eseguire un'applicazione (codice, le librerie, le dipendenze)
3
Container image
Container è un istanza di un immagine.
Container = new ContainerImage()
4
Container
JVM
Class
Image
Analogia

(wrap) up


Vantaggi
- resource isolation;
- small, focused pieces for each team to own;
- reusable modules that can be used by many teams;
- separation of concerns;
- more reliable rollouts (and rollbacks).

Esplosione delle vulnerabilità (sopratutto opensource / terze parti)






Minecraft injection point

Log4shell attack


Log4shell attack
-
18 luglio 2013: Apache rilascia Log4J 2.0-beta9 – da questo momento in poi nasce Log4Shell
-
9 dicembre 2021 vulnerabilità pubblica
-
28 dicembre 2021 final patch
-
4 gennaio 2022 Federal Trade Commission (FTC) degli Stati Uniti intende perseguire le aziende vulnerabili a causa di Log4Shell
- Maggio 2023: Log4Shell è ancora la seconda vulnerabilità più comunemente sfruttata (“Check Point” report)
- Ago-Ott 2023 "We found that more than 1 in 3 (38 percent) of applications currently use vulnerable versions of Log4j"
DevOps è un approccio che unisce sviluppo (Dev) e operazioni (Ops) per migliorare la collaborazione, l'automazione e la velocità di rilascio del software.
Mira a ottimizzare il ciclo di vita del software attraverso pratiche (e tool) come integrazione continua, distribuzione continua e monitoraggio, promuovendo una cultura di comunicazione e feedback tra i team.
DevOps




CI Code libraries

CI Container image libraries

CD continuous deployment

Runtime

Single node patterns
Designing Distributed Systems: Patterns and Paradigms for Scalable, Reliable Services.
Prima di avventurarci nella distribuzione del sw su flotte di VMs,
è fondamentale comprendere i "single node patterns".
Single node patterns
Il container non è più l'elemento atomico che andremo a distribuire.
Gruppi di containers correlati
(spoiler --> in Kubernetes un gruppo di container è chiamato "pod")


Condividono
networking & storage
Single node patterns
Cosa sono
Generici "blueprint" per gestire sistemi distribuiti senza riferirsi ad una specifica tecnologia
Obiettivo
Dare consigli generici per guidare il design architetturale.
Sidecar pattern

Il "VIP" dei patterns


Sidecar pattern
Circuit breaker


Pod
Sidecar pattern
Dynamic configuration


Ambassadors

Ambassador container è un "broker" che gestisce le interazioni tra il nostro applicativo ed il mondo esterno.
Ambassadors

Using an Ambassador to Shard a Service.
As the figure below shows, when we have a sharded service we need to develop a logic in order to choose which is the elected shard to use.
Ambassadors
Using an Ambassador for Service Brokering

Ambassadors
Example: Using an Ambassador to Do Experimentation or Request Splitting
Adapter Pattern


Multi node design patterns
Andando oltre i container che collaborano su una singola macchina, i container modulari rendono più facile costruire applicazioni distribuite coordinate su più nodi.
Multi node design patterns
Alcuni esempi:
- Leader election pattern
- Work queue pattern
- Scatter/gather pattern
Multi node design patterns
Leader election pattern
Multi node design patterns

Work queue pattern
Multi node design patterns

Work queue pattern
Multi node design patterns

Scatter/gather pattern
Multi node design patterns

Scatter/gather pattern
Distributed Document Search
Multi node design patterns

Scatter/gather pattern
Sharded Document Search
Multi node design patterns

Scatter/gather pattern
Multi node design patterns


Kubernetes

(distillato analcolico)

Kubernetes first view


Bor

Obiettivi k8s
- Node autoscaling
- Horizonal pod autoscaler (HPA)
- Vertical pod autoscaler (VPA)
Autoscaling
Autoscaling
Node autoscaling



Horizonatal
Pod autoscaler (HPO)


Vertical
Pod autoscaler (VPO)
DEMO


- valore di 150€
- valido per 3 mesi
- usabile su tutti i servizi
Aruba cloud - attenzione al billing !!!




- Inglese
- Mentor
- "Sporcatevi" le mani
Tips
Da evitare
- è sempre stato fatto così
- GitHub https://education.github.com/pack
- AWS https://aws.amazon.com/free
- Azure $200 credit
Thank You!
Coffee ?


Programmazione in ambito distribuito e cloud computing (part2)
By Yuri Bacciarini
Programmazione in ambito distribuito e cloud computing (part2)
- 46