Skip to content
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

Merged
merged 59 commits into from
May 15, 2024

Conversation

Nikpro200125
Copy link
Contributor

No description provided.

Copy link

@codeclimate codeclimate bot left a 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.

Copy link

@codeclimate codeclimate bot left a 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.

Copy link
Member

@incubos incubos left a 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
@vladimir-bf vladimir-bf assigned atimofeyev and unassigned vladimir-bf Apr 9, 2024
# 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());
Copy link
Contributor

Choose a reason for hiding this comment

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

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

Copy link
Contributor Author

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());
Copy link
Contributor

Choose a reason for hiding this comment

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

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

Copy link
Contributor Author

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)));
Copy link
Contributor

Choose a reason for hiding this comment

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

не обрабатывается ошибка от handleInternalRequest()

Copy link
Contributor Author

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, так как при первом успешном ответе отправляется ответ клиенту, не ожидая выполнения всех запросов.
Copy link
Contributor

Choose a reason for hiding this comment

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

особенно интересно было бы проверить эфект, если бы запросы которые уже не нужны можно было и заабортить, а не просто не ждать их выполнения

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Согласен, но насколько я помню говорили на лекции этого не нужно было делать, или я не прав и это нужно реализовать?

Copy link
Contributor

Choose a reason for hiding this comment

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

все верно, это не обязательно


## Выводы

При использовании CompletableFuture, мы увеличили немного производительность в случае использования ack < from и уменьшили latency, так как запросы отправляются параллельно и не ждут друг друга.
Copy link
Contributor

Choose a reason for hiding this comment

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

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

Copy link
Contributor Author

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, то он не тратит "ресурсы сети", а быстро обрабатывается локально.

@atimofeyev atimofeyev merged commit 0759e3e into polis-vk:main May 15, 2024
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants