-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Прокопьев Никита / ИТМО DWS / Stage 5 #163
Conversation
# Conflicts: # src/main/java/ru/vk/itmo/test/nikitaprokopev/MyFactory.java # src/main/java/ru/vk/itmo/test/nikitaprokopev/MyServer.java # src/main/java/ru/vk/itmo/test/nikitaprokopev/MyService.java # src/main/java/ru/vk/itmo/test/nikitaprokopev/ServerStarter.java
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The PR diff size of 179458 lines exceeds the maximum allowed for the inline comments feature.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The PR diff size of 179458 lines exceeds the maximum allowed for the inline comments feature.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Нужно зарезолвить конфликты перед merge и ревью.
# Conflicts: # src/main/java/ru/vk/itmo/test/nikitaprokopev/CustomResponseCodes.java # src/main/java/ru/vk/itmo/test/nikitaprokopev/MyFactory.java # src/main/java/ru/vk/itmo/test/nikitaprokopev/MyServer.java # src/main/java/ru/vk/itmo/test/nikitaprokopev/MyService.java # src/main/java/ru/vk/itmo/test/nikitaprokopev/analysis/stage2/reports/stage2.md
# Conflicts: # src/main/java/ru/vk/itmo/test/nikitaprokopev/MyFactory.java # src/main/java/ru/vk/itmo/test/nikitaprokopev/MyServer.java # src/main/java/ru/vk/itmo/test/nikitaprokopev/analysis/stage4/reports/stage4.md
(response, throwable) -> { | ||
if (response == null) { | ||
if (acceptableErrors.decrementAndGet() == 0) { | ||
result.completeExceptionally(new NotEnoughReplicasException()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут название надо более удачное для переменной,
acceptableErrors - звучит как разрешенное число ошибок, однако мы кидаем ошибку если получили столько ошибок
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Так и есть - это разрешеное количество ошибок, которое еще можно получить. При ошибке я это число уменьшаю и если количество разешенных ошибок стало 0 - значит мы не можем больше их получать. Переименовал его в leftErrorsToFail - осталось ошибок до неудачи.
.whenComplete( | ||
(httpResponse, throwable) -> { | ||
if (throwable != null) { | ||
cfResponse.completeExceptionally(new IllegalArgumentException()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
зачем же скрывать настоящий эксепшен, это категорически не стоит делать
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Согласен, исправил.
|
||
private CompletableFuture<Response> getInternalResponse(Request request) { | ||
final CompletableFuture<Response> cfResponse = new CompletableFuture<>(); | ||
workerPool.execute(() -> cfResponse.complete(handleInternalRequest(request))); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
не обрабатывается ошибка от handleInternalRequest()
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Согласен, исправил.
|
||
Тестирование с увеличением числа нод приводить не стал, так как проводил это сравнение и в прошлом этапе и производительность сильно уменьшилась, так как мы работаем в рамках одной машины. | ||
|
||
`RPS` увеличился, так как теперь все запросы отправляются паралелльно и не ждут друг друга. Значительное увеличение произошло при ack=1 и from=3, так как при первом успешном ответе отправляется ответ клиенту, не ожидая выполнения всех запросов. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
особенно интересно было бы проверить эфект, если бы запросы которые уже не нужны можно было и заабортить, а не просто не ждать их выполнения
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Согласен, но насколько я помню говорили на лекции этого не нужно было делать, или я не прав и это нужно реализовать?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
все верно, это не обязательно
|
||
## Выводы | ||
|
||
При использовании CompletableFuture, мы увеличили немного производительность в случае использования ack < from и уменьшили latency, так как запросы отправляются параллельно и не ждут друг друга. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
очень странно почему не увеличили производительность при нескольких ack, так как выполнялись же бы запросы параллельно
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Все таки в худшем случае с ack=3/from=3 произошло ускорение на 250 rps, что примерно 7%. Скорее всего это связано с произодительностью моего компьютера и в целом низким rps 3500-5500. А значительная разница ack/from 1/3 и 3/3 связано с тем, что когда у нас ack=1, то он не тратит "ресурсы сети", а быстро обрабатывается локально.
No description provided.