@scala_ru

Страница 1332 из 1499
Alexander
09.03.2018
05:38:43
Akka http + circe

Sergey
09.03.2018
05:38:45
Нужен Client со своим пулом конекшенов

Alexander
09.03.2018
05:39:22
Какой пул, если он non blocking?

Или ты про пул коннекшнов?

Google
Sergey
09.03.2018
05:41:20
Oleg
09.03.2018
05:58:41
Akka HTTP Host-Level Client-Side API - лучший выбор в этой ситуации ?
host connection pool не то, чтобы прям самый высокоуровневый

Oleg
09.03.2018
06:03:05
А что тогда ?
ну singleRequest самый

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

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

Alexander
09.03.2018
06:10:29
сингл реквестом зато пул переполнить как нефиг

Oleg
09.03.2018
06:12:07
сингл реквестом зато пул переполнить как нефиг
его и HCP точно так же легко переполнитт

Alexander
09.03.2018
06:13:08
его и HCP точно так же легко переполнитт
ну в общем который со стримами - не переполняет, т.к. бэкпрэшится

Oleg
09.03.2018
06:13:49
ну в общем который со стримами - не переполняет, т.к. бэкпрэшится
синл-реквест это уже материализованный единичный HCP стрим, который точно так же бэкпрешится

Alexander
09.03.2018
06:14:38
синл-реквест это уже материализованный единичный HCP стрим, который точно так же бэкпрешится
если ты делаешь сразу много запросов, то там падает с max connection pool бла бла, я переписывал сингл реквесты на стримы, чтобы работало

Oleg
09.03.2018
06:15:14
но на самом деле в последних версиях уже не падает

Google
Alexander
09.03.2018
06:16:35
может мы о разных вещах, но со стримами не падает в моих юз кейсах

Sergey
09.03.2018
06:16:36
Задача подразумевает много медленных GET запросов

Oleg
09.03.2018
06:17:09
может мы о разных вещах, но со стримами не падает в моих юз кейсах
ааа ну тогда прости, я не сразу понял, что весь наш диалог о твоих юзкейзах

Oleg
09.03.2018
06:18:41
т.е. есть и ситуации, когда будет валиться с HCP и тогда нужно переписывать на connection level

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

Вот например, Александр "Никпавлов" Собака, который закопал свои руки в netty

Alexander
09.03.2018
06:20:58
/toxic-morning

Oleg
09.03.2018
06:22:47
toxic friday

Daniel
09.03.2018
06:23:56
/toxic

Oleg
09.03.2018
06:26:02
Задача подразумевает много медленных GET запросов
Вопрос в том, много медленных из большого числа независимых асинхронных кусков проги или есть один кусок, который посылает и агрегирует кучу

Sergey
09.03.2018
06:28:09
Из одного куска

Oleg
09.03.2018
06:28:46
Из одного куска
Ну тогда естественным образом напрашивается HCP

Sergey
09.03.2018
06:28:59
Один кусок отвечает за взаимодействие с HTTP API

Oleg
09.03.2018
06:30:39
Один кусок отвечает за взаимодействие с HTTP API
если у тебя есть сервер, и тебе приходит кучища запросов

то каждый запрос - независимый кусок, только если у тебя там же нет low level akka http server или чего-то другого стримового

если же у тебя условно говоря high level, то твой сервер сам будет ограничивать количество одновременно обрабатываемых запросов, и это ограничение автоматически устанавливает нижнюю границу для настроек host connection pool а

Sergey
09.03.2018
06:34:38
если у тебя есть сервер, и тебе приходит кучища запросов
У меня Клиент, я из него дёргаю много серверов GET запросами (каждый выполняется около 0.8-1.2 сек)

Google
Oleg
09.03.2018
06:37:22
второй

Sergey
09.03.2018
06:37:55
ок спасиба

Oleg
09.03.2018
06:47:27
Короче разница такая - connection level - на кажду материализацию создаётся новый коннекшон, в течение его ты можешь делать что хочешь внутри этого подключения. Ответы приходят согласно протоколу. В случае HTTP 1.0\1.1 они будут приходить в том же порядке, что и запросы. Количество подключений задаёшь сам делая там какие-то суб-стримы или flatMap ы внутри своего стрима. host connection pool - на уровне actor system в http плагине есть пул, который используется каждый раз, где-бы ты не материализовал пул. ты можешь запустить много запросов, количество одновременных не выростет больше нужного. Ответы приходят в произвольном порядке, чтобы ты потом мог понять на что идёт запрос, можешь прокинуть вместе с запросом любой объект, он придёт с ответом в качестве метки. Запросы, ждущие подключения, выстраиваются в буфер, когда он переполняется стрим начинает бэкпрешшить. Очевидно, если бэкпрешшить некуда, кидает эксепшоны. single request - возвращает простую фьючу, это просто единичный материализованный стрим из host connection pool. Бэкпрешшить некуда, поэтому если запросов отправлено слишком много - падает

Alexander
09.03.2018
06:48:43
так если к каждому серверу 1 запрос, то можно и singleRequest

Oleg
09.03.2018
06:49:09
да, host connection pool - один pool на domain name/protocol

Alexander
09.03.2018
06:51:05
отличный ликбез, Олег!

