Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
PetroNotC Sharp
Озверин,
Статья интересная, но я согласен с Андрей Панфиловым что аргумент с микросервисами притянут за уши.
Мы в сабже сравниваем сервлеты по классике и рактивное программирование библиотеку.
Без юз кейса общения микросервисов и побочных от этого эффектов.


почему без? А если раскрывается все именно в микросервисах?
1 июл 19, 13:05    [21918081]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Озверин
раскрывается все именно в микросервисах?
ты первый про это сказал.
Это меняет дело.
То есть сабж рассматриваем только как борьба с недостатками микросервисов.
ОК.
1 июл 19, 13:08    [21918083]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
questioner
Member

Откуда:
Сообщений: 1865
Андрей Панфилов
questioner
Как-то звучит странно. Особо никто про стриминг не пишет в описании servlet 3.1

Думается, что не идиоты это придумали и у них была мотивация делать то, что они сделали
Не представляю как можно так тупить-то.... вот зачем вы приводите ссылки, цитаты и прочую ересь, если сами их не читаете?


Честно читаю то, что привожу. Суть в том, что целостного представления у меня нет, поэтому и пишу тут. Если бы я на 100 процентов был уверен я бы и не спрашивал

Андрей Панфилов
questioner
When using Servlet 3.0 async processing, the server can dispatch the request processing in a separate thread pool while the request is being processed by the application. However, when it comes to I/O, work always happens on a server thread and it is always blocking. This means that a "slow client" can monopolize a server thread, since the server is blocked while reading/writing to that client with a poor network connection.
Вопрос: сколько можно в сокет написать без блокировки?

Вот вообще не представляю даже. И вообще не понимаю этот механизм. Для меня NIO это некая выведенная унифицированная абстракция над улучшениями ОС, которая на Юниксе дать один прирост, а на Винде ничего не дать.
1 июл 19, 13:34    [21918108]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
questioner
Member

Откуда:
Сообщений: 1865
PetroNotC Sharp
Озверин,
Мы в сабже сравниваем сервлеты по классике и рактивное программирование библиотеку.


Кажется кому-то надо опохмелиться. Приведенная статья именно о теме топика. Микро, Макро сервисы....это вообще по барабану. Может код вообще в гугл ходит, зачем об этом думать даже.

P.S. я конечно понимаю, что это русский форум, но всё таки
1 июл 19, 13:42    [21918117]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3346
Озверин
от вас слышу только про идиотов, воду, бесполезность микросеврисов и уши ;)
Ну а как иначе? Вот пишут:
автор
Option 1: Increase the thread pool size
Yes, this is a good workaround, BUT only workaround!!! Because we cannot set this value to several thousand, because it’s is Docker with very limited memory. And each thread requires stack memory.
У кота, по моим наблюдениям, http-поток отжирает где-то в районе аж 100Kb, т.е. на тысячу потоков будет аж целых 100Mb, а пишут что это много (на машине времени чтоли на 30 лет назад сгоняли?), я бы понял еще если бы написали что слишком много экзекьюшн юнитов и все начинает тупить (ну и там график бы еще с насыщением привели), а здесь какая-то левая отмазка про память. Если продолжать верить в то, что они таки в количестве памяти ограничены, то в реальности получается так: разница межу t2.micro и t2.medium в цене 15$ в месяц, при этом 1Gb против 4Gb, "исследование" по ссылке заняло наверное дня 4 и стоило заказчику косаря 2, вопрос: на сколько обули заказчика?
1 июл 19, 13:44    [21918121]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Андрей Панфилов, я не понял: вы не отличаете stack memory от heap или не понимаеет, что у микросервисов есть своя ниша?
1 июл 19, 13:55    [21918134]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3346
questioner
Андрей Панфилов
пропущено...
Вопрос: сколько можно в сокет написать без блокировки?

Вот вообще не представляю даже. И вообще не понимаю этот механизм. Для меня NIO это некая выведенная унифицированная абстракция над улучшениями ОС, которая на Юниксе дать один прирост, а на Винде ничего не дать.
Ну а чего не нагулили-то?
man 2 send:

When the message does not fit into the send buffer of the socket,
send() normally blocks, unless the socket has been placed in
nonblocking I/O mode. In nonblocking mode it would fail with the
error EAGAIN or EWOULDBLOCK in this case. The select(2) call may be
used to determine when it is possible to send more data.

размер send buffer по-умолчанию в linux 122Kb, причем его еще можно увеличивать, теперь второй вопрос: с повальным увлечением REST в вебе, 122Kb - это большой размер для ответа или маленький?
1 июл 19, 14:00    [21918137]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
questioner
Кажется кому-то надо опохмелиться
продолжаете плеваться и сморкаться?
questioner
Приведенная статья именно о теме топика. Микро, Макро сервисы....это вообще по барабану.

Вам по барабану или профисообществу?
1 июл 19, 14:01    [21918138]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
questioner,
Ты ТС, и за это время просто обязан был сделать собственные тесты.
1 июл 19, 14:06    [21918148]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
redwhite90
Member

Откуда:
Сообщений: 1907
Андрей Панфилов
questioner
пропущено...

Вот вообще не представляю даже. И вообще не понимаю этот механизм. Для меня NIO это некая выведенная унифицированная абстракция над улучшениями ОС, которая на Юниксе дать один прирост, а на Винде ничего не дать.
Ну а чего не нагулили-то?
man 2 send:

When the message does not fit into the send buffer of the socket,
send() normally blocks, unless the socket has been placed in
nonblocking I/O mode. In nonblocking mode it would fail with the
error EAGAIN or EWOULDBLOCK in this case. The select(2) call may be
used to determine when it is possible to send more data.

размер send buffer по-умолчанию в linux 122Kb, причем его еще можно увеличивать, теперь второй вопрос: с повальным увлечением REST в вебе, 122Kb - это большой размер для ответа или маленький?


Процентное соотношение мне не известно, но с уверенностью можно сказать, что не редки случаи когда ответ превышает 122 кб
1 июл 19, 14:22    [21918170]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
redwhite90
Member

Откуда:
Сообщений: 1907
Озверин
PetroNotC Sharp
Озверин,
Статья интересная, но я согласен с Андрей Панфиловым что аргумент с микросервисами притянут за уши.
Мы в сабже сравниваем сервлеты по классике и рактивное программирование библиотеку.
Без юз кейса общения микросервисов и побочных от этого эффектов.


почему без? А если раскрывается все именно в микросервисах?


На этом месте мог быть сервис с котировками на бирже, который никогда не был и быть не мог частью монолита
1 июл 19, 14:26    [21918174]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3346
Озверин
я не понял: вы не отличаете stack memory от heap?
Насколько я помню это у вас в прошлый раз возникали проблемы с размером стэка, вот из интернетов: 10 тысяч потоков на 2Gb кучи, чес про память из статьи, что вы привели, несостоятелен.

Озверин
или не понимаеет, что у микросервисов есть своя ниша
Пока понимание такое, что ниша микросервисов - обуть лохов.
1 июл 19, 14:29    [21918178]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3346
redwhite90
Процентное соотношение мне не известно, но с уверенностью можно сказать, что не редки случаи когда ответ превышает 122 кб
больше 122Kb - это видосики чтоли? на странице A4 где-то 3000 печатных знаков, ну с пробелами пусть будет 4000, ладно, форум русскоязычный, пусть A4 - будет 8Kb, т.е. чтобы в попасть в блокировку на send() нужно отправить >15 страниц текста (и при этом ничего в ОС не крутить!)... вы точно адекватно оцениваете объемы передаваемой информации? или в JSON html пихаете?
1 июл 19, 14:39    [21918190]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Андрей Панфилов
Пока понимание такое, что ниша микросервисов - обуть лохов.
кто сказал что профи обязан дипломатично выражаться)))
1 июл 19, 14:53    [21918218]     Ответить | Цитировать Сообщить модератору
 Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3346
