diff --git a/README.md b/README.md index 68f3a08..41c4457 100644 --- a/README.md +++ b/README.md @@ -896,6 +896,48 @@ score_for_removal = (1 - node.load) * 0.6 + (node_uptime_hours / max_uptime) * 0.4 ``` +**Краевые условия и ограничения** + +```sh +// Границы кластера +min_nodes = 1 // минимум 1 узел +max_nodes = 10 // максимум 10 узлов + +// Ограничения на изменение +max_scale_up_nodes = 3 // за раз можно добавить не более 3 узлов +max_scale_down_nodes = 2 // за раз можно удалить не более 2 узлов +``` + +**Примеры работы алгоритма** + +**Пример 1: Нагрузка растёт** + +```sh +T=0: nodes=4, load=0.65, прогноз=0.68 → NoChange +T=30: nodes=4, load=0.72, прогноз=0.78 → NoChange +T=60: nodes=4, load=0.80, прогноз=0.85 → NoChange +T=90: nodes=4, load=0.88, прогноз=0.94 → ScaleUp(+2 узла) +T=120: nodes=6, load=0.78, прогноз=0.81 → NoChange (стабилизация) +``` + +**Пример 2: Нагрузка падает** + +```sh +T=0: nodes=6, load=0.45, прогноз=0.42 → NoChange +T=30: nodes=6, load=0.38, прогноз=0.35 → NoChange +T=60: nodes=6, load=0.32, прогноз=0.29 → ScaleDown(-1 узел) +T=90: nodes=5, load=0.35, прогноз=0.33 → NoChange (стабилизация) +``` + +**Преимущества алгоритма PHA:** + +1. Проактивность - прогнозирование предотвращает перегрузку до её наступления +2. Стабильность - moving average и cooldown предотвращают "маятник" +3. Гибкость - разные веса метрик позволяют адаптироваться под разные нагрузки +4. Безопасность - границы min/max и лимиты на скорость изменения +5. Эффективность - пропорциональное масштабирование (чем выше перегрузка, тем больше узлов) + + ```sh # Просмотр статуса кластера (режим лидера) futriix:~> status