Update README.md
This commit is contained in:
135
README.md
135
README.md
@@ -46,6 +46,7 @@
|
||||
<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="#http-api">HTTP API</a></li>
|
||||
@@ -1203,6 +1204,140 @@ futriix:~> cluster health
|
||||
```
|
||||
<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)**.
|
||||
|
||||
Reference in New Issue
Block a user