powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache Kafka в структуре клиент - сервер
25 сообщений из 32, страница 1 из 2
Apache Kafka в структуре клиент - сервер
    #39831206
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет! Подскажите пожалуйста как правильно встроить кафку в структуру клиент - сервер?
Описываю ситуацию. Есть классическая трехзвенка браузер + томкат + бд. Запросы приходят в томкат, томкат получив данные из запроса отправляет запрос в бд, полученную информацию отправляет браузеру. Мне нужно сделать горизонтальное масштабирование слоя бд. Я хочу чтобы томкат отправлял запросы в кафку и получал ответы из кафки, как подружить кафку с бд знаю. Есть ли какие либо стандарты на это счёт или нужно изобретать велосипед?
У меня есть ряд вопросов/сомнений на счёт правильности моих мыслей. Опишу их ниже.
1. Пришедший запрос я отправляю в топик "in"
2. Подписчик забирает запрос из топика "in" и обрабатывает в бд, результат отправляет в топик "out"
Дальше вопросов больше чем ответов :) В томкате я должен подписаться на топик "out" и ждать своих данных, вот тут вопрос создавать подписчика с нуля или брать из пула. Когда я получаю сообщения из общего потока я должен выбрать только свои. Вероятно будут запросы которые отвалились пока ждали ответа и их ответы будут мёртвым грузом лежать какое то время в очереди, а это лишняя нагрузка на их обработку. Я вроде как чувствую, что думаю в правильном направлении, но как реализовать детали пока не знаю, подскажите пожалуйста :)
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831231
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Участвовал я как то в проекте в котором архитектор начитался что интеграцию между приложениями нужно делать только с помощью messaging (передачи сообщений). Видимо потому что книгу "Enterprise Integration Patterns" он прочитал только обложку. Ну а далее мы извращались все синхронные вызовы делали с помощь передачи сообщений. Туда и обратно с блокировками и разгребаниями кому какое сообщение пришло.

По сути, если у тебя синхронный вызов (RPC) и клиенту всегда нужен ответ, то и делай вызов RPC. Обмен сообщениями это когда ты отправил и забыл.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831240
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0,

Это можно конечно делать, мы сейчас так и делаем :) У нас пока 1 кластер бд и всё просто, но "завтра" планируется 1000 кластеров бд, и мне придётся описывать 1000 пулов соединений в томкате, наверное это ничего страшного но мне кажется что это не правильно, почему не знаю но чувствую :)
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831243
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarinvas0,

Это можно конечно делать, мы сейчас так и делаем :) У нас пока 1 кластер бд и всё просто, но "завтра" планируется 1000 кластеров бд, и мне придётся описывать 1000 пулов соединений в томкате, наверное это ничего страшного но мне кажется что это не правильно, почему не знаю но чувствую :)

Сережа, Брин! Наконец то ты понял, что только на sql.ru тебе могут помочь!
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831245
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандарт, думаю, есть - это Spring Boot Stream - все, что нужно - поднять Кафку и подключить к томкату в виде спринг либы Stream
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831246
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В правильной архитектуре у тебя будет балансировщик нагрузки, который раскидывает реквесты на N инстансов томката, каждый из которых смотрит на определенную базу. Как уже правильно тебе сказали, в модели запрос - ответ, нету места мессадж пассингу. Kafka она для интеграции приложений, а не введения асинхронности.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831248
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831251
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarin, если серьезно, надо хотя бы в двух словах подбронее описать бизнес задачу...а то подозрительно выглядит.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831253
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MandarinМне нужно сделать горизонтальное масштабирование слоя бд. Я хочу чтобы томкат отправлял запросы в кафку1. Где показания что нужно мсштабировать?
2. Метод имени "кафка" не обсуждается?
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831269
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Все очень просто. Есть OLTP система. Электронный документооборот 100500 документов разных и столько же пользователей, крутить всё это на одном сервере рано или поздно будет не возможно, соответственно надо делить данные по разным БД. Каждый коннект, после авторизации знает где лежат его данные, надо пойти в нужную бд и взять их. На уровне балансировщика, например haproxy, это сделать нельзя потому как haproxy не знает куда отправить коннект, а слой томкатов уже знает. В принципе ничего страшного нет в том что в томкате будет много пулов соединений, только режет глаз эта "не эстетическая картина" с JDBC пулами :)
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831273
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никВ правильной архитектуре у тебя будет балансировщик нагрузки, который раскидывает реквесты на N инстансов томката, каждый из которых смотрит на определенную базу. Как уже правильно тебе сказали, в модели запрос - ответ, нету места мессадж пассингу. Kafka она для интеграции приложений, а не введения асинхронности.

Вот отличная идея!!! Спасибо огромное!!!
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831278
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarinvas0,

Это можно конечно делать, мы сейчас так и делаем :) У нас пока 1 кластер бд и всё просто, но "завтра" планируется 1000 кластеров бд, и мне придётся описывать 1000 пулов соединений в томкате, наверное это ничего страшного но мне кажется что это не правильно, почему не знаю но чувствую :)
То что ты описал похоже на такой подход:
1. Появляется request, один из потоков начинает его обработку.
2. Добавляем запрос в очередь кафки (in) и приостанавливаем поток пока не получим ответ из очереди (out).
3. Получив ответ востанавливаем выполнение потока и отправляем результат клиенту.
По сути это синхронный RPC вызов, но не простой, а с дополнительным бесплатным гемороем.

