Skip to content

Копытов Михаил, ДЗ 2#63

Open
Mihail3141 wants to merge 5 commits intokontur-courses:masterfrom
Mihail3141:master
Open

Копытов Михаил, ДЗ 2#63
Mihail3141 wants to merge 5 commits intokontur-courses:masterfrom
Mihail3141:master

Conversation

@Mihail3141
Copy link
Copy Markdown

No description provided.


if (requestTask.Status == TaskStatus.RanToCompletion)
{
_replicaStatus[replicaAddress] = replicaTimeout.TotalMilliseconds;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

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


if (completedTask == timeoutTask)
{
_replicaStatus[replicaAddress] = replicaTimeout.TotalMilliseconds;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Эта запись статистики становится немного бессмысленной, когда ниже то же время выставляется в статистику. Для исправления ситуации здесь необходимо было бы увеличивать время на какой-то штраф, чтобы гарантировано эту реплику понизить для последующих запросов


if (finishedItem.Task.Status == TaskStatus.RanToCompletion)
{
_replicaStatus[finishedItem.Address] = timer.ElapsedMilliseconds;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Тут записывается неверная статистика таймера для реплики. Мы записываем в статистику время прошедшее в целом с начала вызова нашего клиента и туда включено не фактическое время выполнения запроса к конкретной реплики, а все время затраченное на инициализацию, сортировку, цикл, создание запросов ко всем репликам и все ожидания.

В итоге первая реплика получит меньшее время чем к примеру вторая реплика, хотя вторая реплика может отвечать быстрее первой. Необъективная статистика получается

Comment on lines +52 to +53
if (completedTask == timeoutTask)
continue;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

При таймауте не обновляется время у реплики, в итоге она будет считаться всегда быстрой. Тут бы записывать в статистику время + какой-то штраф


if (finishedItem.Task.Status == TaskStatus.RanToCompletion)
{
_replicaStatus[finishedItem.Address] = timer.ElapsedMilliseconds;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Так как дубль логики, то та же ошибка что и выше, мы записываем необъективную оценку времени выполнения в статистику

Comment on lines +68 to +69
while (pendingTasks.Count != 0)
{
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

В While дубль логики, что и в For. Дублирвоание логики всегда плохо и в особенности если где-то ошибка, то ее надо не забыть исправлять в нескольких местах.

Для улучшения ситуации, можно было бы это вынести в отдельный метод

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants