Update README.md

This commit is contained in:
2026-07-19 22:33:31 +00:00
parent afd55bf20f
commit 0fd4d4bded

135
README.md
View File

@@ -46,6 +46,7 @@
<li><a href="#индексы">Индексы</a></li> <li><a href="#индексы">Индексы</a></li>
<li><a href="#транзакции">Транзакции</a></li> <li><a href="#транзакции">Транзакции</a></li>
<li><a href="#кластеризация-и-шардинг">Кластеризация и шардинг</a></li> <li><a href="#кластеризация-и-шардинг">Кластеризация и шардинг</a></li>
<li><a href="#backpressure">Backpressure</a></li>
<li><a href="#ограничения">Ограничения</a></li> <li><a href="#ограничения">Ограничения</a></li>
<li><a href="#импорт-экспорт">Импорт-Экспорт</a></li> <li><a href="#импорт-экспорт">Импорт-Экспорт</a></li>
<li><a href="#http-api">HTTP API</a></li> <li><a href="#http-api">HTTP API</a></li>
@@ -1203,6 +1204,140 @@ futriix:~> cluster health
``` ```
<p align="right">(<a href="#readme-top">К началу</a>)</p> <p align="right">(<a href="#readme-top">К началу</a>)</p>
## Backpressure
Для равномерной загрузки каждого узла кластера, в субд futriix применяется механизм **"backpressure (в пер. с англ. "обратный клапан@)"**.
**Математическая формула вероятностного отклонения в Backpressure**
В системе Backpressure используется адаптивная вероятностная модель для отклонения запросов при перегрузке, которое рассчитывается по следующей формуле:
```sh
P_reject = f(level) × g(load) × h(time)
Где:
* P_reject — итоговая вероятность отклонения запроса (0.0 - 1.0)
* f(level) — коэффициент на основе уровня перегрузки
* g(load) — коэффициент на основе текущей нагрузки
* h(time) — коэффициент на основе времени (для защиты от "thundering herd")
```
**Компоненты формулы** </br>
**Коэффициент уровня перегрузки f(level)**
```sh
f(level) = {
0.00, если level = None
0.00, если level = Low (только задержка)
0.30, если level = Medium
0.70, если level = High
0.90, если level = Critical
}
```
</br>
**Коэффициент нагрузки g(load)**
```sh
g(load) = (cpu_usage + memory_usage + queue_factor + connection_factor) / 4
где:
cpu_usage = current_cpu / cpu_threshold
memory_usage = current_memory / memory_threshold
queue_factor = min(queue_size / queue_threshold, 1.0)
connection_factor = min(connections / connection_threshold, 1.0)
```
</br>
**Коэффициент времени h(time) (экспоненциальное сглаживание)**
```sh
h(time) = 1 - e^(× Δt)
где:
λ = 0.1 (константа скорости затухания)
Δt = время с последнего отклонения в секундах
```
</br>
**Итоговая формула вероятности отклонения**
```sh
P_reject = f(level) × g(load) × (1 - e^(-0.1 × Δt))
```
**Формула задержки (для уровня Low)**
```sh
D = D_base × (1 + α × load_factor)
где:
D_base = 100ms (базовая задержка)
α = 2.0 (коэффициент усиления)
load_factor = (cpu_usage + memory_usage) / 2
```
</br>
**Графическое представление**
```sh
Вероятность отклонения P_reject
|
1.0 | * * * Critical (90%)
| *
0.9 | * High (70%)
| *
0.7 | * Medium (30%)
| *
0.5 | *
| *
0.3 | * Low (0% - только задержка)
| *
0.1 |*
|_____________________________ Нагрузка
0 0.2 0.4 0.6 0.8 1.0
```
</br>
#### Пример рассчёта
**Исходные данные:**
* Уровень: High → f(level) = 0.70
* CPU: 85% → cpu_usage = 0.85/0.80 = 1.0625
* Memory: 75% → memory_usage = 0.75/0.85 = 0.882
* Queue: 8000/10000 = 0.8
* Connections: 4000/5000 = 0.8
* Время с последнего отклонения: 2 секунды
</br>
**Рассчёт**
```sh
load_factor = (1.0625 + 0.882 + 0.8 + 0.8) / 4 = 0.886
time_factor = 1 - e^(-0.1 × 2) = 1 - e^(-0.2) = 1 - 0.819 = 0.181
P_reject = 0.70 × 0.886 × 0.181 = 0.112 = 11.2%
```
**Результат: ~11% запросов будут отклонены.**
</br>
**Преимущества формулы**
1. **Адаптивность** — реагирует на изменение нагрузки в реальном времени
2. **Сглаживание** — предотвращает резкие скачки отклонений
3. **Самовосстановление** — при снижении нагрузки вероятность автоматически уменьшается
4. **Предсказуемость** — поведение системы становится детерминированным и предсказуемым
<p align="right">(<a href="#readme-top">К началу</a>)</p>
## Ограничения ## Ограничения
В субд `futriix` также как и в традиционных субд, есть механизм **Ограничений (Constraints)**. В субд `futriix` также как и в традиционных субд, есть механизм **Ограничений (Constraints)**.