Мы используем кафку, но у нас просто. Приходит запрос кидаем в очередь и все. Далее когда документ пройдет обработку клиент его увидит. Никакой обратной очереди у нас нет. Возможно тут можно добавлять какой то реактивный подход по оповещению клиентов. В целом перестроить архитектуру приложения на асинхронную обработку.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831287
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MandarinНа уровне балансировщика, например haproxy, это сделать нельзя потому как haproxy не знает куда отправить коннекткак же он балансирует если не знает. Странно. Его обязанность раскидывать запросы.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831291
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarin,
Тебе по ТЗ не нужна кафка
авторАлгоритмы планирования

Множество алгоритмов планирования используются балансировщиками нагрузки, чтобы определить, какому серверу послать запрос. Простые алгоритмы включают в себя случайный выбор или круговой системе. Более сложные подсистемы балансировки нагрузки могут принимать во внимание дополнительные факторы, такие как сервера сообщили нагрузки, меньшее Время отклика, вверх/вниз статус (определяется путём мониторинга опрос какой-то), количество активных соединений, географическое положение, возможности, или сколько трафика он недавно был назначен.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831294
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpMandarinкуда отправить коннект jdbc connect?
Балансровщик стоит до веб сервера. И имеет дело а http адресами серверов или томкатов
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831313
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MandarinНа уровне балансировщика, например haproxy, это сделать нельзя потому как haproxy не знает куда отправить коннект, а слой томкатов уже знает.

врятли пользователь будет иметь доступ к абсолютно всем документам. скорее всего он работает в контексте какого либо аккаунта. вот данные каждого аккаунта держите в рамках одной БД.
При авторизации указывайте с каким шардом (БД) работать:
- прям урлом, допустим логинились на login.my-company.com, после успешного логина он вернет для вашего SPA с каким шардом работать - api-shXX.my-company.com.
- кодируйте в токен/отдельный header запроса в какой шард перенапрвлять запрос, логика по определению шарда по token/хедер уже будет находится в хапрокси.

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

ИМХО - я бы выбрал один из этих вариантов.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831335
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavel_nvсинхронизацию данныхможно штатной репликацией в каждой бд из коробки. Тогда кафка лишнее)
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831336
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavel_nvПри авторизации указывайте с каким шардом (БД) работать:ngnix умеет автоматом все читающие запросы на olap. Пишущие на oltp.
Как вариант.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831344
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharppavel_nvсинхронизацию данныхможно штатной репликацией в каждой бд из коробки. Тогда кафка лишнее)


PetroNotC Sharppavel_nvПри авторизации указывайте с каким шардом (БД) работать:

ngnix умеет автоматом все читающие запросы на olap. Пишущие на oltp.
Как вариант.


помоему это про репликацию (читаем с реплик, а пишем в мастер, и данные совпадают во всех БД). Я же про шардирование (когда схема данных в шардах одна, а данные разные, а в логин-БД и схема отдельная). Ну и ничего не мешает в рамках каждого шарда сделать репликацию с чтением с реплик.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831348
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavel_nv,
Да. Вы правы.
Мне ближе масштабирование репликацией. Вам шардирование.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831351
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

мне ближе без всего этого) чем проще - тем лучше)

у шардирования есть сомнительный плюс - люди делают шарды такого размера, что БД каждого шарда помещается в оперативной памяти. И можно писать в SQL хоть какой говнокод, и БД тебе почти все простит)
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831352
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите примерно скорость обработки документа? Это секунды, час, день?



На самом деле Вам скорее лучше подойдет RabbitMQ с их концепцией топик эксченжа + там проще решается рестарт если что
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831371
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavel_nvмне ближе без всего этого) чем проще - тем лучше)я - за. И без кафки. Будет ngnix и проще некуда. Правда админ нужен обязательно.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831397
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а че там база рдбмс дохнет чтоле? тс, обычно поднимают несколько инстансов своего стейтлесс приложения, перед ним ставят балансёр да хотя бы тем же раундробином раскидывают запросы между ними, а они ходят в базу. если у тебя на уровне базы дохнет ну сделай несколько баз. правда, с рдбмс я вот хз насколько это эффективно. но с докуентными базами вообще как два пальца об асфальт. добавляешь в кластер их и всё хорошо если затык по базе. если затык по приложению - то за балансером добавляешь своих бекендиков.

а кафка она для межсервисного общения или для стриминга и собссно потоковой обработки данных.
...
Рейтинг: 0 / 0
Apache Kafka в структуре клиент - сервер
    #39831398
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинMandarinvas0,

Это можно конечно делать, мы сейчас так и делаем :) У нас пока 1 кластер бд и всё просто, но "завтра" планируется 1000 кластеров бд, и мне придётся описывать 1000 пулов соединений в томкате, наверное это ничего страшного но мне кажется что это не правильно, почему не знаю но чувствую :)

Сережа, Брин! Наконец то ты понял, что только на sql.ru тебе могут помочь!
1000 кластеров. или 1000 инстансов? хотя по мне и то и то чот дофига. что там за ворклоад то такой.
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache Kafka в структуре клиент - сервер
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]