Pavel
да, на уровне аппа понятно как решать, но аппом мы не управляем :(
Sergey
https://www.youtube.com/watch?v=yQvcHy_tPjI
проксирование, при падении ноды, прокси держит клиента и перенаправляет запрос на другую ноду, соответственно растет время ответа
Sergey
а допустим у меня директ респонс
Sergey
)
bebebe
а допустим у меня директ респонс
я не до конца улавливаю вашу мысль, впрочем может и к лучшему
Sergey
методы балансировки
Sergey
один из них директ-респонс
Sergey
хотя, честно сказать, как его реализовать в кубере я не представляю себе
bebebe
возможно по этому и не улавливаю
Etki
да в любом случае балансировщиком не все решается, если условный SQL пркосировать, то от падения посередине транзакции ничего не спасет, все равно придется повторять запрос с самого начала
Sergey
https://www.youtube.com/watch?v=yQvcHy_tPjI
вот честно, всегда было странно видеть -c 200, ну похорошему его ест смысл выставлять равным хотя бы по количество ядер у тебя на машине
bebebe
видимо в ваших и их тестах преследовались разные задачи
bebebe
впрочем, задайте вопрос автору
Sergey
ну то так мысли в слух были, я уже ко всему этому философски отношусь
bebebe
есть ойти-архитекты, ойти-девелоперы, ойти-qa, ойти-деплоймент-инженеры, ойти-девопсы и прочее пора уже вводить ойти-философы
Sergey
Почему?
-с колличество конкурентных запросов в секунду, если их больше 1 на ядро, то начинается уже влияние друг на друга, но и тут есть нюансы
Sergey
плюс я в том видео не увидел на каких конфигах работает нгинкс и хапрокси, нгринкс по дефолту чекает порт бэкенда, жив он или нет, а вот хапрокси я тупо не помню, чекаит ли он что-то по дефолту)
Etki
Ну так это же не параллельная обработка
Etki
Там нет треда, который что-то считает до того момента, пока запрос не вернулся назад
Sergey
Там нет треда, который что-то считает до того момента, пока запрос не вернулся назад
я потому и написал, что есть нюансы, когда у тебя там запросик 20 байт, то да, оно на одном потоке может и 100 успеть за секунду отправить
Etki
там в описании конфиги
Pavel
там в видосике
Pavel
frontend http bind *:80 mode http default_backend web-backend backend web-backend balance roundrobin mode http server web1 22.22.22.2:3000 check server web2 22.22.22.3:3000 check server web3 22.22.22.5:3000 check
Sergey
да вижу в описании
Sergey
спасибо
Pavel
яндекс танк иожет 100к в секунду )
Pavel
заявлено
Sergey
да слышал, опять же на какой машине
Sergey
)
Pavel
обычный десктоп
Sergey
вот у меня в инфре есть машины под сотню ядер и пол тера памяти
Sergey
на ней 100к - это вообще неочем
Sergey
)
Pavel
у меня, я бомбитл, раскручивал до 10к
Sergey
сетевка норм у тебя была?
Pavel
обычный гигабит
Pavel
https://github.com/yandex/yandex-tank
Pavel
ну я апачом не пользовалься, а танк порекомендую
Sergey
у нас ребята свои модули нгинкса им тестили
Sergey
как раз на той тачке что я написал выше)
Sergey
да и опять же к тому видео, таймауты, на сколько я помню в хапрокси их дофига, и какие там по дефолту есть с каким временем
Sergey
у нгинкса вроде по дефолту чекается каждые 5 секунд порт бэкенда
G72K
чтобы при падении нода к кластере был минимальны простой в работе аппе при условии что реплики сервисов есть на других нодах
Как балансировщик должен знать, это упало или запрос долгий? Что делать с запросамии в процессе обратки? Не поучится защититься в общем случае
Serega
wrk еще крутой тул. ab это детский сад.
Serega
wrk по перфомансу на уровне нжинкс
Volodymyr
привет! никто не натыкался на best practices по http health checks?
Etki
там нет такого пространства для свободной мысли, чтобы были какие-то лучшие практики и плохие практики
Etki
возвращать большое тело ответа нет смысла разве что. плюс использовать коды 20х/503. но это вроде и так само по себе понятно.
Maksim
возвращать большое тело ответа нет смысла разве что. плюс использовать коды 20х/503. но это вроде и так само по себе понятно.
у меня тела ответов вообще ппустые..все данные тупо в заголовке.200 код все ок 503- контейнер умер, надо перезапускать
Maksim
Всё равно Куебр тело не читает как я понял
Volodymyr
возвращать большое тело ответа нет смысла разве что. плюс использовать коды 20х/503. но это вроде и так само по себе понятно.
ну так и делаю. а проверяете все зависимости контейнера? базы/шмазы? зависящие контейнеры?
Etki
нет, это всё не имеет отношения к здоровью сервиса
Etki
точнее, это все не имеет отношения к здоровью конкретного процесса и к необходимости его перезапускать
Maksim
У кубера две проверки
Maksim
1. Проверка жизни самого контейнера,
Maksim
2. Проверка, а может ли он обрабатывать траффик
Maksim
при фейле на первой, конейтер перезапускается
Maksim
при фейле на второй под выводится из сервиса.
Vitalii
если заморочиться, можно в своём приложении хэндлер написать, который проверяет нужные вещи: например что кэши некие прогреты для readinessProbe
bebebe
этого не следует делать
Vitalii
хозяин барин:)
Vitalii
у нас например в readiness проверяется, что приложение подключилось ко всем нужным бд и встало в кластер своих товарищей
Oleksandr
+
bebebe
Почему?
у меня есть глубокая уверенность в том, что если приложение запущенное в поде каким-либо образом контактирует с k8s api и проверяет стейты - это означает что где-то на этапе проектирования была допущена ошибка
Maksim
почему же?
Oleksandr
потому что приложение должно работать на абстрактном окружении и не знать о его особенностях
bebebe
это должен разруливать сам k8s
Oleksandr
и тем более туда не лазить
bebebe
я не против такой практики - но на мой взгляд это явный признак того, что-то где-то в начале не доглядели, или где-то сам k8s не очень
Maksim
k8s может разрулить то лько то что ниходит в нём
Maksim
и досточно кластеризрованно
Maksim
а если у тебя есть коннект к внешней БД?
Maksim
как k8s это разрлуит?
Maksim
вариант. у тебя приложение допусти 8 подов