|
акка или кафка?
|
|||
---|---|---|---|
#18+
такая задача. есть приложенька. как обычно слева юзеры посередке бэк справа постгрес. логика приложения проста - юзер приходит с данными, бэк по ним что-то там считает-собирает с разных источников - выдает ответ юзеру и параллельно сохраняет результат в базу если вдруг когда-нибудь юзер захочет эти данные пересмотреть. с некоторых пор у приложения появились затыки по производительности. а именно - по связке база-бэк. база дохнет и быстро. ну много данных много запросов много инсертов. при этом сами бэк-приложения бодрячком. так как в большинстве пользвоательских сценариев в сохраненные коллекции данных юзеры ходят редко я особо не вижу проблемы например, связку бэк-база сделать асинхронной. типа - юзер пришел с данными, бэк их принял в обработку, сформировал ответ - выплюнул юзеру а потом когда-нибудь позже сбросил результат в базу. можно даже со значительным лагом. итого, как я вижу асинхронку тут? мы сформировали ответ, и один экземпляр бросили клиенту, второй экземпляр - в очередь. перед базой стоит что-то что эту очередь планомерно выгребает и складывает результаты в базу. и здесь опции указанные выше - мы юзаем кафку. там ясно понятно работает. мониторится замечательно. но.. как то новый инструмент. либо вариант два - мы юзаем акку (приложение на плее там акка уже под капотом) но акка это не совсем очередь все же на мой взгляд. итого я пока имею по одному плюсу для каждого подхода и по одному минусу: +акка: она уже есть, минимум накладных расходов на рефакторинг. -акка: без понятия как мониторить очередь или че там, без понятия как ее тротлить если база дохнет. без понятия как сбросить очередь куда-нибудь если сервис в ребут ушел (данные не особо критичные, но терять их не очнеь желательно все-равно) +кафка: полноценная очередь, все смотрится мониторится, кучи настроек, ничего не теряется вроде как. -кафка: надо тащить новый инструмент, надо делать рефак глубже. а на выходе все ее плюшки в противовес акки может и не понадобятся вовсе :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 14:03 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
Сколько инсертов в минуту? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 15:00 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
mayton Сколько инсертов в минуту? 600 в секунду и всё заваливается. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 15:28 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
Zzz79 andreykaT,у нас это реализовано через отельный сервис в микросервистой архитектуре сервис 1- общается с клиентом + бизнес логика сервис 2 - общается с сервис 1 и бд естественно сообщения между сервис1 и сервис 2 происходят по кафке ,которую ты можешь настроить так чтобы твоя база не падала например в пиковое время это всё равботает до тех пор пока тебе клиенту скажем не надо вернуть айдиху сущности которую назначает база. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 15:29 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
Zzz79 andreykaT пропущено... это всё равботает до тех пор пока тебе клиенту скажем не надо вернуть айдиху сущности которую назначает база. а зачем клиенту в реал тайме id сущности? ты же сам сказал что сервис твой обрабатывает запрос - отдает клиенту и пишет в бд а потом там когда то надо если выдаст запись ну и в чем проблема реализовать две очереди? одна на запись ,другая на выдачу? можно вообще два сервиса поднять запись/выдача - будут работать раздельно клиенту возможно нужен айди чтоб создать новую сущность которая имеет связь с ранее созданной и сохраненной. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 16:48 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
Zzz79 andreykaT клиенту возможно нужен айди чтоб создать новую сущность которая имеет связь с ранее созданной и сохраненной. ну так в чем проблема кидай в кэш и в бд пиши в твоей схеме айди не будте получен пока его не отдаст бд. что в кэш кидать будем? сущность без айди по которому к ней можно было бы обратиться? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 16:56 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
andreykaT mayton Сколько инсертов в минуту? 600 в секунду и всё заваливается. А там commit нужен через каждую вставку? 600 в секунду это не очень много. На tpc тестах 2010 года например oracle показывал 250 000 в секунду. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 18:16 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
ну я хз. у меня в реальном трафике ж еще и селекты. селекты плюс инсерты инсерты где то треть. как обычно но там и парой тысяч не пахнет. железка неплохая. а ты про 250к говоришь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 20:19 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
Zzz79 andreykaT,тоода включай батчинг 600 запросов разбивай по 40 грубо говоря вместо 600 инсертов получишь 15 какой батчинг? я не с файлика данные копирую. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 20:20 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
Андрей. Ради Христа. Если ты просто хочешь внедрять, мать ее кафку или Акку - внедряй! Но не надо подводить под это основание бедный Postgres который ни в чем не виноват. Я тебя прошу ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 21:51 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
mayton andreykaT пропущено... 600 в секунду и всё заваливается. А там commit нужен через каждую вставку? 600 в секунду это не очень много. На tpc тестах 2010 года например oracle показывал 250 000 в секунду. А подробности про 250000 в секунду можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 23:03 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
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.07.2020, 23:33 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
SpringMan mayton пропущено... А там commit нужен через каждую вставку? 600 в секунду это не очень много. На tpc тестах 2010 года например oracle показывал 250 000 в секунду. А подробности про 250000 в секунду можно? Раньше я находил инфу о бенчмарках вот на этом ресурсе http://www.tpc.org/ К сожалению он сейчас в отключке и судьба его мне не известна. Собственно чорт с ним. Мы можем найти любой другой бенчмарк транзакций в секунду для трехзвенок где 2-3 звенья будут Java-Postgres или Java-ЛюбаяDBMS просто для сравнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 23:34 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
Что там за железо чтоб тащить 250ксек? Майтон я все понимаю за постгрес но его потенциал роста вверх в моем случае исчерпан. Вот и чешу репу чтоб и два горошка скушать и на стул сесть ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 23:41 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
С учетом, что автору нафиг не нужна транзакционность (он ее и так уже похерил), то ожидать пару десятков тысяч инсертов в секунду - нормально практически для любой БД. Разумеется blob'ы и записи >килобайта в расчет не берем ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 23:43 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
Sergunka SpringMan пропущено... А подробности про 250000 в секунду можно? Кафка свободно держит, правда туда бабла немеряно было влито. Кластер стоял на сорока серверах. Ну вот я могу поверить про кластер кафки или какой-нить касандры, которые держат 250000 в секунду. Вот с ораклом уже верится сложнее. В tpc бенчмарках видел цифры этих порядков. Но как я понимаю, там разговор про такое количество запросов в минуту и на серверах с 100+ ядер. Судя по 600 запросов в секунду, у andreykaT обычный сервак в районе SSD + 16 ядер ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 23:46 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
p.s. это, разумеется, если делать без всяких кафок, акк и прочих ненужных извращений ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 23:48 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
andreykaT, я говорю сейчас своё ИМХО основываясь на твоём первом эмоциональном посте в котором нет практически ничего об архитектуре системы. Что за операции ты делаешь. Какой % select/dml там работает? Было ли кеширование? Были ли оптимизации? Что говорят статистики по базе? Какой самый горячий запрос? Хочешь кафку - да бери кафку. Ты просто сделаешь другую систему с другими свойствами где будут возможно другие требования по ACID. Более ослабленные наподобие CQRS. Без транзакций вообще. Или основываясь на слабом предположении о eventual consistency. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 23:49 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
mayton где будут возможно другие требования по ACID Где там ACID ? Если топик стартер собирался заказчику говорить, что все хорошо, а потом ассинхронно писать в БД. ACID даже и не пахнет. Я уж не говорю про "данные не особо критичные, но терять их не очнеь желательно все-равно" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2020, 23:54 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
mayton Собственно чорт с ним. Мы можем найти любой другой бенчмарк транзакций в секунду для трехзвенок где 2-3 звенья будут Java-Postgres или Java-ЛюбаяDBMS просто для сравнения. Вот для postgres-а нашел ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 00:00 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
SpringMan Sergunka пропущено... Кафка свободно держит, правда туда бабла немеряно было влито. Кластер стоял на сорока серверах. Ну вот я могу поверить про кластер кафки или какой-нить касандры, которые держат 250000 в секунду. Вот с ораклом уже верится сложнее. В tpc бенчмарках видел цифры этих порядков. Но как я понимаю, там разговор про такое количество запросов в минуту и на серверах с 100+ ядер. Судя по 600 запросов в секунду, у andreykaT обычный сервак в районе SSD + 16 ядер На самом деле кассандра столько не потянет так как сложно угадать пиковую нагрузку там может обычно в разы пик пойти. Т.е. архитектура обычно (покрайне мере у нас на платформе) буфер имплементирован на кафке и за кафкой идет кассандра. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 00:09 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
SpringMan mayton Собственно чорт с ним. Мы можем найти любой другой бенчмарк транзакций в секунду для трехзвенок где 2-3 звенья будут Java-Postgres или Java-ЛюбаяDBMS просто для сравнения. Вот для postgres-а нашел Примерно 450 000 tpm. На графике. Это транзакций в минуту. Значит в секунду это будет 450 000 / 60 = 7500. Но это достаточно эксклюзивная конфигурация. Там всё подстроено для симуляции этого теста. На реальном приложении будет помедленнее. Особенно с неидеальной сетью. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 00:16 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev С учетом, что автору нафиг не нужна транзакционность (он ее и так уже похерил), то ожидать пару десятков тысяч инсертов в секунду - нормально практически для любой БД. Разумеется blob'ы и записи >килобайта в расчет не берем ))) я попробую снять стату с базы. у меня в среднем летит 300 рест запросов что порождает 600-900 инсертов и какое то количество селектов (минимум 300). далее, не понял, при чем тут транзакционность? и откуда выводы что я ее похерил? атомарные операции (по логике атомарные) у меня выполняются внутри транзакций. это вроде как очевидная вещь о которой говорить и не следует. по поводу конфиги. у меня бд не ссд (я хз что еще оказывается не ссд бывает но так девопсы сказали) 24 ядра хз сколько оперативки. при озвучанных выше значениях начинает просто каждый последующий инсерт вставляться все дольше и дольше и так до 5-ти минут на простой инсерт! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 10:30 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev mayton где будут возможно другие требования по ACID Где там ACID ? Если топик стартер собирался заказчику говорить, что все хорошо, а потом ассинхронно писать в БД. ACID даже и не пахнет. Я уж не говорю про "данные не особо критичные, но терять их не очнеь желательно все-равно" то что в кавычках - поясняю. если пропадет 1% данных - то это не будет страшно. если пропадет 50% данных - то это плохо. асинхронно писать - потому что я не вижу особо выхода. либо вертикально скейлить бд, либо думать всякую фигню с репликами. либо переписывать код. всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 10:33 |
|
акка или кафка?
|
|||
---|---|---|---|
#18+
Sergunka SpringMan пропущено... Ну вот я могу поверить про кластер кафки или какой-нить касандры, которые держат 250000 в секунду. Вот с ораклом уже верится сложнее. В tpc бенчмарках видел цифры этих порядков. Но как я понимаю, там разговор про такое количество запросов в минуту и на серверах с 100+ ядер. Судя по 600 запросов в секунду, у andreykaT обычный сервак в районе SSD + 16 ядер На самом деле кассандра столько не потянет так как сложно угадать пиковую нагрузку там может обычно в разы пик пойти. Т.е. архитектура обычно (покрайне мере у нас на платформе) буфер имплементирован на кафке и за кафкой идет кассандра. ну я по-сути хочу что-то такое же. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 10:39 |
|
|
start [/forum/topic.php?fid=59&msg=39978530&tid=2120741]: |
0ms |
get settings: |
23ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
464ms |
get tp. blocked users: |
1ms |
others: | 295ms |
total: | 857ms |
0 / 0 |