Что такое HighLoad?
Например, один запрос в секунду – это нагрузка явно не highload, любой сервер, вроде бы, справится. Но, например, если он перекодирует видеоролики, то тут может наступить highload.
Высокая нагрузка это нагрузка, с которой не справляется железо.
Нет языков, технологий или баз данных, которые лучше или хуже подходят для высоконагруженного проекта. Вопрос - на чём лучше писать highload-проект - на Ruby или Python’е лишён смысла и говорит о низкой технической грамотности вопрошающего.
Высокие нагрузки, отказоустойчивость - это не про технологии, это про АРХИТЕКТУРУ!
Основная логика увеличения производительности:
- Увеличиваем эффективность использования ресурсов
- Увеличиваем количество ресурсов
Алгоритм проектирования
- Первым делом необходимо провести Анализ данных проекта.
- Для каждого использования подобрать архитектурный прием, разработать архитектуру.
- Для каждой архитектуры подобрать инструменты и технологии.
Алгоритм диагностики существующего решения
Что делать если решение уже разработано и его нужно переделать в highload-решение. Для начала необходимо поставить “диагноз”. А именно понять где у системы узкое горлышко. На какие процессы тратится больше всего ресурсов.
Архитектурные паттерны
- Сервис-ориентированная архитектура
- Вертикальное масштабирование
- Горизонтальное масштабирование
- Отложенные вычисления
- Асинхронная обработка
- Конвейерная обработка
- Использование толстого клиента
- Кэширование
- Функциональное разделение
- Шардинг
- Виртуальные шарды
- Центральный диспетчер
- Партиционирование
- Кластеризация
- Денормализация
- Параллельное выполнение
- Избыточность
- Допустимая деградация системы
Улучшения
Заметки
В чем измеряется нагрузка:
- Количество запросов в единицу времени
- Requests per seconds (RPS)
- Request per minute (RPM)
- Количество данных в единицу времени
- Packets per seconds (PPS)
- Мегабит в секунду (MB/s)
- Количество одновременно обслуживаемых соединений
- Simultaneous connections
- Cuncurrency
Зачем нужен хайлоад?
-
Защита от DDOS
-
Защита от Slashdot-эффект
Пропускная способность сетевой карты 1 Гбит/с (реальная 800-900 Мбит/с) или 120 000 пакетов в секунду. Bonding позволяет несколько физических интернет соединений объединить в одно логическое, например, 4 интерфейса - 3.5 Гбит/с.
В highload системах как правило отдают предпочтение throughput.