Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Apache Kafka в структуре клиент - сервер  [new]
Mandarin
Member

Откуда: Саратов
Сообщений: 1131
Всем привет! Подскажите пожалуйста как правильно встроить кафку в структуру клиент - сервер?
Описываю ситуацию. Есть классическая трехзвенка браузер + томкат + бд. Запросы приходят в томкат, томкат получив данные из запроса отправляет запрос в бд, полученную информацию отправляет браузеру. Мне нужно сделать горизонтальное масштабирование слоя бд. Я хочу чтобы томкат отправлял запросы в кафку и получал ответы из кафки, как подружить кафку с бд знаю. Есть ли какие либо стандарты на это счёт или нужно изобретать велосипед?
У меня есть ряд вопросов/сомнений на счёт правильности моих мыслей. Опишу их ниже.
1. Пришедший запрос я отправляю в топик "in"
2. Подписчик забирает запрос из топика "in" и обрабатывает в бд, результат отправляет в топик "out"
Дальше вопросов больше чем ответов :) В томкате я должен подписаться на топик "out" и ждать своих данных, вот тут вопрос создавать подписчика с нуля или брать из пула. Когда я получаю сообщения из общего потока я должен выбрать только свои. Вероятно будут запросы которые отвалились пока ждали ответа и их ответы будут мёртвым грузом лежать какое то время в очереди, а это лишняя нагрузка на их обработку. Я вроде как чувствую, что думаю в правильном направлении, но как реализовать детали пока не знаю, подскажите пожалуйста :)
27 июн 19, 15:23    [21916308]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
vas0
Member

Откуда: Таможенный союз (Россия, Казахстан)
Сообщений: 1288
Участвовал я как то в проекте в котором архитектор начитался что интеграцию между приложениями нужно делать только с помощью messaging (передачи сообщений). Видимо потому что книгу "Enterprise Integration Patterns" он прочитал только обложку. Ну а далее мы извращались все синхронные вызовы делали с помощь передачи сообщений. Туда и обратно с блокировками и разгребаниями кому какое сообщение пришло.

По сути, если у тебя синхронный вызов (RPC) и клиенту всегда нужен ответ, то и делай вызов RPC. Обмен сообщениями это когда ты отправил и забыл.
27 июн 19, 15:44    [21916349]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
Mandarin
Member

Откуда: Саратов
Сообщений: 1131
vas0,

Это можно конечно делать, мы сейчас так и делаем :) У нас пока 1 кластер бд и всё просто, но "завтра" планируется 1000 кластеров бд, и мне придётся описывать 1000 пулов соединений в томкате, наверное это ничего страшного но мне кажется что это не правильно, почему не знаю но чувствую :)
27 июн 19, 15:56    [21916362]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Mandarin
vas0,

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


Сережа, Брин! Наконец то ты понял, что только на sql.ru тебе могут помочь!
27 июн 19, 16:01    [21916367]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
Герой дня
Member

Откуда: obmanula.ru
Сообщений: 30539
Стандарт, думаю, есть - это Spring Boot Stream - все, что нужно - поднять Кафку и подключить к томкату в виде спринг либы Stream
27 июн 19, 16:05    [21916370]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
забыл ник
Member

Откуда:
Сообщений: 3045
В правильной архитектуре у тебя будет балансировщик нагрузки, который раскидывает реквесты на N инстансов томката, каждый из которых смотрит на определенную базу. Как уже правильно тебе сказали, в модели запрос - ответ, нету места мессадж пассингу. Kafka она для интеграции приложений, а не введения асинхронности.
27 июн 19, 16:05    [21916371]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
Герой дня
Member

Откуда: obmanula.ru
Сообщений: 30539
https://github.com/spring-cloud/spring-cloud-stream-binder-kafka
27 июн 19, 16:06    [21916373]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Mandarin, если серьезно, надо хотя бы в двух словах подбронее описать бизнес задачу...а то подозрительно выглядит.
27 июн 19, 16:09    [21916376]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Mandarin
Мне нужно сделать горизонтальное масштабирование слоя бд. Я хочу чтобы томкат отправлял запросы в кафку
1. Где показания что нужно мсштабировать?
2. Метод имени "кафка" не обсуждается?
27 июн 19, 16:10    [21916378]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
Mandarin
Member

Откуда: Саратов
Сообщений: 1131
PetroNotC Sharp,

