diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md new file mode 100644 index 0000000..c6e9c6b --- /dev/null +++ b/ARCHITECTURE.md @@ -0,0 +1,53 @@ +### Архитектура выполнения +```txt +┌─────────────────────────────────────────────────────────────┐ +│ TestRunner │ +│ Создаёт N workers (по умолчанию 4) │ +└──────┬──────────┬──────────┬──────────┬─────────────────────┘ + │ │ │ │ + ▼ ▼ ▼ ▼ + Worker 1 Worker 2 Worker 3 Worker 4 + │ │ │ │ + │ │ │ │ + ┌───▼──────────▼──────────▼──────────▼───┐ + │ Общий пул из 1000 файлов │ + │ file_0.dat, file_1.dat, ... file_999 │ + └─────────────────────────────────────────┘ +``` + +Каждый worker работает в бесконечном цикле: + +``` go +for { + 1. Выбрать операцию на основе весов + (30% write, 30% read, 40% stat) + + 2. Выбрать случайный файл из пула + + 3. Выполнить операцию + + 4. Записать метрики + + 5. Повторить +} +``` + +#### Ключевые моменты +1. Независимость workers + +* Каждый worker работает сам по себе +* Никакой синхронизации между ними +* Могут одновременно работать с одним файлом + +2. Случайность выбора + +* Файл выбирается случайно из всего пула +* Один файл может быть выбран несколько раз +* Другой файл может не быть выбран вообще + +3. Размеры динамические + +* Write каждый раз выбирает новый размер +* Read читает текущий размер файла +* Stat - метаданные +