
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

Sergey
09.03.2018
06:01:34

Oleg
09.03.2018
06:03:05
hcp ты хреначишь запросы в одном порядке, получаешь в другом, сам их матчишь по айдишнику рядом в тюпле, так себе хайлевел
стримы эти выбрасывать нельзя, нужно, чтобы аккуратно зашатдаунены были

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

Oleg
09.03.2018
06:12:07

Alexander
09.03.2018
06:13:08

Oleg
09.03.2018
06:13:49

Alexander
09.03.2018
06:14:38

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

Alexander
09.03.2018
06:18:01

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

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

Oleg
09.03.2018
06:28:46

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

Oleg
09.03.2018
06:30:39
то каждый запрос - независимый кусок, только если у тебя там же нет low level akka http server или чего-то другого стримового
если же у тебя условно говоря high level, то твой сервер сам будет ограничивать количество одновременно обрабатываемых запросов, и это ограничение автоматически устанавливает нижнюю границу для настроек host connection pool а

Sergey
09.03.2018
06:34:38

Oleg
09.03.2018
06:36:09

Sergey
09.03.2018
06:36:54

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

Oleg
09.03.2018
06:59:42

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?

Nick
09.03.2018
08:24:42

Александр
09.03.2018
09:57:07

Sergey
09.03.2018
10:15:02

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 - имхо недостаточная причина юзать акторы

Oleg
09.03.2018
10:23:04

Sergey
09.03.2018
10:23:09

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

Alexander
09.03.2018
10:25:32

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

Alex
09.03.2018
10:27:00

Alexander
09.03.2018
10:28:14
ща Олег правду скажет всю

Oleg
09.03.2018
10:30:37

Александр
09.03.2018
10:31:09

Oleg
09.03.2018
10:32:13

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

Sergey
09.03.2018
10:34:47

Alex
09.03.2018
10:35:02

Oleg
09.03.2018
10:35:46

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 запросов в секунду в пик нет проблем