Андрей Панфилов
чес про память из статьи, что вы привели, несостоятелен.
Дальше, смотрим на картинку где сравнивается throughput разных подходов:
  • "классика" - 831
  • async - 1313
  • WebFlux - 1469

    замечаем, что цифры от WebFlux не особо-то и хорошо смотрятся на фоне servlet api 3.0 , теперь смотрим код:

        @GetMapping(value = "/sync")
        public String getUserSync(@RequestParam long delay) {
            return sendRequestWithJavaHttpClient(delay).thenApply(x -> "sync: " + x).join();
        }
    
        private CompletableFuture<String> sendRequestWithApacheHttpClient(long delay) {
            CompletableFuture<org.apache.http.HttpResponse> cf = new CompletableFuture<>();
            FutureCallback<org.apache.http.HttpResponse> callback = new HttpResponseCallback(cf);
            HttpUriRequest request = new HttpGet(userServiceHost+"/user/?delay="+delay);
            apacheClient.execute(request, callback);
            return cf.thenApply(response -> {
                try {
                    return EntityUtils.toString(response.getEntity());
                } catch (ParseException | IOException e) {
                    return e.toString();
                }
            }).exceptionally(Throwable::toString);
        }
    


    я правильно понял, что автор статьи в случае "синхронного" выполнения утилизирует 2 потока одновременно: один с CompletableFuture, второй с join, а потом говорит потоков как-то много и памяти не хватает?
  • 1 июл 19, 15:10    [21918244]     Ответить | Цитировать Сообщить модератору
     Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
    Озверин
    Member

    Откуда: Ростов-на-Дону
    Сообщений: 5183
    Андрей Панфилов
    Озверин
    я не понял: вы не отличаете stack memory от heap?
    Насколько я помню это у вас в прошлый раз возникали проблемы с размером стэка, вот из интернетов: 10 тысяч потоков на 2Gb кучи, чес про память из статьи, что вы привели, несостоятелен.

    Озверин
    или не понимаеет, что у микросервисов есть своя ниша
    Пока понимание такое, что ниша микросервисов - обуть лохов.


    netflix горько плачет
    1 июл 19, 15:13    [21918248]     Ответить | Цитировать Сообщить модератору
     Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
    questioner
    Member

    Откуда:
    Сообщений: 1865
    Андрей Панфилов
    questioner
    пропущено...

    Вот вообще не представляю даже. И вообще не понимаю этот механизм. Для меня NIO это некая выведенная унифицированная абстракция над улучшениями ОС, которая на Юниксе дать один прирост, а на Винде ничего не дать.
    Ну а чего не нагулили-то?
    man 2 send:

    When the message does not fit into the send buffer of the socket,
    send() normally blocks, unless the socket has been placed in
    nonblocking I/O mode. In nonblocking mode it would fail with the
    error EAGAIN or EWOULDBLOCK in this case. The select(2) call may be
    used to determine when it is possible to send more data.

    размер send buffer по-умолчанию в linux 122Kb, причем его еще можно увеличивать, теперь второй вопрос: с повальным увлечением REST в вебе, 122Kb - это большой размер для ответа или маленький?


    Тут я что-то новое узнал))

    Правильно я понимаю, что вся история с NIO(1 или 2 кстати?) в том, что мы можем записать/прочитать некоторое количество данных(122 кб для linux) не блокируясь, а если больше, то блокируемся?

    То бишь хотим мы зааплоадить видос на пару гигабайтов через NIO и это будет выглядеть примерно так:

    У нас есть колбеки, которые вызывает ОС, говорящие о том, что "ОС готова записать в сокет 122кб". Причём на это не тратится даже CPU как я понял. Ок, мы записали эти 122 кб и пока следующий раз колбек не вызывется, то приложение ресурсы не тратит на запись и может тратить ресурсы.

    похоже на правду?
    1 июл 19, 15:17    [21918253]     Ответить | Цитировать Сообщить модератору
     Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
    Андрей Панфилов
    Member

    Откуда: Москва > Melbourne
    Сообщений: 3346
    Озверин
    netflix горько плачет
    у них же бизнес видосики стримить, не?
    1 июл 19, 15:18    [21918256]     Ответить | Цитировать Сообщить модератору
     Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
    Озверин
    Member

    Откуда: Ростов-на-Дону
    Сообщений: 5183
    Андрей Панфилов
    Озверин
    netflix горько плачет
    у них же бизнес видосики стримить, не?


    в том числе. Только микросервисы там выполняют совершенно разные ф-ии..идиоты, думаю.
    1 июл 19, 15:21    [21918262]     Ответить | Цитировать Сообщить модератору
     Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
    Андрей Панфилов
    Member

    Откуда: Москва > Melbourne
    Сообщений: 3346
    Озверин
    Только микросервисы там выполняют совершенно разные ф-ии..идиоты, думаю.
    ну а как еще? сидит там отдел разработки и думает: как бы вытянуть из бизнеса еще денег! о! нужно сказать что все что мы до этого делали чуть собачья и нужно все переписать заново. Мы вон в 2005 киношки стримили с посредственного сервера и спокойно забивали 4 гигабита, и никаких микросервисов не было, только perl и nginx.
    1 июл 19, 15:40    [21918274]     Ответить | Цитировать Сообщить модератору
     Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
    Озверин
    Member

    Откуда: Ростов-на-Дону
    Сообщений: 5183
    Андрей Панфилов
    Озверин
    Только микросервисы там выполняют совершенно разные ф-ии..идиоты, думаю.
    ну а как еще? сидит там отдел разработки и думает: как бы вытянуть из бизнеса еще денег! о! нужно сказать что все что мы до этого делали чуть собачья и нужно все переписать заново. Мы вон в 2005 киношки стримили с посредственного сервера и спокойно забивали 4 гигабита, и никаких микросервисов не было, только perl и nginx.


    мне нравится. Согласен. ТыТруба вон же как-то жила раньше - и все ок было.

    p.s. Представил 2005й в текущих разрешениях, про 4k говорить даже не буду - вдруг скажут, что это от сатаны!!!
    1 июл 19, 15:48    [21918282]     Ответить | Цитировать Сообщить модератору
     Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
    PetroNotC Sharp
    Member

    Откуда:
    Сообщений: 2446
    Любыю тему в микросервисы переведут)
    1 июл 19, 15:49    [21918287]     Ответить | Цитировать Сообщить модератору
     Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
    Озверин
    Member

    Откуда: Ростов-на-Дону
    Сообщений: 5183
    PetroNotC Sharp
    Любыю тему в микросервисы переведут)


    в любую тему ворвутся люди, которые скажут - что микросервисы никому не нужны. Это странно, потому что вопрос ведь касается совершенно других тем, например - производительности околоструктурных решений, которые идеально раскрываются в микросервисах.
    1 июл 19, 15:51    [21918290]     Ответить | Цитировать Сообщить модератору
     Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
    questioner
    Member

    Откуда:
    Сообщений: 1865
    Озверин
    PetroNotC Sharp
    Любыю тему в микросервисы переведут)


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



    Этим же персонажам нечего по теме сказать, зато пофлудить ой как хочется. Вот только вопрос на кой им это надо.
    1 июл 19, 16:08    [21918306]     Ответить | Цитировать Сообщить модератору
     Re: Чем асинхронные сервлеты отличаются от Sping WebFlux  [new]
    Андрей Панфилов
    Member

    Откуда: Москва > Melbourne
    Сообщений: 3346
    questioner
    похоже на правду?
    Нет. за tcp/ip полностью отвечает ядро, если со стороны используются вызовы send/recv ("классика"), то концепция такая:
    - send блокируется только тогда, когда приложение хочет отправить данных больше, чем можно записать в send buffer (ядро читает оттуда и отправляет в сеть, т.е. в определенные моменты там могут находиться еще неотправленные данные, или данные, на которые не получено подтверждение)
    - recv блокируется только тогда приложение хочет прочесть данных больше чем сейчас есть в receive buffer (ядро получает данные из сети и складывает их туда), кроме этого через recv еще приходят ошибки таймаута от send (т.е. send для приложения асинхронный, однако о том что данные не доставлены нужно приложению сообщать, вот ядро сообщает в recv)

    и в случае "классики" основная беда в recv, потому что он блокирующий в большинстве случаев и в больших send, поэтому чтобы одновременно обрабатывать много соединений нужно много потоков (условно поток на соединение). В случае же асинхронного I/O много потоков не нужно, потому что там сценарий работы отличается: мы открываем сокетов столько сколько захотим, а у ядра ОС спрашиваем расклад по нашим сокетам, т.е. ответ будет:
    - сюда можно писать
    - отсюда можно читать
    - здесь ошибка

    по факту в примере из https://medium.com/@filia.aleks/microservice-performance-battle-spring-mvc-vs-webflux-80d39fd81bf0 написана какая-то дичь: там на 800 клиентов получается 60 потоков в пике, что для прокси несколько странно, например если сравнивать с "референсной реализацией" прокси-сервера, то там пишут так:
    nginx
    NGINX can run multiple worker processes, each capable of processing a large number of simultaneous connections. You can control the number of worker processes and how they handle connections with the following directives:

    - worker_processes – The number of NGINX worker processes (the default is 1). In most cases, running one worker process per CPU core works well, and we recommend setting this directive to auto to achieve that. There are times when you may want to increase this number, such as when the worker processes have to do a lot of disk I/O.
    - worker_connections – The maximum number of connections that each worker process can handle simultaneously. The default is 512, but most systems have enough resources to support a larger number. The appropriate setting depends on the size of the server and the nature of the traffic, and can be discovered through testing.

    т.е. с конфигурацией по-умолчанию, достаточной чтобы запускаться на каком-то хламе, Сысоев преполагает что один экзекьюшн юнит способен проксировать 512 соединений, если сравнивать с "результатами" полученным для WebFlux видно, что в консерватории что-то не так.
    1 июл 19, 16:08    [21918307]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
    Все форумы / Java Ответить