Skip to content

Чугунов Владислав Лаб. 2 Группа 6511#77

Open
Colnuwko wants to merge 7 commits intoitsecd:mainfrom
Colnuwko:main
Open

Чугунов Владислав Лаб. 2 Группа 6511#77
Colnuwko wants to merge 7 commits intoitsecd:mainfrom
Colnuwko:main

Conversation

@Colnuwko
Copy link
Copy Markdown

ФИО: Чугунов Владислав
Номер группы: 6511
Номер лабораторной: 2
Номер варианта: 16
Краткое описание предметной области: Учебный курс
Краткое описание добавленных фич: Добавлен балансировщик нагрузки

@github-actions github-actions bot added In progress Код в процессе проверки Lab 2 Лабораторная №2. Балансировка нагрузки labels Mar 28, 2026
@github-actions github-actions bot requested a review from danlla March 28, 2026 10:30
Comment on lines +21 to +35
_type = nameof(WeightedRoundRobinLoadBalancer).Replace("LoadBalancer", "");

// Веса по умолчанию, если не переданы
weights ??= new[] { 3, 2, 1};

_sequence = [];

for (var i = 0; i < services.Count && i < weights.Length; i++)
{
var weight = weights[i];
for (var j = 0; j < weight; j++)
{
_sequence.Add(services[i]);
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

Comment on lines +48 to +51
if (_sequence.Count == 0)
{
throw new InvalidOperationException("No available downstream services.");
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

В lock стоит включать только то, что потенциально может использоваться разными потоками, а все остальное лучше вынести

private readonly object _lock = new();
private readonly string _type;

public string Type => _type;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Можно сразу проинициализировать и избавиться от поля _type:

public string Type => nameof(WeightedRoundRobinLoadBalancer).Replace("LoadBalancer", "");

using Ocelot.LoadBalancer.Interfaces;
using Ocelot.Responses;
using Ocelot.ServiceDiscovery.Providers;
using Ocelot.Values;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Нужно почистить неиспользуемые using

Comment on lines +6 to +10
using TrainingCourseApp.Gateway.LoadBalancer;
/// <summary>
/// Создатель балансировщика нагрузки WeightedRoundRobin с поддержкой весов из конфигурации
/// </summary>
public class WeightedRoundRobinCreator : ILoadBalancerCreator
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Не хватает пространства имен

.Select(s => s.HostAndPort)
.ToList();

var balancer = new WeightedRoundRobinLoadBalancer(hostAndPorts);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Здесь вероятно нужно передавать веса в конструктор, которые можно например брать из конфигурации

Comment on lines +10 to +14
//builder.Services.AddCors(options =>
// options.AddPolicy("AllowClient", policy =>
// policy.WithOrigins(builder.Configuration.GetSection("CorsSettings:AllowedOrigins").Get<string[]>() ?? [])
// .WithMethods("GET")
// .AllowAnyHeader()));
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Можно удалить


var app = builder.Build();

//app.UseCors("AllowClient");
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

И тут тоже

Comment on lines +9 to +29
{
"Host": "localhost",
"Port": 8000,
"Metadata": {
"weight": "3"
}
},
{
"Host": "localhost",
"Port": 8001,
"Metadata": {
"weight": "2"
}
},
{
"Host": "localhost",
"Port": 8002,
"Metadata": {
"weight": "1"
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Если в aspire поменять порты, то все сломается
Нужно переопределять эту секцию настроек, если из aspire приходят адреса сервисов генераторов

.WithHttpsEndpoint(8000 + i)
.WithReference(redis)
.WaitFor(redis);
gateway.WaitFor(service);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

А они начнут приходить в переменных окружения, если здесь добавить .WithReference(service)

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