---
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 Платформу необходимо масштабировать. Архитектура, на которой она построена, и заложенный в неё потенциал масштабирования рассмотрены в разделе [Масштабируемость системы](/ru/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.
- **Гибкость**: новые серверы и микросервисы легко добавляются.
- **Автоматизация**: масштабирование требует минимального вмешательства человека.
- **Экономичность**: использование ресурсов оптимизируется за счёт автоматического масштабирования.

Описанный выше сценарий масштабирования позволяет системе телеметрии эффективно справляться с растущими нагрузками, обеспечивая высокую производительность, отказоустойчивость и гибкость. Применяя эти современные технологии, платформа готова к будущим вызовам.
