---
title: Scalabilità della Piattaforma IIoT
section: Operations
weight: 1
description: Strategie di scalabilità verticale e orizzontale per la Piattaforma IIoT — orchestrazione dei container, ottimizzazione del database, caching e scalabilità del frontend.
related:
  - architecture/scalability
  - operations
  - operations/backup-and-restore
  - architecture
---

import Alert from '@/components/docs/Alert.astro';

Con la crescita del numero di utenti, del volume di dati e della quantità di dispositivi, la Piattaforma IIoT deve poter scalare. L'architettura su cui è costruita e il suo potenziale di scalabilità di base sono trattati in [Scalabilità del sistema](/it/platform/v3/architecture/scalability); questa pagina si concentra sulle strategie pratiche per scalare un deployment di produzione.

<Alert type="info">
  Questa sezione illustra gli scenari di scalabilità che mantengono il sistema affidabile e
  performante anche sotto carichi estremi.
</Alert>

## Strategie di scalabilità della piattaforma

```mermaid
flowchart LR
subgraph subGraph0["IIoT Platform Scaling Strategies"]
F["Vertical Scaling"]
A["Application Servers (Ruby on Rails)"]
G["Horizontal Scaling"]
B["Data Collection Servers (GO)"]
C["PostgreSQL Database"]
H["Database Optimization"]
D["Docker/Kubernetes"]
E["Frontend Scaling"]
end
A --> F & G
B --> F & G
C --> F & G & H
D --> B & A
E -- Efficient_Distribution --> D
```

### Scalabilità verticale e orizzontale

La piattaforma supporta due approcci complementari alla scalabilità: la scalabilità verticale aggiunge risorse ai server esistenti, mentre la scalabilità orizzontale aggiunge ulteriori server.

#### Scalabilità verticale

- **Potenziamento delle risorse dei server**:
  - Aggiunta di CPU, RAM e storage SSD ai server applicativi (Ruby on Rails) e ai server di raccolta dati (Go).
  - Incremento delle prestazioni di PostgreSQL tramite array di dischi più potenti e ottimizzazione degli indici.

- **Vantaggi**: semplice da implementare, con modifiche minime all'architettura.
- **Limiti**: i limiti fisici dei singoli server e il costo elevato.

#### Scalabilità orizzontale

- **Aggiunta di nuovi server**:
  - Ruby on Rails: deploy di ulteriori istanze applicative dietro un bilanciatore di carico (ad esempio Nginx o HAProxy).
  - Server Go: scalano con facilità grazie al multi-threading e al supporto nativo per la scalabilità orizzontale.
  - PostgreSQL: replica e sharding dei dati per bilanciare il carico.
- **Vantaggi**: elevata tolleranza ai guasti e scalabilità di fatto illimitata.
- **Limiti**: la maggiore complessità nella gestione di un sistema distribuito.

## Uso di Kubernetes/Docker Compose per l'orchestrazione dei container

### Migrazione a Kubernetes/Docker Compose

- **Containerizzazione delle applicazioni**:
  - I server Ruby on Rails e Go vengono impacchettati in container Docker.
  - Kubernetes/Docker Compose gestisce il deployment, la scalabilità e il monitoraggio di tali container.
- **Scalabilità automatica**:
  - L'Horizontal Pod Autoscaler (HPA) aumenta automaticamente il numero di pod in base al carico.
  - Il Cluster Autoscaler aggiunge nuovi nodi al cluster quando le risorse scarseggiano.
- **Vantaggi**: elevata flessibilità, automazione e tolleranza ai guasti.

### Esempio di architettura su Kubernetes

- **Ingress Controller**: instrada le richieste verso i server Ruby on Rails e Go.
- **StatefulSet**: gestiscono le repliche stateful di PostgreSQL.
- **Service Mesh**: utilizza Istio o Linkerd per gestire il traffico e migliorare la sicurezza.

### Ottimizzazione del database

Il livello del database scala grazie a una combinazione di replica, sharding e caching.

#### Replica e sharding di PostgreSQL

- **Replica**:
  - Configurazione della replica master-slave per distribuire il carico di lettura.
  - Utilizzo di strumenti come Patroni per gestire automaticamente la replica.
- **Sharding**:
  - Suddivisione dei dati su più cluster PostgreSQL per distribuire il carico di scrittura.
  - Utilizzo di Citus per scalare PostgreSQL orizzontalmente.

#### Caching

- **Redis o Memcached**:
  - Caching dei dati richiesti di frequente per ridurre il carico sul database.
  - Integrazione con Ruby on Rails tramite `ActiveSupport::Cache`.

## Scalabilità del frontend

- **Caching lato client**:
  - Utilizzo di Service Worker e della Cache API per memorizzare nella cache le risorse statiche.

- **CDN (Content Delivery Network)**:
  - Distribuzione dei file statici tramite una CDN per ridurre il carico sui server.

## Vantaggi della soluzione proposta

- **Elevata tolleranza ai guasti**: grazie a Kubernetes/Docker Compose e alla replica di PostgreSQL.
- **Flessibilità**: nuovi server e microservizi si aggiungono con facilità.
- **Automazione**: la scalabilità richiede un intervento umano minimo.
- **Convenienza economica**: l'uso delle risorse è ottimizzato tramite la scalabilità automatica.

Lo scenario di scalabilità descritto sopra consente al sistema di telemetria di gestire efficacemente carichi crescenti, garantendo prestazioni elevate, tolleranza ai guasti e flessibilità. Adottando queste tecnologie moderne, la piattaforma è pronta ad affrontare le sfide future.