Все очень просто. Есть OLTP система. Электронный документооборот 100500 документов разных и столько же пользователей, крутить всё это на одном сервере рано или поздно будет не возможно, соответственно надо делить данные по разным БД. Каждый коннект, после авторизации знает где лежат его данные, надо пойти в нужную бд и взять их. На уровне балансировщика, например haproxy, это сделать нельзя потому как haproxy не знает куда отправить коннект, а слой томкатов уже знает. В принципе ничего страшного нет в том что в томкате будет много пулов соединений, только режет глаз эта "не эстетическая картина" с JDBC пулами :)
27 июн 19, 16:30    [21916403]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
Mandarin
Member

Откуда: Саратов
Сообщений: 1131
забыл ник
В правильной архитектуре у тебя будет балансировщик нагрузки, который раскидывает реквесты на N инстансов томката, каждый из которых смотрит на определенную базу. Как уже правильно тебе сказали, в модели запрос - ответ, нету места мессадж пассингу. Kafka она для интеграции приложений, а не введения асинхронности.


Вот отличная идея!!! Спасибо огромное!!!
27 июн 19, 16:36    [21916407]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
vas0
Member

Откуда: Таможенный союз (Россия, Казахстан)
Сообщений: 1288
Mandarin
vas0,

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

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

Мы используем кафку, но у нас просто. Приходит запрос кидаем в очередь и все. Далее когда документ пройдет обработку клиент его увидит. Никакой обратной очереди у нас нет. Возможно тут можно добавлять какой то реактивный подход по оповещению клиентов. В целом перестроить архитектуру приложения на асинхронную обработку.
27 июн 19, 16:38    [21916415]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Mandarin
На уровне балансировщика, например haproxy, это сделать нельзя потому как haproxy не знает куда отправить коннект
как же он балансирует если не знает. Странно. Его обязанность раскидывать запросы.
27 июн 19, 16:59    [21916434]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Mandarin,
Тебе по ТЗ не нужна кафка
автор
Алгоритмы планирования

Множество алгоритмов планирования используются балансировщиками нагрузки, чтобы определить, какому серверу послать запрос. Простые алгоритмы включают в себя случайный выбор или круговой системе. Более сложные подсистемы балансировки нагрузки могут принимать во внимание дополнительные факторы, такие как сервера сообщили нагрузки, меньшее Время отклика, вверх/вниз статус (определяется путём мониторинга опрос какой-то), количество активных соединений, географическое положение, возможности, или сколько трафика он недавно был назначен.
27 июн 19, 17:04    [21916439]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
PetroNotC Sharp
Mandarin
куда отправить коннект
jdbc connect?
Балансровщик стоит до веб сервера. И имеет дело а http адресами серверов или томкатов
27 июн 19, 17:07    [21916443]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
pavel_nv
Member

Откуда: NV -> SpB
Сообщений: 260
Mandarin
На уровне балансировщика, например haproxy, это сделать нельзя потому как haproxy не знает куда отправить коннект, а слой томкатов уже знает.


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

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

ИМХО - я бы выбрал один из этих вариантов.
27 июн 19, 17:48    [21916474]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
pavel_nv
синхронизацию данных
можно штатной репликацией в каждой бд из коробки. Тогда кафка лишнее)
27 июн 19, 18:18    [21916504]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
pavel_nv
При авторизации указывайте с каким шардом (БД) работать:
ngnix умеет автоматом все читающие запросы на olap. Пишущие на oltp.
Как вариант.
27 июн 19, 18:19    [21916506]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
pavel_nv
Member

Откуда: NV -> SpB
Сообщений: 260
PetroNotC Sharp
pavel_nv
синхронизацию данных
можно штатной репликацией в каждой бд из коробки. Тогда кафка лишнее)



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

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


помоему это про репликацию (читаем с реплик, а пишем в мастер, и данные совпадают во всех БД). Я же про шардирование (когда схема данных в шардах одна, а данные разные, а в логин-БД и схема отдельная). Ну и ничего не мешает в рамках каждого шарда сделать репликацию с чтением с реплик.
27 июн 19, 18:40    [21916523]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
pavel_nv,
Да. Вы правы.
Мне ближе масштабирование репликацией. Вам шардирование.
27 июн 19, 19:00    [21916544]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
pavel_nv
Member

Откуда: NV -> SpB
Сообщений: 260
PetroNotC Sharp,

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

у шардирования есть сомнительный плюс - люди делают шарды такого размера, что БД каждого шарда помещается в оперативной памяти. И можно писать в SQL хоть какой говнокод, и БД тебе почти все простит)
27 июн 19, 19:06    [21916555]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 1999
Скажите примерно скорость обработки документа? Это секунды, час, день?

