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

Откуда: Finland
Сообщений: 2959
такая задача. есть приложенька.
как обычно слева юзеры посередке бэк справа постгрес.
логика приложения проста - юзер приходит с данными, бэк по ним что-то там считает-собирает с разных источников - выдает ответ юзеру и параллельно сохраняет результат в базу если вдруг когда-нибудь юзер захочет эти данные пересмотреть.

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

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

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

и здесь опции указанные выше - мы юзаем кафку. там ясно понятно работает. мониторится замечательно. но.. как то новый инструмент.
либо вариант два - мы юзаем акку (приложение на плее там акка уже под капотом) но акка это не совсем очередь все же на мой взгляд.

итого я пока имею по одному плюсу для каждого подхода и по одному минусу:
+акка: она уже есть, минимум накладных расходов на рефакторинг.
-акка: без понятия как мониторить очередь или че там, без понятия как ее тротлить если база дохнет. без понятия как сбросить очередь куда-нибудь если сервис в ребут ушел (данные не особо критичные, но терять их не очнеь желательно все-равно)
+кафка: полноценная очередь, все смотрится мониторится, кучи настроек, ничего не теряется вроде как.
-кафка: надо тащить новый инструмент, надо делать рефак глубже. а на выходе все ее плюшки в противовес акки может и не понадобятся вовсе :)
11 июл 20, 14:03    [22165669]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
Сколько инсертов в минуту?
11 июл 20, 15:00    [22165690]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
andreykaT,у нас это реализовано через отельный сервис в микросервистой архитектуре

сервис 1- общается с клиентом + бизнес логика

сервис 2 - общается с сервис 1 и бд

естественно сообщения между сервис1 и сервис 2 происходят по кафке ,которую ты можешь настроить так чтобы твоя база не падала например в пиковое время
11 июл 20, 15:20    [22165700]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2959
mayton
Сколько инсертов в минуту?

600 в секунду и всё заваливается.
11 июл 20, 15:28    [22165706]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2959
Zzz79
andreykaT,у нас это реализовано через отельный сервис в микросервистой архитектуре

сервис 1- общается с клиентом + бизнес логика

сервис 2 - общается с сервис 1 и бд

естественно сообщения между сервис1 и сервис 2 происходят по кафке ,которую ты можешь настроить так чтобы твоя база не падала например в пиковое время

это всё равботает до тех пор пока тебе клиенту скажем не надо вернуть айдиху сущности которую назначает база.
11 июл 20, 15:29    [22165707]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
andreykaT
Zzz79
andreykaT,у нас это реализовано через отельный сервис в микросервистой архитектуре

сервис 1- общается с клиентом + бизнес логика

сервис 2 - общается с сервис 1 и бд

естественно сообщения между сервис1 и сервис 2 происходят по кафке ,которую ты можешь настроить так чтобы твоя база не падала например в пиковое время

это всё равботает до тех пор пока тебе клиенту скажем не надо вернуть айдиху сущности которую назначает база.

а зачем клиенту в реал тайме id сущности? ты же сам сказал что сервис твой обрабатывает запрос - отдает клиенту и пишет в бд
а потом там когда то надо если выдаст запись
ну и в чем проблема реализовать две очереди? одна на запись ,другая на выдачу? можно вообще два сервиса поднять запись/выдача - будут работать раздельно
11 июл 20, 16:30    [22165726]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
ну или вот так- запрос - обработка - кладем в кеш - отправляем в очередь- запись в бд
настроить таким образом чтобы размер кэша был равен размеру очереди
кэш -забит- отдал в очередь -записал в кэш
на выдачу тогда не будет проблем прочекат в кэше id -нет,дернет бдшку
11 июл 20, 16:38    [22165727]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2959
Zzz79
andreykaT
пропущено...

это всё равботает до тех пор пока тебе клиенту скажем не надо вернуть айдиху сущности которую назначает база.

а зачем клиенту в реал тайме id сущности? ты же сам сказал что сервис твой обрабатывает запрос - отдает клиенту и пишет в бд
а потом там когда то надо если выдаст запись
ну и в чем проблема реализовать две очереди? одна на запись ,другая на выдачу? можно вообще два сервиса поднять запись/выдача - будут работать раздельно

клиенту возможно нужен айди чтоб создать новую сущность которая имеет связь с ранее созданной и сохраненной.
11 июл 20, 16:48    [22165729]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
andreykaT

клиенту возможно нужен айди чтоб создать новую сущность которая имеет связь с ранее созданной и сохраненной.

ну так в чем проблема кидай в кэш и в бд пиши
11 июл 20, 16:50    [22165730]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2959
Zzz79
andreykaT

клиенту возможно нужен айди чтоб создать новую сущность которая имеет связь с ранее созданной и сохраненной.

ну так в чем проблема кидай в кэш и в бд пиши

в твоей схеме айди не будте получен пока его не отдаст бд. что в кэш кидать будем? сущность без айди по которому к ней можно было бы обратиться?
11 июл 20, 16:56    [22165733]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
andreykaT,тоода включай батчинг

