Я новичок в разработке системы и имею некоторые сомнения в очередях сообщений и координирующих сервисах (zookeeper).Проектирование системы с использованием очередей сообщений и координационных служб
Это будет здорово, если кто-то может внести ясность в эти понятия: -
Мое понимание MQ в системе, что я проектирование: -
у меня будет служба производителя, который будет создавать сообщения и добавлять в MQ. Потребитель будет потреблять это сообщение и выполнять соответствующие действия. После того, как пользовательский ACK завершит обработку сообщения; MQ переместит смещение к следующему. Я не хочу, чтобы мои сообщения были пропущены, поэтому я должен быть уверен, что сообщения были успешно использованы. Также я пытаюсь, чтобы эта система потребляла сообщения ровно один раз (как можно ближе).
Теперь я следующие вопросы на основе этого понимания: -
1) Если я хочу, чтобы мой производителя и потребителя, чтобы быть запущен только один экземпляр (для высокой доступности) в том же DC, то мне нужно, чтобы иметь как производителя, так и потребителя в качестве отдельных услуг Zookeeper? Могут ли все мои разные сервисы (в мире микросервисов) нуждаться в отдельном сервере/экземпляре zookeeper или один и тот же экземпляр может решить эту проблему?
2) Когда сообщения потребляются Потребителем, он будет ACK MQ после его потребления (завершение обработки и принятие любых необходимых мер). Я пытаюсь понять, как это будет быстрее для системы, которая будет иметь тысячи запросов каждую секунду. Если мы читаем больше сообщений или не дожидаемся ACK до обработки, то в случае отказа пользователя эти сообщения будут пропущены, так как они никогда не обрабатывались успешно. Я понимаю, что с большим количеством потребителей это будет работать параллельно, но не ясно, как эта концепция работает. Может ли кто-нибудь объяснить мне, какой будет правильный способ потребления и настройки взаимодействия между компонентами, чтобы он был оптимизирован, а также постоянным, высоким, надежным и закрытым, как раз, когда-то моделью.
EDIT: Я планирую использовать Java, Zookeeper, Kafka, Cassandra в системе.