Conversation
| <UnorderedListItem><Link To="https://puginarug.com/">Ссылка на форк</Link></UnorderedListItem> | ||
| <UnorderedListItem>Номер <Strong>№2 "«Балансировка нагрузки» - Реализация апи гейтвея, настройка его работы"</Strong></UnorderedListItem> | ||
| <UnorderedListItem>Вариант <Strong>№7 "Weighted Random"</Strong></UnorderedListItem> | ||
| <UnorderedListItem>Выполнена <Strong>Земель Алексеем 6511</Strong> </UnorderedListItem> |
There was a problem hiding this comment.
у меня фамилия не склоняется(
| @@ -0,0 +1,100 @@ | |||
| using Microsoft.AspNetCore.Http; | |||
| namespace ProjectApp.Gateway.LoadBalancing; | ||
|
|
||
| /// <summary> | ||
| /// ������������� �������� � ���������� ����������� ���������� ������ (Weighted Random) |
| /// <summary> | ||
| /// ���������� �������������� �������� � ���������� ��������� �������������� �������� | ||
| /// </summary> | ||
| private sealed class WeightedRandomLoadBalancer(IReadOnlyList<DownstreamHostAndPort> downstreamAddresses, IReadOnlyList<double> configuredWeights) : ILoadBalancer |
| /// <summary> | ||
| /// ����������� ���������������� ����: �������� �� � ����� 1, ��������� ������������ | ||
| /// </summary> | ||
| private static IReadOnlyList<double> NormalizeWeights(IReadOnlyList<double> configuredWeights, int replicasCount) |
There was a problem hiding this comment.
Если из этого метода возвращается только double[], то лучше этот тип в возвращаемое значение и прописать, тогда не будет лишних кастов типов
|
|
||
| if (configuredWeights.Count != replicasCount || configuredWeights.Any(x => x <= 0d)) | ||
| { | ||
| return Enumerable.Repeat(1d / replicasCount, replicasCount).ToArray(); |
There was a problem hiding this comment.
return [.. Enumerable.Repeat(1d / replicasCount, replicasCount)];Ниже аналогично
| builder.Services.AddCors(options => | ||
| { | ||
| options.AddDefaultPolicy(policy => | ||
| { | ||
| policy.AllowAnyOrigin() | ||
| .AllowAnyHeader() | ||
| .AllowAnyMethod(); | ||
| }); | ||
| }); |
There was a problem hiding this comment.
Нужно настроить cors так, чтобы в разрешенных origins были только origins клиента
| var builder = WebApplication.CreateBuilder(args); | ||
|
|
There was a problem hiding this comment.
Не хватает builder.AddServiceDefaults();
| builder.Services.AddCors(options => | ||
| { | ||
| options.AddDefaultPolicy(policy => | ||
| { | ||
| policy.WithOrigins(allowedOrigins) | ||
| .WithMethods("GET") | ||
| .WithHeaders("Content-Type"); | ||
| }); | ||
| }); |
There was a problem hiding this comment.
Отсюда cors можно убрать, теперь клиент взаимодействует с gateway
|
|
||
| var api = builder.AddProject<Projects.ProjectApp_Api>("projectapp-api") | ||
| .WithReference(redis) | ||
| .WithReplicas(5) |
There was a problem hiding this comment.
Идея правильная, но полноценно это работает в новом .net10 и aspire
Если посмотреть, то в gateway приходит всего один адрес, из-за этого неправильно настраиваются веса
Скорее всего проще будет просто заменить вызов этого метода на ручное создание 5 реплик в цикле
ФИО: Земель Алексей
Номер группы: 6511
Номер лабораторной: 2
Номер варианта: 7
Краткое описание предметной области: Программный проект
Краткое описание добавленных фич: Реализована репликация сервиса генерации, апи гейтвей на основе Ocelot и и балансировщик нагрузки Weighted Random