Sergey
09.03.2018
06:58:07
да, host connection pool - один pool на domain name/protocol
Опа, всмысле там нельзя сделать чтобы запросы на разные сервера обрабатывались на одном пуле ?

Oleg
09.03.2018
06:59:42
Опа, всмысле там нельзя сделать чтобы запросы на разные сервера обрабатывались на одном пуле ?
т.е. ты хочешь послать запрос на google.com, но хочешь для этого использовать уже открытое соединение для yandex.ru ? Боюсь, есть сложности с этим

Sergey
09.03.2018
07:00:22
)) я понял Похоже нужно смотреть в сторону singleRequest

Oleg
09.03.2018
07:01:17
host connection pool можешь просто открыть несколько штук для всех серверов, что у тебя есть

https://doc.akka.io/docs/akka/current/stream/stream-substream.html#groupby

Sergey
09.03.2018
07:04:11
Oleg
09.03.2018
07:04:32
HTTP 2.0 держит

в этом, в общем-то и весь замут

https://en.wikipedia.org/wiki/HTTP_persistent_connection

Sergey
09.03.2018
07:08:34
Спасибо Олег, вобщем буду думать singleRequest VS host connection pool per serverAPI

singleRequest можно же выполнить прямо из актора ?

Alexander
09.03.2018
08:15:57
вполне, получишь future

только надо убедиться, что актор - не для чсв

Google
Alexander
09.03.2018
08:16:20
ой

Oleg
09.03.2018
08:19:00
только надо убедиться, что актор - не для чсв
кажется, наши интеграционные тесты показывали, что с ЧСВ-акторами тоже работает

Alexander
09.03.2018
08:20:37
ЧСВTestKit?

Александр
09.03.2018
09:57:07
Sergey
09.03.2018
10:15:02
а большая планируется нагрузка?
не очень, это бот для трейдинга на криптобиржах ) RPS ограничен со стороны биржи (1 запрос в сек) 10-20 бирж

только надо убедиться, что актор - не для чсв
А ха ха ) Те несколько проектов на акторах которые я видел, там либо акторы несильно нужны, либо их криво используют.

Alexander
09.03.2018
10:18:39
Alex
09.03.2018
10:21:34
Или location transparency

Admin
ERROR: S client not available

Alex
09.03.2018
10:22:11
Mutable state - имхо недостаточная причина юзать акторы

Alexander
09.03.2018
10:23:35
я знал, что придёт Олег, и всё ... улучшит

Alex
09.03.2018
10:23:43
Почему ?
В общем случае есть другие средства, которые позволяют работать с ним

Другие, более простые средства

Andrey
09.03.2018
10:24:23
Всегда есть другие средства

Другие, более простые средства
Опять адепт го пришел?)

Alex
09.03.2018
10:24:59
Ты с кем то меня спутал ?

Sergey
09.03.2018
10:25:07
Google
Alex
09.03.2018
10:25:29
Какие ?
Really? ?

Alexander
09.03.2018
10:25:32
Mutable state - имхо недостаточная причина юзать акторы
если стэйт атомарен - может быть, а если размазан по акторам, но вполне :)

Oleg
09.03.2018
10:26:56
Behaviors.defer( ctx => @volatile var become = MVar(new AtomicReference(2)) ... )

Alex
09.03.2018
10:27:00
если стэйт атомарен - может быть, а если размазан по акторам, но вполне :)
А какую проблему могут решить акторы в этом случае лучше чем AtomicRef например?

Alexander
09.03.2018
10:28:14
А какую проблему могут решить акторы в этом случае лучше чем AtomicRef например?
лучше чем N AtomicRef в смысле? Ну они могут динамически создаваться и т.п.

ща Олег правду скажет всю

Oleg
09.03.2018
10:30:37
А какую проблему могут решить акторы в этом случае лучше чем AtomicRef например?
ну ты не можешь ставить в очередь обработки атомиков, если состояние достаточно волатильно, твои CAS внезапно начинают фэйлиться в 99% случаев...

Александр
09.03.2018
10:31:09
не очень, это бот для трейдинга на криптобиржах ) RPS ограничен со стороны биржи (1 запрос в сек) 10-20 бирж
один мой любимый гений актьрных архитектур, сделал отдельный пул для внешних http ресурсов и запускает там 1 актор на 1 реквест, используя синхронный http клиент, на не больших нагрузках работает

Александр
09.03.2018
10:32:51
ну значит это best practice

Oleg
09.03.2018
10:35:46
Тогда pessimistic lock в помощь
это который лочит тред?

Alex
09.03.2018
10:36:10
Как и актор?

Oleg
09.03.2018
10:36:16
актор и есть pessimistic lock

актор не лочит тред между сообщениями

Alex
09.03.2018
10:37:06
А про "между" я и не говорил

Oleg
09.03.2018
10:37:13
т.е. я не фанат акторов, но опускать их до атомиков...

хоть бы мвары вспомнил

А про "между" я и не говорил
но тебя именно между и интересует

Александр
09.03.2018
10:37:39
ботлнек детектед
есть гипотеза что сервис должен быстро отвечать и на небольших нагрузках 300-500 запросов в секунду в пик нет проблем

Страница 1332 из 1499