600 запросов разбивай по 40 грубо говоря вместо 600 инсертов получишь 15
11 июл 20, 17:03    [22165737]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
если у тебя хибер там дел на 10 минут
11 июл 20, 17:07    [22165741]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
andreykaT
mayton
Сколько инсертов в минуту?

600 в секунду и всё заваливается.

А там commit нужен через каждую вставку?

600 в секунду это не очень много. На tpc тестах 2010 года например oracle показывал 250 000 в секунду.
11 июл 20, 18:16    [22165769]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2959
ну я хз. у меня в реальном трафике ж еще и селекты. селекты плюс инсерты инсерты где то треть. как обычно но там и парой тысяч не пахнет. железка неплохая. а ты про 250к говоришь.
11 июл 20, 20:19    [22165808]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
andreykaT
Member

Откуда: Finland
Сообщений: 2959
Zzz79
andreykaT,тоода включай батчинг

600 запросов разбивай по 40 грубо говоря вместо 600 инсертов получишь 15

какой батчинг? я не с файлика данные копирую.
11 июл 20, 20:20    [22165809]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
andreykaT
Zzz79
andreykaT,тоода включай батчинг

600 запросов разбивай по 40 грубо говоря вместо 600 инсертов получишь 15

какой батчинг? я не с файлика данные копирую.

почитай хибер батчинг
11 июл 20, 21:28    [22165817]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
andreykaT
Zzz79
andreykaT,тоода включай батчинг

600 запросов разбивай по 40 грубо говоря вместо 600 инсертов получишь 15

какой батчинг? я не с файлика данные копирую.

https://www.baeldung.com/jpa-hibernate-batch-insert-update
твое решение в два клика)

Сообщение было отредактировано: 11 июл 20, 21:45
11 июл 20, 21:42    [22165825]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
андреич с тебя простава) я полдня своей жизни потратил на решение твоего вопроса)
11 июл 20, 21:47    [22165830]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
Андрей. Ради Христа.

Если ты просто хочешь внедрять, мать ее кафку или Акку - внедряй!

Но не надо подводить под это основание бедный Postgres который ни в чем не виноват.

Я тебя прошу
11 июл 20, 21:51    [22165833]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
spring.jpa.properties.hibernate.jdbc.batch_size=40
11 июл 20, 21:52    [22165837]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
все решение в одной строчке конфига
11 июл 20, 21:52    [22165839]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Zzz79
Member

Откуда:
Сообщений: 583
mayton
Андрей. Ради Христа.

Если ты просто хочешь внедрять, мать ее кафку или Акку - внедряй!

Но не надо подводить под это основание бедный Postgres который ни в чем не виноват.

Я тебя прошу

постгрес тут не причем явно

андреичу нужно включить батч если он использует хибер
если что то другое посмотреть как устоен батч внутри хебера и сделать у себя тоже самое)

но вообще попахивает антипатераном тут

если клиент сделал активность -ему твой id сейчас не нужен,а если нужен то архитектура приложения кривая

тоесть зачем клиенту в реал тайме твой id из базы
выглядит это как нарушение принципов архитектуры
11 июл 20, 21:59    [22165842]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
SpringMan
Member

Откуда:
Сообщений: 207
mayton
andreykaT
пропущено...

600 в секунду и всё заваливается.

А там commit нужен через каждую вставку?

600 в секунду это не очень много. На tpc тестах 2010 года например oracle показывал 250 000 в секунду.

А подробности про 250000 в секунду можно?
11 июл 20, 23:03    [22165865]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 2282
SpringMan
mayton
пропущено...

А там commit нужен через каждую вставку?

600 в секунду это не очень много. На tpc тестах 2010 года например oracle показывал 250 000 в секунду.

А подробности про 250000 в секунду можно?


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

Вот что пишет Амазон по этому поводу

автор
That's a three broker cluster with 1-2 CPU (depending on the cloud) and 4GB RAM per instance. On Amazon Web Services, this plan handled about 135,000 messages per second while the same plan on Google Cloud Platform and Azure handled around 70,000.


У меня есть даже статья в блоге как мы делали нагрузку
https://vyatkins.wordpress.com/2016/07/30/velociraptor/ к слову сказать статья довольно древняя.
11 июл 20, 23:33    [22165870]     Ответить | Цитировать Сообщить модератору
 Re: акка или кафка?  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
SpringMan
mayton
пропущено...

А там commit нужен через каждую вставку?

600 в секунду это не очень много. На tpc тестах 2010 года например oracle показывал 250 000 в секунду.

А подробности про 250000 в секунду можно?

Раньше я находил инфу о бенчмарках вот на этом ресурсе http://www.tpc.org/

К сожалению он сейчас в отключке и судьба его мне не известна.

Собственно чорт с ним. Мы можем найти любой другой бенчмарк транзакций в секунду
для трехзвенок где 2-3 звенья будут Java-Postgres или Java-ЛюбаяDBMS просто для сравнения.
11 июл 20, 23:34    [22165871]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9   вперед  Ctrl      все
Все форумы / Java Ответить