Как выполнить координацию между несколькими экземплярами приложения?
Нужна помощь в принятии решения, какие рамки я могу использовать в этом сценарии. Я изучаю Zookeeper, но не совсем уверен, как решить этот сценарий использования.
фон:
- Скажем, есть приложение, которое подключается к источнику потоковой передачи (Kafka или Activemq и т. Д.) И записывает сообщения, которые были обработаны из потока, в файл.
- Это приложение развернуто как 4 экземпляра. Каждый экземпляр обрабатывает сообщения и записывает в файл, которые были обработаны за последние 1 час.
- Каждый экземпляр создает файл, в котором хранятся сообщения, обработанные им за последний час. пример -filename - имя_сервера_8.00 для сообщений, обработанных с 8-9
- Требуется передать все файлы, которые были созданы за последний час, если каждый экземпляр создал файл в этом окне, а также отправить только один консолидированный файл, в котором перечислены все 4 имени файла и количество записей.
что я ищу:
1. Как мне убедиться, что экземпляры приложения знают, создавали ли другие экземпляры также файлы, и если каждый экземпляр создан, то только они должны передавать файл 2. Независимо от отправления экземпляра, консолидированный файл должен знать, что было передано.
какие рамки я могу использовать для решения этой проблемы?
1 ответ
Вы определенно можете использовать ZooKeeper для этого. Я бы также использовал Apache Curator (примечание: я главный автор куратора).
Все экземпляры совместно используют файловый сервер? т.е. каждый экземпляр может видеть все созданные файлы? Если это так, вы можете назначить лидера, используя ZooKeeper / Curator, и только лидер делает всю работу. Вы можете увидеть пример кода выбора лидера здесь: https://github.com/apache/curator/tree/master/curator-examples/src/main/java/leader
Если экземпляры не совместно используют файловый сервер, вы все равно можете использовать ZooKeeper для координации записи общего файла. Вы снова назначаете лидера, который предоставляет API-интерфейс, который могут записывать все экземпляры, и лидер создает общий файл.
Вы также можете найти полезные рецепты кураторских барьеров: http://curator.apache.org/curator-recipes/double-barrier.html и http://curator.apache.org/curator-recipes/barrier.html
Вы должны были бы дать гораздо больше подробностей о вашем случае использования, если вы хотите более детальный дизайн.