Skip to content

Миронюк Матвей Лаб. 2 Группа 6512#111

Open
Matvey6M6 wants to merge 4 commits into
itsecd:mainfrom
Matvey6M6:Lab2
Open

Миронюк Матвей Лаб. 2 Группа 6512#111
Matvey6M6 wants to merge 4 commits into
itsecd:mainfrom
Matvey6M6:Lab2

Conversation

@Matvey6M6
Copy link
Copy Markdown

ФИО: Миронюк Матвей
Номер группы: 6512
Номер лабораторной: 2
Номер варианта: 28
Краткое описание предметной области: Сотрудник компании
Краткое описание добавленных фич:

+ настроен запуск нескольких реплик сервиса через .NET Aspire
+ добавлен API Gateway на основе Ocelot
+ реализован алгоритм Weighted Round Robin
+ настроено распределение запросов между репликами по весам
+ обновлена маршрутизация клиентского приложения через gateway
+ выполнена проверка корректности балансировки через логи и трейсы
+ обновлен readme под лабу
+ добавлен var.md с описанием проделанной работы
+ скриншот работы балансировщика
@github-actions github-actions Bot added In progress Код в процессе проверки Lab 2 Лабораторная №2. Балансировка нагрузки labels Apr 14, 2026
@github-actions github-actions Bot requested a review from Gwymlas April 14, 2026 20:13
Copy link
Copy Markdown

@Gwymlas Gwymlas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+исправить замечания с первой лабы

Comment thread ApiGateway/Program.cs Outdated
Comment thread ServiceApi/Program.cs Outdated
Comment on lines +56 to +71
private static List<ServiceHostAndPort> BuildRotation(IEnumerable<ReplicaNodeOptions> nodes)
{
var rotation = new List<ServiceHostAndPort>();

foreach (var node in nodes.Where(static n => !string.IsNullOrWhiteSpace(n.Host) && n.Port > 0))
{
var normalizedWeight = Math.Max(1, node.Weight);

for (var i = 0; i < normalizedWeight; i++)
{
rotation.Add(new ServiceHostAndPort(node.Host, node.Port));
}
}

return rotation;
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Веса потенциально могут быть огромными, список тогда разрастется. Лучше математически вычислять нужный сервис

+ Исправления с первой лабораторной
+ Убран подход с раздуванием списка через BuildRotation;
вместо этого сделан smooth weighted round robin.
+Полностью убран CORS
@Matvey6M6 Matvey6M6 requested a review from Gwymlas May 14, 2026 07:30
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Weighted Round Robin - взвешенная карусель. Каждой реплике сервиса присваивается вес, в зависимости от которого она используется чаще/реже других. При этом сервисы при поступлении запросов перебираются циклически. К примеру, если для реплик [ R1, R2, R3 ] выбраны веса [ 3, 2, 1] , то пришедшие запросы будут маршрутизироваться следующим образом: R1, R1, R1, R2, R2, R3, R1, R1, R1 и т.д.

При текущем алгоритме запросы маршрутизируются так:
R1, R2, R1, R3, R2, R1, R1, R2, R1, ...

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Исправил, теперь балансировка выглядит так:
api-0 -> 1
api-1 -> 2
api-2 -> 3
api-3 -> 2
api-4 -> 1

  { "ReplicaId": "R1", "Host": "localhost", "Port": 15000, "Weight": 1 },
  { "ReplicaId": "R2", "Host": "localhost", "Port": 15001, "Weight": 2 },
  { "ReplicaId": "R3", "Host": "localhost", "Port": 15002, "Weight": 3 },
  { "ReplicaId": "R4", "Host": "localhost", "Port": 15003, "Weight": 2 },
  { "ReplicaId": "R5", "Host": "localhost", "Port": 15004, "Weight": 1 }

+ Теперь используется математическое вычисление нужной реплики через: var index = (int)((currentRequest - 1) % _totalWeight
+ Реализован классический Weighted Round Robin: теперь последовательность запросов соответствует требованию.
@Matvey6M6 Matvey6M6 requested a review from Gwymlas May 15, 2026 12:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

In progress Код в процессе проверки Lab 2 Лабораторная №2. Балансировка нагрузки

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants