Горизонтальное масштабирование заключается в добавлении новых инстансов приложения (например, новых серверов или контейнеров), чтобы распределить нагрузку между ними. Вертикальное масштабирование — это увеличение ресурсов на одном сервере (добавление CPU, ОЗУ, дисков).
При выборе подхода учитывают следующие критерии:
Пример горизонтального масштабирования через Kubernetes:
apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 5 # число подов — горизонтальный масштаб selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: myimage:v1
Ключевые особенности:
Горизонтальное масштабирование всегда лучше, чем вертикальное?
Нет. Для определённых задач (например, для монолитных или stateful-сервисов) вертикальное масштабирование может быть проще и эффективнее.
Для горизонтального масштабирования приложение не требует никакой доработки?
Нет. Приложение должно быть stateless, поддерживать session sharing (например, с помощью внешнего кэша) и корректно реагировать на масштабирование.
Масштабирование базы данных всегда делается горизонтально?
Нет. Не все СУБД легко масштабируются горизонтально. Классические реляционные базы данных часто масштабируются вертикально (scale-up), либо используют шардинг/репликацию.