digital-garden/wiki/zero/00 HighLoad.md

76 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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)
- [Шардинг](Шардирование.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).