---
title: Масштабування IIoT Платформи
section: Operations
weight: 1
description: Стратегії вертикального та горизонтального масштабування IIoT Платформи — оркестрація контейнерів, оптимізація бази даних, кешування та масштабування фронтенду.
related:
  - architecture/scalability
  - operations
  - operations/backup-and-restore
  - architecture
---

import Alert from '@/components/docs/Alert.astro';

Зі зростанням кількості користувачів, обсягу даних і числа пристроїв IIoT Платформа потребує масштабування. Архітектура, на якій побудована платформа, та її потенціал масштабування описані в розділі [Масштабованість системи](/ua/platform/v3/architecture/scalability); ця сторінка зосереджена на практичних стратегіях масштабування промислового розгортання.

<Alert type="info">
  Цей розділ розглядає сценарії масштабування, які забезпечують надійну роботу системи навіть за
  екстремальних навантажень.
</Alert>

## Стратегії масштабування платформи

```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
```

### Вертикальне та горизонтальне масштабування

Платформа підтримує два взаємодоповнювані підходи до масштабування: вертикальне масштабування додає ресурси наявним серверам, тоді як горизонтальне масштабування додає нові сервери.

#### Вертикальне масштабування

- **Нарощування ресурсів сервера**:
  - Додавання CPU, RAM та SSD-сховища до серверів застосунку (Ruby on Rails) і серверів збору даних (Go).
  - Підвищення продуктивності PostgreSQL за рахунок потужніших дискових масивів та оптимізації індексів.

- **Переваги**: Простота реалізації за мінімальних змін в архітектурі.
- **Обмеження**: Фізичні межі окремих серверів і висока вартість.

#### Горизонтальне масштабування

- **Додавання нових серверів**:
  - Ruby on Rails: розгортання додаткових екземплярів застосунку за балансувальником навантаження (наприклад, Nginx або HAProxy).
  - Сервери Go: легко масштабуються завдяки багатопотоковості та вбудованій підтримці горизонтального масштабування.
  - PostgreSQL: реплікація та шардування даних для балансування навантаження.
- **Переваги**: Висока відмовостійкість і практично необмежена масштабованість.
- **Обмеження**: Додаткова складність керування розподіленою системою.

## Використання Kubernetes/Docker Compose для оркестрації контейнерів

### Перехід на Kubernetes/Docker Compose

- **Контейнеризація застосунку**:
  - Сервери Ruby on Rails і Go упаковуються в Docker-контейнери.
  - Kubernetes/Docker Compose керує розгортанням, масштабуванням і моніторингом цих контейнерів.
- **Автоматичне масштабування**:
  - Horizontal Pod Autoscaler (HPA) автоматично збільшує кількість подів залежно від навантаження.
  - Cluster Autoscaler додає нові вузли до кластера, коли ресурсів стає недостатньо.
- **Переваги**: Висока гнучкість, автоматизація та відмовостійкість.

### Приклад архітектури на Kubernetes

- **Ingress Controller**: маршрутизує запити до серверів Ruby on Rails і Go.
- **StatefulSets**: керують репліками PostgreSQL зі збереженням стану.
- **Service Mesh**: використовує Istio або Linkerd для керування трафіком і підвищення безпеки.

### Оптимізація бази даних

Рівень бази даних масштабується завдяки поєднанню реплікації, шардування та кешування.

#### Реплікація та шардування PostgreSQL

- **Реплікація**:
  - Налаштування реплікації master-slave для розподілу навантаження на читання.
  - Використання інструментів на кшталт Patroni для автоматичного керування реплікацією.
- **Шардування**:
  - Розподіл даних між кількома кластерами PostgreSQL для балансування навантаження на запис.
  - Використання Citus для горизонтального масштабування PostgreSQL.

#### Кешування

- **Redis або Memcached**:
  - Кешування часто запитуваних даних для зниження навантаження на базу даних.
  - Інтеграція з Ruby on Rails через `ActiveSupport::Cache`.

## Масштабування фронтенду

- **Кешування на боці клієнта**:
  - Використання Service Workers і Cache API для кешування статичних ресурсів.

- **CDN (Content Delivery Network)**:
  - Розповсюдження статичних файлів через CDN для зниження навантаження на сервери.

## Переваги запропонованого рішення

- **Висока відмовостійкість**: завдяки Kubernetes/Docker Compose та реплікації PostgreSQL.
- **Гнучкість**: нові сервери та мікросервіси легко додавати.
- **Автоматизація**: масштабування потребує мінімального втручання людини.
- **Економічність**: використання ресурсів оптимізується завдяки автоматичному масштабуванню.

Описаний вище сценарій масштабування дає змогу системі телеметрії ефективно справлятися зі зростаючими навантаженнями, забезпечуючи високу продуктивність, відмовостійкість і гнучкість. Завдяки впровадженню цих сучасних технологій платформа готова до майбутніх викликів.
