76 lines
5.2 KiB
Markdown
76 lines
5.2 KiB
Markdown
---
|
||
tags:
|
||
- type/zero-link
|
||
parents:
|
||
- "[[00 Архитектура ПО]]"
|
||
---
|
||
## Что такое HighLoad?
|
||
Например, один запрос в секунду – это нагрузка явно не highload, любой сервер, вроде бы, справится. Но, например, если он перекодирует видеоролики, то тут может наступить highload.
|
||
|
||
> Высокая нагрузка это нагрузка, с которой не справляется железо.
|
||
|
||
Нет языков, технологий или баз данных, которые лучше или хуже подходят для высоконагруженного проекта. Вопрос - на чём лучше писать highload-проект - на Ruby или Python'е лишён смысла и говорит о низкой технической грамотности вопрошающего.
|
||
|
||
> Высокие нагрузки, [отказоустойчивость](Reliability.md) - это не про технологии, это про АРХИТЕКТУРУ!
|
||
|
||
Основная логика увеличения производительности:
|
||
- Увеличиваем эффективность использования ресурсов
|
||
- Увеличиваем количество ресурсов
|
||
## Алгоритм проектирования
|
||
1. Первым делом необходимо провести [Анализ данных проекта](Анализ%20данных%20проекта.md).
|
||
2. Для каждого использования подобрать архитектурный прием, разработать архитектуру.
|
||
3. Для каждой архитектуры подобрать инструменты и технологии.
|
||
|
||
## Алгоритм диагностики существующего решения
|
||
Что делать если решение уже разработано и его нужно переделать в highload-решение. Для начала необходимо поставить "диагноз". А именно понять где у системы узкое горлышко. На какие процессы тратится больше всего ресурсов.
|
||
|
||
|
||
## Архитектурные паттерны
|
||
- [Сервис-ориентированная архитектура](Service%20Oreinted%20Architecture.md)
|
||
- [Вертикальное масштабирование](Вертикальное%20масштабирование.md)
|
||
- [Горизонтальное масштабирование](Горизонтальное%20масштабирование.md)
|
||
- Отложенные вычисления
|
||
- Асинхронная обработка
|
||
- Конвейерная обработка
|
||
- Использование толстого клиента
|
||
- [Кэширование](Кэширование.md)
|
||
- [Функциональное разделение](Функциональное%20разделение.md)
|
||
- [Шардинг](Шардирование%20в%20БД.md)
|
||
- Виртуальные шарды
|
||
- Центральный диспетчер
|
||
- [Репликация](_inbox/Репликация.md)
|
||
- Партиционирование
|
||
- Кластеризация
|
||
- Денормализация
|
||
- Параллельное выполнение
|
||
- [Избыточность](Избыточность.md)
|
||
- [Допустимая деградация системы](Допустимая%20деградация%20системы.md)
|
||
|
||
## Улучшения
|
||
- [Pipelining](Pipelining.md)
|
||
- [Прокси перед базой данных (БД)](Прокси%20перед%20базой%20данных%20(БД).md)
|
||
- [Улучшение производительности отдельного сервиса](Улучшение%20производительности%20отдельного%20сервиса.md)
|
||
## Заметки
|
||
|
||
В чем измеряется нагрузка:
|
||
- Количество запросов в единицу времени
|
||
- Requests per seconds (RPS)
|
||
- Request per minute (RPM)
|
||
- Количество данных в единицу времени
|
||
- Packets per seconds (PPS)
|
||
- Мегабит в секунду (MB/s)
|
||
- Количество одновременно обслуживаемых соединений
|
||
- Simultaneous connections
|
||
- Cuncurrency
|
||
|
||
Зачем нужен хайлоад?
|
||
- Защита от [DDOS](DDOS.md)
|
||
- Защита от [Slashdot-эффект](Slashdot-эффект.md)
|
||
|
||
- [High Availability](High%20Availability.md)
|
||
- [Reliability](Reliability.md)
|
||
- [Disaster recovery](Disaster%20recovery.md)
|
||
|
||
[Пропускная способность](Throughput.md) сетевой карты 1 Гбит/с (реальная 800-900 Мбит/с) или 120 000 пакетов в секунду. Bonding позволяет несколько физических интернет соединений объединить в одно логическое, например, 4 интерфейса - 3.5 Гбит/с.
|
||
|
||
В highload системах как правило отдают предпочтение [throughput](Throughput.md). |