diff --git a/dev/fundamental/Concurrency.md b/dev/fundamental/Concurrency.md new file mode 100644 index 00000000..56b7ca45 --- /dev/null +++ b/dev/fundamental/Concurrency.md @@ -0,0 +1,25 @@ +--- +aliases: + - конкурентность + - конкурентна +tags: + - maturity/🌱 +date: 2024-09-10 +zero-link: + - "[[../../meta/zero/00 Разработка|00 Разработка]]" +parents: +linked: + - "[[Parallelism]]" +--- +Concurrency - свойство систем, глобальное состояние которых изменяется чередующимся выполнением независимых или частично-независимых функций или компонент. Чередование приводит к [[Переключение контекста|переключению контекста]]. + +![[../../meta/files/images/Pasted image 20240910132902.png]] +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Разработка|00 Разработка]] +**Родитель**:: +**Источник**:: +**Создана**:: [[2024-09-10]] +**Автор**:: +### Дополнительные материалы +- [[Parallelism]] \ No newline at end of file diff --git a/dev/fundamental/Parallelism.md b/dev/fundamental/Parallelism.md new file mode 100644 index 00000000..bedca0f4 --- /dev/null +++ b/dev/fundamental/Parallelism.md @@ -0,0 +1,23 @@ +--- +aliases: + - параллелизм +tags: + - maturity/🌱 +date: 2024-09-10 +zero-link: +parents: +linked: + - "[[Concurrency]]" +--- +Parallelism - система [[Concurrency|конкурентна]], но один или несколько блоков могут выполняться параллельно + +![[../../meta/files/images/Pasted image 20240910132902.png]] +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Разработка|00 Разработка]] +**Родитель**:: +**Источник**:: +**Создана**:: [[2024-09-10]] +**Автор**:: +### Дополнительные материалы +- [[Concurrency]] \ No newline at end of file diff --git a/dev/fundamental/Переключение контекста.md b/dev/fundamental/Переключение контекста.md index 6487375a..41317e67 100644 --- a/dev/fundamental/Переключение контекста.md +++ b/dev/fundamental/Переключение контекста.md @@ -15,7 +15,7 @@ parents: - "[[Многозадачность ЦПУ]]" linked: --- -Переключение контекстов происходит, когда [[../../../../knowledge/dev/pc/Операционная система|операционная система]] останавливает выполнение одной задачи и начинает выполнение другой. Этот процесс включает в себя сохранение текущего состояния задачи (контекста), включая значения регистров процессора, указатель инструкций и другие связанные с задачей данные, чтобы впоследствии можно было возобновить выполнение задачи с того места, где она была остановлена. +Переключение контекстов происходит, когда [[../../../../knowledge/dev/pc/Операционная система|операционная система]] останавливает выполнение одной задачи и начинает выполнение другой ([[Concurrency|Concurrency]]). Этот процесс включает в себя сохранение текущего состояния задачи (контекста), включая значения регистров процессора, указатель инструкций и другие связанные с задачей данные, чтобы впоследствии можно было возобновить выполнение задачи с того места, где она была остановлена. Этот процесс происходит настолько быстро и эффективно, что пользователи и приложения воспринимают систему как способную выполнять множество операций одновременно, несмотря на то, что физически одно [[Ядро процессора|ядро]] процессора в данный момент может выполнять только один поток. @@ -48,6 +48,7 @@ linked: **Создана**:: [[2024-01-28]] ### Дополнительные материалы - [[../../meta/zero/00 Архитектура ЭВМ|00 Архитектура ЭВМ]] +- [[Concurrency|Concurrency]] ### Дочерние заметки ```dataview LIST diff --git a/index.md b/index.md index eb77feec..68777538 100644 --- a/index.md +++ b/index.md @@ -41,6 +41,7 @@ enableToc: false - [[meta/zero/00 Архитектура ЭВМ|Архитектура ЭВМ]] - [Архитектура ПО](meta/zero/00%20Архитектура%20ПО.md) - [Архитектура ИС](meta/zero/00%20Архитектура%20ИС.md) + - [[meta/zero/00 HighLoad|HighLoad]] - [DevOps](meta/zero/00%20DevOps.md) - [Docker](meta/zero/00%20Docker.md) - Сборщики diff --git a/meta/files/images/Pasted image 20240910132902.png b/meta/files/images/Pasted image 20240910132902.png new file mode 100644 index 00000000..d28b8a6c Binary files /dev/null and b/meta/files/images/Pasted image 20240910132902.png differ diff --git a/meta/zero/00 HighLoad.md b/meta/zero/00 HighLoad.md new file mode 100644 index 00000000..edee12fe --- /dev/null +++ b/meta/zero/00 HighLoad.md @@ -0,0 +1,79 @@ +--- +tags: + - type/zero-link +parents: + - "[[00 Архитектура ИС]]" +title: HighLoad +aliases: + - HighLoad +--- +## Что такое 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). \ No newline at end of file diff --git a/meta/zero/00 Архитектура ИС.md b/meta/zero/00 Архитектура ИС.md index d0a82c75..10f832da 100644 --- a/meta/zero/00 Архитектура ИС.md +++ b/meta/zero/00 Архитектура ИС.md @@ -8,4 +8,5 @@ title: Архитектура ПО - [Монолитная архитектура](Монолитная%20архитектура.md) - [Микросервисная архитектура](Микросервисная%20архитектура.md) - [Service Oreinted Architecture](Service%20Oreinted%20Architecture.md) -- [Трёхзвенная структура](Трёхзвенная%20структура.md) \ No newline at end of file +- [Трёхзвенная структура](Трёхзвенная%20структура.md) +- [[00 HighLoad|HighLoad]] \ No newline at end of file