Картинка с другого сайта.

На самом деле Вам скорее лучше подойдет RabbitMQ с их концепцией топик эксченжа + там проще решается рестарт если что
27 июн 19, 19:07    [21916556]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
pavel_nv
мне ближе без всего этого) чем проще - тем лучше)
я - за. И без кафки. Будет ngnix и проще некуда. Правда админ нужен обязательно.
27 июн 19, 19:47    [21916592]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
andreykaT
Member

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

а кафка она для межсервисного общения или для стриминга и собссно потоковой обработки данных.
27 июн 19, 21:01    [21916627]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
andreykaT
Member

Откуда:
Сообщений: 2427
Озверин
Mandarin
vas0,

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


Сережа, Брин! Наконец то ты понял, что только на sql.ru тебе могут помочь!

1000 кластеров. или 1000 инстансов? хотя по мне и то и то чот дофига. что там за ворклоад то такой.
27 июн 19, 21:01    [21916629]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
сладкий бубалех
Member

Откуда:
Сообщений: 40
а какая бд используется?

вот например шард из коробки. ACID в пределах ноды
https://www.citusdata.com/

+
Distributing tables and loading data
тыц
We will now go ahead and tell Citus to distribute these tables across the different nodes we have in the cluster. To do so, you can run create_distributed_table and specify the table you want to shard and the column you want to shard on. In this case, we will shard all the tables on the company_id.

SELECT create_distributed_table('companies', 'id');
SELECT create_distributed_table('campaigns', 'company_id');
SELECT create_distributed_table('ads', 'company_id');

Sharding all tables on the company identifier allows Citus to colocate the tables together and allow for features like primary keys, foreign keys and complex joins across your cluster. You can learn more about the benefits of this approach here.
27 июн 19, 21:02    [21916630]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
andreykaT
Member

Откуда:
Сообщений: 2427
Sergunka
Скажите примерно скорость обработки документа? Это секунды, час, день?

Картинка с другого сайта.

На самом деле Вам скорее лучше подойдет RabbitMQ с их концепцией топик эксченжа + там проще решается рестарт если что

ниче ему не подойдет пока не ясно где затык.
27 июн 19, 21:02    [21916631]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
andreykaT
Member

Откуда:
Сообщений: 2427
vas0
Участвовал я как то в проекте в котором архитектор начитался что интеграцию между приложениями нужно делать только с помощью messaging (передачи сообщений). Видимо потому что книгу "Enterprise Integration Patterns" он прочитал только обложку. Ну а далее мы извращались все синхронные вызовы делали с помощь передачи сообщений. Туда и обратно с блокировками и разгребаниями кому какое сообщение пришло.

По сути, если у тебя синхронный вызов (RPC) и клиенту всегда нужен ответ, то и делай вызов RPC. Обмен сообщениями это когда ты отправил и забыл.

а че обложка то. там как раз четыре базовых шаблона и описаны, в т.ч. и рпц. прочто тот чел по ходу очень хотел попробовать кафку но не знал куда ее присунуть а главное зачем )))
27 июн 19, 21:04    [21916632]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
andreykaT
1000 кластеров. или 1000 инстансов?
он пару тройку ноликов приписал. Рука дрогнула).
27 июн 19, 21:37    [21916638]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
andreykaT
Member

Откуда:
Сообщений: 2427
имхо это странное решение канеш кафку для синхронки. но вот если посмотреть на акку? там же шаблонно похожая тема точно так же продюсер-консамер и го.
27 июн 19, 21:44    [21916650]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
mayton
Member

Откуда: loopback
Сообщений: 42879
Сейчас каждый в режиме мозгового шторма пишет всё что знает об очередях.

Давайте я верну вас в начало топика. Автор пишет. Пункт первый.

Описываю ситуацию. Есть классическая трехзвенка браузер + томкат + бд. Запросы приходят
в томкат, томкат получив данные из запроса отправляет запрос в бд, полученную информацию отправляет
браузеру. Мне нужно сделать горизонтальное масштабирование слоя бд.


Это похоже на описание самой задачи. Ну по крайней мере звучит правдоподобно.

Далее.. Пункт второй.

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


Дорогие мои!

Скажите мне КАКАЯ связь между первым и вторым?
27 июн 19, 23:49    [21916671]     Ответить | Цитировать Сообщить модератору
 Re: Apache Kafka в структуре клиент - сервер  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
mayton,
Никакой. Или очень дальняя.
Он хочет масштабировать базу очередью)
28 июн 19, 09:48    [21916759]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Java Ответить